POSIX シェル、またはかなり最近の Bourne シェル バリアントであると仮定すると/bin/sh
、実際のコマンドを実行する前に、コマンド内の標準出力をリダイレクトできます。exec 2>/dev/null ;
実行したいコマンドの前に追加するだけです。
私が個人的にこれを行う方法は次のとおりです。
/* Shell syntax for redirecting standard error to /dev/null, to
* silence any errors. If /bin/sh does not support this, you can
* simply replace it with an empty string.
*/
#define POPEN_STDERR_NULL "exec 2>/dev/null ;"
...
snprintf(cmd, MAX_PATH, POPEN_STDERR_NULL "/myscript -q | grep -i -e '%s'", deviceName);
FILE *res = popen(cmd, "r");
popen()
コマンドは、指定された/bin/sh
コマンドを実行するために内部的に使用します。上記は/bin/sh
、Linux や SunOS 5.10 を含む、私がテストできるすべてのバリアントで機能するため、移植性が高いはずです。(つまりdash
、、、bash
および SunOS 5.10sh
はすべて正常に動作します。)
非標準システムではアプリケーションを再コンパイルする必要があるため、いつでもマクロを編集してプレフィックスを省略できます。(そのようなシステムを見つけた場合、必要に応じてテストをマジックに簡単に追加して、Makefile
自動的に省略することができます。)
snprintf()
呼び出しでパラメーター置換を変更したことに注意してください。一重引用符を含まないものに対してdeviceName
機能します。内の一重引用符は、呼び出しの前に文字列に置き換える必要があります。deviceName
'"'"'
snprintf()
質問?