将stdout重定向到文件并每隔一行插入一个字符串

时间:2014-07-31 12:45:59

标签: c stdout dup2

我正在使用C编写程序,其中使用POPEN执行系统命令。 将每个命令的输出写入文件。 我希望能够写入相同的文件并对命令的输出进行编号。

这是我想要做的输出。

假设我想要运行的命令是..

1)ls 2)bash -version

所以我想要的输出看起来像这样..

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

我怎么能这样做?谢谢!

0 个答案:

没有答案