我必须为学校制作一个简单的应用程序。
我必须在终端上每行写一个参数,并在标准输出上返回用户选择。
比如我写的cat my_app main.c main.h
,如果用户选择了main.c
,那么我回到main.c
cat。问题是,如果我在标准输出(又名 STDOUT_FILENO)上写菜单,我会将它返回到cat
. 我可以在 STDERR 上写我的菜单,但它有点难看。
我真的不知道如何使用/dev/tty*
或 之类的设备/文件/dev/pty*
,但我觉得我可以用它们在终端上写一些东西,而不必在 STDOUT 或 STDERR 上写。
基本上,我想打开一个新的输出,它将由终端(STDOUT、STDERR、MYOUT)显示。
不知道我解释的对不对。
要构建您可以打开的交互式应用程序/dev/tty
,它将向控制终端返回一个文件描述符:
int ttyfd = open("/dev/tty", O_RDWR);
Run Code Online (Sandbox Code Playgroud)
您可以使用它代替STDIN_FILENO
or STDOUT_FILENO
(在程序启动时,它们可能会被重定向到与终端不同的地方)。
下面是一些例子:
int ttyfd = open("/dev/tty", O_RDWR);
Run Code Online (Sandbox Code Playgroud)
当调用./test >out
,它应该打印终端和东西就hello消息像fd: 3
中out
的文件。