写入标准输出(输出重定向除外) C

Max*_*x13 5 c tty stdout

我必须为学校制作一个简单的应用程序。

我必须在终端上每行写一个参数,并在标准输出上返回用户选择。

比如我写的cat my_app main.c main.h,如果用户选择了main.c,那么我回到main.ccat。问题是,如果我在标准输出(又名 STDOUT_FILENO)上写菜单,我会将它返回到cat. 我可以在 STDERR 上写我的菜单,但它有点难看。

我真的不知道如何使用/dev/tty*或 之类的设备/文件/dev/pty*,但我觉得我可以用它们在终端上写一些东西,而不必在 STDOUT 或 STDERR 上写。

基本上,我想打开一个新的输出,它将由终端(STDOUT、STDERR、MYOUT)显示。

不知道我解释的对不对。

Sté*_*nez 7

要构建您可以打开的交互式应用程序/dev/tty,它将向控制终端返回一个文件描述符:

int ttyfd = open("/dev/tty", O_RDWR);
Run Code Online (Sandbox Code Playgroud)

您可以使用它代替STDIN_FILENOor STDOUT_FILENO(在程序启动时,它们可能会被重定向到与终端不同的地方)。


下面是一些例子:

int ttyfd = open("/dev/tty", O_RDWR);
Run Code Online (Sandbox Code Playgroud)

当调用./test >out,它应该打印终端和东西就hello消息像fd: 3out的文件。