シェルコマンドを引数として使用する関数を作成しようとしていますが、forkを使用してコマンドを実行する新しいプロセスを生成します。また、関数の呼び出し側がFILE *ポインターを使用してその関数を読み取ることができるように、コマンドの標準出力をリダイレクトする必要もあります。シェルコマンドを実行し、その出力をCプログラムで読み取る
static FILE* runCommand(char* command){
int pfd[2];
if(pipe(pfd)<0)
return NULL;
if(pid=fork()==0){ //child
close(pfd[0]);
dup2(pfd[1],1); //redirect output to pipe for writing
execlp(command,(char*)0);
}
close(pfd[1]);
//return a file pointer/descriptor here?
}
私はコマンドの出力を読み取るために使用できるファイルポインタを返す方法を確認していません。また、シェル上でコマンドを実行する正しい方法はありますか?
ps。私はpopenについて読んだが、私はそれを使うことができないほどの理由があるので、私はこの機能を自分で実装しなければならない。
はFILE *
オブジェクトを持つ既存のファイルディスクリプタを関連付けるためにfdopen
を使用し
popenがmallocを呼び出しているようです(mallocをオーバーライドした原因がわかります)、それはプロジェクトのために複雑になります。だから私はpopenを呼ぶことを好まないのです。 – SpotsWood