لماذا تكتب () لبرنامج خروج الأنابيب عندما يكتب Pipe إلى Stdout؟

StackOverflow https://stackoverflow.com/questions/1586795

  •  22-09-2019
  •  | 
  •  

سؤال

لديّ تطبيق خادم يكتب إلى واصف ملف Popen ("MyCommand" ، "W") في مؤشر ترابط منفصل ، وإذا تم تمرير الأمر إلى Popen () ينتج عنه أي إخراج إلى Stdout أو Stderr ، فإن تطبيقي يخرج. ومع ذلك ، فإن هذه ليست سوى مشكلة عندما تم استدعاء تطبيق الخادم الخاص بي عبر Inetd ، إذا استخدمت SSH لإطلاق الخادم ، فلن يكون لديه هذه المشكلة.

وبالمثل ، عندما يقرأ تطبيق الخادم الخاص بي من واصف ملف popen ("MyCommand2" و "R") في مؤشر ترابط منفصل وإذا تم تمرير الأمر إلى popen () يؤدي إلى أي إخراج إلى Stderr (stdin يذهب إلى أنبوب بلدي) ، يخرج التطبيق. مرة أخرى ، يحدث هذا فقط مع استدعاء Inetd ، وليس SSH استدعاء.

هل كانت مفيدة؟

المحلول

تحتاج إلى إغلاق جميع FDs من العملية قبل فتح الأنبوب ، ثم هل I/O إعادة توجيه. هذا لأنه إذا inetd ، فإن العملية تعمل كخفي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top