gpt4 book ai didi

c - 如何在 C 中以编程方式实现 'tee'?

转载 作者:太空狗 更新时间:2023-10-29 16:41:07 24 4
gpt4 key购买 nike

我正在寻找一种在 C 语言中以编程方式(即,不使用命令行重定向)实现“tee”功能的方法,以便我的标准输出同时进入标准输出和日志文件。这需要适用于我的代码和所有输出到标准输出的链接库。有什么办法吗?

最佳答案

您可以popen() tee 程序。

或者您可以通过子进程fork() 和管道stdout(改编 self 编写的真实实时程序,所以它有效!):

void tee(const char* fname) {
int pipe_fd[2];
check(pipe(pipe_fd));
const pid_t pid = fork();
check(pid);
if(!pid) { // our log child
close(pipe_fd[1]); // Close unused write end
FILE* logFile = fname? fopen(fname,"a"): NULL;
if(fname && !logFile)
fprintf(stderr,"cannot open log file \"%s\": %d (%s)\n",fname,errno,strerror(errno));
char ch;
while(read(pipe_fd[0],&ch,1) > 0) {
//### any timestamp logic or whatever here
putchar(ch);
if(logFile)
fputc(ch,logFile);
if('\n'==ch) {
fflush(stdout);
if(logFile)
fflush(logFile);
}
}
putchar('\n');
close(pipe_fd[0]);
if(logFile)
fclose(logFile);
exit(EXIT_SUCCESS);
} else {
close(pipe_fd[0]); // Close unused read end
// redirect stdout and stderr
dup2(pipe_fd[1],STDOUT_FILENO);
dup2(pipe_fd[1],STDERR_FILENO);
close(pipe_fd[1]);
}
}

关于c - 如何在 C 中以编程方式实现 'tee'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1761950/

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