تنفيذ برنامج خارجي عبر نظام() لا يعمل بشكل صحيح

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

  •  06-07-2019
  •  | 
  •  

سؤال

محاولة استدعاء برنامج (ncbi الانفجار ، بالنسبة لأولئك الذين يحتاجون إلى معرفة) من قانون بلدي ، عبر استدعاء الأوامر في نظام() المكالمة.

إذا كنت تنفيذ سلسلة مباشرة في وعاء ، يعمل على النحو المنشود ، ولكن إذا حاولت نفس السلسلة عبر نظام () ، يعود البرنامج أسرع بكثير ، دون النتائج المرجوة.ملف الإخراج التي تم إنشاؤها ، ولكن حجم الملف 0.عاد رمز الخطأ هو أيضا 0.حتى أنني حاولت إلحاق "> الإخراج.سجل 2> خطأ.سجل" ولكن هذه الملفات لا يتم إنشاء.

أعتقد أنه له علاقة مع متغيرات البيئة أو المسار...

اسم ملف الإخراج يعطى عن طريق -o معلمة سطر الأوامر, لا إعادة توجيه الإخراج.

قرأت شيئا عن popen الأمر ربما يكون أكثر ملاءمة للاستخدام بلدي-الحالة, ولكن أنا لا يمكن العثور عليه ، أي مكتبة ؟

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

المحلول

والسبب الأكثر احتمالا لهذه المشاكل هو بيئة غير صحيحة وضع متغير في تلك ~/.bashrc.

ويجب أن تكون قادرا على رؤية ما ncbi غير سعيد عن طريق تنفيذ

$SHELL -c '<exact string you pass to system()>'

وهناك طريقة أخرى شائعة لتصحيح هذه هي مع strace. تنفيذ:

strace -fo /tmp/strace.out ./myProgram

ووالبحث في /tmp/strace.out عن أدلة.

نصائح أخرى

هل هناك أي سبب أن كنت لا تريد fork وexec؟ هذا هو المصطلح الشائع لتنفيذ عملية واحدة من آخر.

وpopen في مكتبة C القياسية راجع صفحة رجل

بعض الأسئلة السريعة:

  • كيف يمكنك تنفيذ في شل ؟
  • كيف يمكنك تنفيذ في نظام القيادة ؟
  • ما هي القيمة التي يتم إرجاعها من قبل النظام ؟

بالضبط نسخ ولصق من المحطة هو الأفضل ثم وصف باللغة الإنجليزية.

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