C语言 获取终端的fd,当一个管道的目的地



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

tcsetattr(STDIN_FILENO, TCSAFLUSH, &raw)

以便它可以读取按键,使用转义码进行绘制等

但是现在我想这样做:echo hello | myprog,从管道中读取stdin,然后在程序UI中显示它。但是现在STDIN_FILENO指向一个管道而不是一个终端,tcsetattrimproper ioctl一起失败。当作为管道的目的地时,我如何得到实际终端的fd?

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

最新更新