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

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

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

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

例如,我写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)。

我不知道我解释是否正确。

答案1

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

int ttyfd = open("/dev/tty", O_RDWR);

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


这是一些例子:

#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main() {
  int ttyfd = open("/dev/tty", O_RDWR);
  printf("fd: %d\n", ttyfd);
  write(ttyfd, "hello tty!\n", 11);
  return 0;
}

当用 调用时./test >out,它应该在终端上打印 hello 消息以及类似文件fd: 3中的内容out

相关内容