我想从 C 文件运行 execlp() 并将结果写入某个输出文件。我使用以下行:
buff = "./cgi-bin/smth";
execlp(buff, buff, "> /cgi-bin/tmp", NULL);
其中 smth 是一个编译的 C 脚本。但是 smth 打印到 stdout,并且没有出现任何文件。会发生什么,以及如何将脚本结果放入输出文件?
如果使用execlp
,您必须自己处理dup2
。相比之下,您可以查看我如何处理execvp
文件输出。我传递一个用于重定向的标志,然后处理它:
if (structpipeline->option[0] == 1) { /* output redirection */
int length = structpipeline[i].size;
char *filename = structpipeline->data[length - 1];
for (int k = length - 2; k < length; k++)
structpipeline->data[k] = ' ';
fd[1] = open(filename, O_WRONLY | O_CREAT, 0666);
dup2(fd[1], STDOUT_FILENO);
close(fd[1]);
} /* TODO: input redirection */
execvp(structpipeline[i].data[0], structpipeline[i].data);
另请参阅此问题将 exec 输出重定向到缓冲区或文件