【发布时间】:2019-04-10 20:26:40
【问题描述】:
我正在尝试学习 dup2 并将标准输出切换到文件而不是终端。这是在任何地方都可以使用的示例,但不确定为什么它不适合我。我不认为我需要一个 fork() 因为我不需要一个不同的进程来执行文件中的打印语句。
函数被调用的地方:
int main(int argc, char **argv){
char *something = "hello";
saveHistoryToFile(something);
}
//这是函数。有一个文件名history.txt
void saveHistoryToFile(char *history){
int fw = open("history.txt",O_WRONLY | O_APPEND);
dup2(fw, 1);
printf("%s", history);
}
错误:它打印到终端而不是文件!
【问题讨论】:
-
“不适合我”究竟是什么意思?不编译?运行时崩溃?产生错误的结果?
-
只要
"history.txt"存在,我觉得没问题,否则添加O_CREAT。错误检查 +perror或在strace下运行应该可以揭示问题所在。 -
fflush(stdout);在printf()之后修复了吗? -
它不打印到文件中只是打印到终端@JohnBollinger
-
您没有检查函数调用的返回值以识别它们是否成功。您对
open()的调用很可能失败,因此,您对dup2()的调用也失败了。这将使您的标准输出仍然连接到终端(或它最初连接到的其他任何东西)。