0

我在 c 中做一个小的 shell 实现,我被卡住了。

我希望能够重定向stdinand stdout,但我很困惑。在我的 shell 中,当我想启动一个程序时,我使用该execvp函数。现在我希望能够重定向stdout,所以如果我运行另一个进程,输出应该被重定向到文件而不是屏幕。

这是示例代码:

pid_t pid;

// Child process
pid = vfork();

if((pid == 0)){
    freopen("myfile.txt", "w", stdout);
    char* arr[3];
    arr[0] = "cat";
    arr[1] = "someFileToCat.txt";
    arr[2] = NULL;
   execvp("cat", arr);
   fclose(stdout);
}  

但是,它确实在终端中打印,而不是在文件中。

4

1 回答 1

3

文件流是一种C抽象。您正在寻找的是较低级别的系统调用,例如open,closedup2.

有关完整示例,请参阅将 exec 输出重定向到缓冲区或文件

于 2012-09-30T17:21:28.933 回答