gpt4 book ai didi

c - 将 stdout 重定向到文件在中间停止。 Linux

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:23:27 24 4
gpt4 key购买 nike

我的程序使用“系统”命令以下列方式启动两个二进制文件:

int status = system("binaryOne &");
int status = system("binaryTwo &");

由于所有三个二进制文件都写入相同的标准输出,因此所有输出都是混合的并且不可理解。所以我更改了启动命令以将两个二进制文件的标准输出重定向到我执行 tail -f 的不同文件:

int status = system("binaryOne > oneOut.txt &");
int status = system("binaryTwo > twoOut.txt &");

问题是写入文件会在某个时候停止。有时它会卡住,在某个地方缓冲,而不是它的一部分被一次又一次地扔回去。大多数时候它只是停止。

我验证了二进制文件继续运行并写入标准输出。

最佳答案

这是您可以使用 fork + exec 尝试的方法

pid_t child_pid = fork();

if (!child_pid) {
// child goes here

char * args[] = {"binaryOne", NULL};

int fd = open("oneOut.txt", O_WRONLY | O_CREAT | O_TRUNC);

if (!fd) {
perror("open");
exit(-1);
}

// map fd onto stdout
dup2(fd, 1);

// keep in mind that the children will retain the parent's stdin and stderr
// this will fix those too:
/*
fd = open("/dev/null", O_RDWR);
if (!fd) {
perror("open");
exit(-1);
}

// disable stdin
dup2(fd, 0);
// disable stderr
dup2(fd, 2);
*/

execvp(*args, args);

// will only return if exec fails for whatever reason
// for instance file not found

perror("exec");

exit(-1);
}

// parent process continues here

if(child_pid == -1) {
perror("fork");
}

编辑重要提示:忘记为open设置写标志。

关于c - 将 stdout 重定向到文件在中间停止。 Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17408918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com