منع إخراج الخطأ المعياري للأمر نظام تشغيل برمجي

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

سؤال

ولدي هذا البرنامج في c ++:

#include <iostream>
using namespace std;
int main()
{
char buf[50];
cin.getline(buf,49);
system(buf);
return 0;
}

عند أركض وترجمة ذلك وعلى سبيل المثال نوع "الحلو"، برنامجي طباعة الخطأ:

  "helo" not found.

هل يمكنني التوقف عن هذا الخطأ من الظهور؟ هل هناك أي طريقة لتعطيل الخطأ من الأمر النظام؟

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

المحلول

ولا يمكنك تغيير الطريقة التي يعرض system أخطاء. C ++ و C وضع القليل جدا من دون شروط على تطبيقات في هذا الصدد، لذلك تركت أن أجزاء كبيرة منه غير محدد، والسماح لها بأن تكون مرنة قدر الإمكان.

إذا كنت تريد مراقبة أكثر دقة، يجب عليك استخدام وظائف مكتبة وقت التشغيل أو واجهة نظام التشغيل. محاولة execvp (انظر man execvp) في لينكس / يونكس أو الدالة CreateProcess لأنظمة ويندوز، والذي يستخدم ويندوز API التي تتيح سيطرة كبيرة على معالجة الأخطاء وغيرها من الاشياء.

نصائح أخرى

هل أنت على لينكس؟ حاول كتابة "./hello"

وإذا كان هذا يعمل، والسبب هو أن الدليل الحالي ( ".") ليست في مسار البحث. يجب أن تشير إلى أن البرنامج المترجمة هو "هناك" في الدليل.

وبدلا من ذلك، يمكنك أن تفعل شيئا مثل

وتصدير PATH = $ PATH:.

وهذا يضيف "". (الدليل الحالي) إلى مسار البحث.

إذا كنت على ويندوز، في محاولة "hello.exe"

إذا كنت على لينكس، يمكنك محاولة إعادة توجيه إخراج الخطأ إلى جهاز null؟

strcat(buf, "2> /dev/null");
system(buf);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top