لماذا تكتب () لبرنامج خروج الأنابيب عندما يكتب Pipe إلى Stdout؟
سؤال
لديّ تطبيق خادم يكتب إلى واصف ملف Popen ("MyCommand" ، "W") في مؤشر ترابط منفصل ، وإذا تم تمرير الأمر إلى Popen () ينتج عنه أي إخراج إلى Stdout أو Stderr ، فإن تطبيقي يخرج. ومع ذلك ، فإن هذه ليست سوى مشكلة عندما تم استدعاء تطبيق الخادم الخاص بي عبر Inetd ، إذا استخدمت SSH لإطلاق الخادم ، فلن يكون لديه هذه المشكلة.
وبالمثل ، عندما يقرأ تطبيق الخادم الخاص بي من واصف ملف popen ("MyCommand2" و "R") في مؤشر ترابط منفصل وإذا تم تمرير الأمر إلى popen () يؤدي إلى أي إخراج إلى Stderr (stdin يذهب إلى أنبوب بلدي) ، يخرج التطبيق. مرة أخرى ، يحدث هذا فقط مع استدعاء Inetd ، وليس SSH استدعاء.
المحلول
تحتاج إلى إغلاق جميع FDs من العملية قبل فتح الأنبوب ، ثم هل I/O إعادة توجيه. هذا لأنه إذا inetd ، فإن العملية تعمل كخفي.
لا تنتمي إلى StackOverflow