تنفيذ برنامج خارجي عبر نظام() لا يعمل بشكل صحيح
سؤال
محاولة استدعاء برنامج (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 القياسية راجع صفحة رجل
بعض الأسئلة السريعة:
- كيف يمكنك تنفيذ في شل ؟
- كيف يمكنك تنفيذ في نظام القيادة ؟
- ما هي القيمة التي يتم إرجاعها من قبل النظام ؟
بالضبط نسخ ولصق من المحطة هو الأفضل ثم وصف باللغة الإنجليزية.