使用C语言execvp函数时重定向输出到文件无内容问题
C语言Shell模拟程序中execvp输出重定向文件无内容的解决方法
在C语言实现Shell命令执行模拟程序时,尝试将execvp函数的输出重定向到文件,终端直接运行时输出正常,但重定向到output.txt后文件无内容。相关代码如下:
int file = open("output.txt", O_WRONLY | O_CREAT); if (file == -1) { perror("open"); exit(EXIT_FAILURE); } if (dup2(file, STDOUT_FILENO) == -1) { perror("dup2"); exit(EXIT_FAILURE); } char* command1= "grep"; char* myList[]={"grep", "URL", NULL}; close(file); execvp(command1, myList); perror("execvp"); exit(EXIT_FAILURE);
解决方案
问题根源是未关闭管道的读写端,导致子进程输出无法正确刷新到文件。需要在dup2函数调用后添加以下代码关闭管道两端:
close(fd[0]); close(fd[1]);
内容的提问来源于stack exchange,提问作者Fluffy Gazelle
相关产品推荐
相关产品推荐

