【发布时间】:2021-03-23 08:59:51
【问题描述】:
说明
我正在尝试用 C 语言制作一个可以在终端中运行的基本应用程序。 我的目标是编写一个代码,用 dup2(foo, STDOUT_FILENO); 在文件中打印一些输出。 一些输出到终端。问题是我无法理解如何在其中两个之间切换。 我读了几个问题,但我无法理解。
错误/问题
当我用 C 编写时
int foo = open("./foo.txt", O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
dup2(foo, STDOUT_FILENO);
sytem("man man"); //trying yo write man in foo.txt
some_macig_function();
printf("welcome back to terminal output");
我不知道什么是 macig_fonciton,即使我的子进程已完成,我的代码也会继续写入文件(我猜),第二个也是最后一个问题是我的 foo.txt 错误,输出如下( MMAANNUUAALL SSEECCTTIIONNSS)
【问题讨论】:
-
您确实需要在代码中进行错误检查。例如,永远不要假设对
open的调用会成功。 -
我是 linux 和 c 的新手,我怎么能做到这一点
-
@KamilCuk 我在 foo.txt 中打印 man man 输出而不是控制台,但在那之后,我的代码确实写入了文件和 shell。我的 txt 变成 man man outs 并带有一些重复的字符,欢迎回到终端输出。我在终端 agin 看到欢迎回到终端
-
@KamilCuk
man似乎能够检测它是否在 tty 或管道中运行,请尝试man man | cat -。我猜 OP 正在打那个案子 -
@alagner
man -P cat man也应该可以工作。