يتصرف التطبيق بشكل مختلف عندما يتم إعادة توجيه الإخراج إلى كائن Nspipe؟

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

سؤال

لديّ تطبيق يعمل مع مآخذ وقراءة / يكتب البيانات. يستخدم مؤسسة إطار عمل مع cfnetwork و stdio.

فيما يلي المشكلة - عندما يتم إطلاقه من وحدة التحكم (قذيفة باش) ، فإنه يعمل بشكل جيد بنسبة 100 ٪ ولا حرج في. ومع ذلك ، عندما يتم الاحتجاج به بواسطة تطبيق آخر عبر Nstask Madness يبدأ. ينطبق التطبيق بأكمله على الجنون ويقرأ فقط المقبس مرة واحدة ثم يتم تعليقه (يهدف إلى الخروج بعد الانتهاء).

لا يعتمد هذا التطبيق على المتغيرات البيئية أو أي أشياء أخرى من هذا القبيل. إنها ليست مشكلة مستخدم أيضًا. عند إطلاقه ، يرسل طلبًا بسيطًا إلى الخادم و "printfاستجابة ويقرأ مرة أخرى. يحدث هذا حتى يتم استلام حزمة إنهاء.

أنا مرتبك حقًا ، ويشعر أن هناك شيئًا ما داخل الإطار يجعل التطبيق مجنونًا فقط لإطفاء المبرمج.

بالمناسبة ، أنا على Mac OS X Snow Leopard والتطبيق هو لنفس النظام الأساسي.

تحرير 1: إعادة توجيه stdout إلى nspipe يسبب ذلك. لكن لماذا ؟

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

المحلول

libc يعامل أنبوب/ملف ووحدة تحكم متصلة بمحطة (pseudo) بشكل مختلف. على وجه الخصوص ، تختلف سياسة التخزين المؤقت الافتراضية. انظر المناقشة المكثفة في هذا المكدس فائض Q&A.

لذلك ، من الممكن تصوره تمامًا أن البرنامج الذي يعمل عند الاتصال بمحطة (Pseudo) لن يعمل مع أنبوب. إذا كنت بحاجة إلى المزيد من المشورة المحددة ، فأنت بحاجة إلى نشر (على الأقل الهيكل العظمي) الكود الخاص بك.

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