重定向EXEC输出到缓冲器或文件 [英] Redirecting exec output to a buffer or file
问题描述
我正在写一个C程序中我叉()
,执行exec()
和的wait()
。我想借此程序的输出I exec'ed写入到文件或缓冲区。
I'm writing a C program where I fork()
, exec()
, and wait()
. I'd like to take the output of the program I exec'ed to write it to file or buffer.
例如,如果我Exec的 LS
我想写文件1文件2等
缓冲/文件。我不认为有一种方法来读取标准输出,这是否意味着我必须使用管道?这儿有一般程序,我一直没能找到?
For example, if I exec ls
I want to write file1 file2 etc
to buffer/file. I don't think there is a way to read stdout, so does that mean I have to use a pipe? Is there a general procedure here that I haven't been able to find?
推荐答案
有关输出发送到另一个文件(我离开了错误检查将重点放在重要的细节):
For sending the output to another file (I'm leaving out error checking to focus on the important details):
if (fork() == 0)
{
// child
int fd = open(file, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
dup2(fd, 1); // make stdout go to file
dup2(fd, 2); // make stderr go to file - you may choose to not do this
// or perhaps send stderr to another file
close(fd); // fd no longer needed - the dup'ed handles are sufficient
exec(...);
}
有关输出发送到管道,所以你就可以读取输出入缓冲区:
For sending the output to a pipe so you can then read the output into a buffer:
int pipefd[2];
pipe(pipefd);
if (fork() == 0)
{
close(pipefd[0]); // close reading end in the child
dup2(pipefd[1], 1); // send stdout to the pipe
dup2(pipefd[1], 2); // send stderr to the pipe
close(pipefd[1]); // this descriptor is no longer needed
exec(...);
}
else
{
// parent
char buffer[1024];
close(pipefd[1]); // close the write end of the pipe in the parent
while (read(pipefd[0], buffer, sizeof(buffer)) != 0)
{
}
}
这篇关于重定向EXEC输出到缓冲器或文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!