C语言 当管道的目的地

7hiiyaii  于 2022-12-29  发布在  其他
关注(0)|答案(1)|浏览(124)

我的程序(一个文本编辑器)进入终端的原始模式如下:

tcsetattr(STDIN_FILENO, TCSAFLUSH, &raw)

以便它能够读取击键、使用转义码绘图等。
但现在我想这么做:echo hello | myprog,从管道中读取stdin,然后在程序UI中显示。但是现在STDIN_FILENO指向管道而不是终端,tcsetattr失败,显示improper ioctl。作为管道的目的地,如何获得实际终端的fd

t98cgbkg

t98cgbkg1#

通常,/dev/tty是当前的控制台,如果不需要stdio接口,可以使用int ttyfd = open("/dev/tty", O_RDWR)打开它,接收fd(在同一设备上混合使用Unix I/O和stdio I/O通常是个坏主意,但如果您真的想这样做,可以使用FILE* ftty = fopen("/dev/tty", "rw");打开,然后使用fileno(ftty)FILE*中取出fd)。

相关问题