POPENを使用してシステムコマンドを実行するCを使用してプログラムを作成しています。すべてのコマンドの出力をファイルに書き込みます。同じファイルに書き込み、コマンドの出力に番号を付けたいです。
これが私が目指している出力です。
実行したいコマンドが..
1) ls 2) bash -バージョン
したがって、私が望む出力は次のようになります..
1) ls
*file.txt file2.txt file3.txt file4.txt
2) bash -version
GNU bash, version 4.2.45(1)-release (i686-pc-linux-gnu)
これは私が作ったコードです:
FILE * out = NULL;
char * com = malloc(2000);
char * execCom = malloc(30000);
char * comR = malloc(2000);
strcpy(execCom, commands);
FILE * fp = NULL;
//remove("conf.txt")
out=fopen("com.txt","w");
dup2(fileno(out),1);
//run command and redirect the output to the file specified
if (execCom!=NULL)
{
fp=popen(com1,"w");
fwrite(com2, 1,strlen(com2),fp);
fwrite(com3, 1, strlen(com3),fp);
// get the first token
com = strtok(execCom, "\n");
// walk through other tokens
while( com != NULL )
{
strcpy(comR,"\0");
strcat(comR,com);
strcat(comR,"\n");
printf("%s",comR);
//execute command
fwrite(comR, 1, strlen(comR),fp);
com = strtok(NULL, "\n");
}
pclose(fp);
fclose(out);
}
stdout の出力をファイルにリダイレクトすることができ、これを実現するために dup2 を使用しました。次に、dup2がstdoutをファイルにリダイレクトすることを知って、printfを使用して、ファイルに挿入したい文字列を出力しました(printfの文字列が同じファイルにリダイレクトされ、必要な場所に挿入されると予想していましたしかし、そうではありませんでした。)
これが私が得たものです..はい、出力はファイルとprintfの文字列にリダイレクトされました。しかし、以下に示すように、私が望むようにフォーマットされていません...
*file.txt file2.txt file3.txt file4.txt
GNU bash, version 4.2.45(1)-release (i686-pc-linux-gnu)
1) ls
2) bash -version
どうすればそれができるようになりますか? ありがとうございました!