0

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

どうすればそれができるようになりますか? ありがとうございました!

4

0 に答える 0