gpt4 book ai didi

c - Linux C 选择 : piping echo to input works, 但从键盘读取却没有?

转载 作者:行者123 更新时间:2023-11-30 18:09:08 24 4
gpt4 key购买 nike

我试图理解http://beej.us/guide/bgnet/examples/select.c (包含在下面供引用)。我正在这样做:


:~$ cat/etc/issue



Ubuntu 10.04 LTS\n\l
:~$ gcc --版本
海湾合作委员会(Ubuntu 4.4.3-4ubuntu5)4.4.3

:~$ wget http://beej.us/guide/bgnet/examples/select.c
:~$ gcc select.c -o select

:~$ 回显“ff”| 。/选择
一个键被按下了!

:~$ ./选择
打字超时。

因此,选择程序显然将回显管道识别为输入;但它不会识别终端上的按键。为什么是这样?是否可以使用某种重定向(我猜,类似于屏幕如何将键盘输入“重定向”到串行 session )以便识别终端中的实际按键?

谢谢,干杯!

选择.c:


/*
** select.c -- select() 演示
*/



<前>#include
#include
#include
#include

#define STDIN 0//标准输入的文件描述符

int 主函数(无效)
{
结构 timeval 电视;
fd_set readfds;

电视.tv_sec = 2;
电视.tv_usec = 500000;

FD_ZERO(&readfds);
FD_SET(STDIN, &readfds);

//不关心 writefds 和 exceptfds:
选择(STDIN+1, &readfds, NULL, NULL, &tv);

if (FD_ISSET(STDIN, &readfds))
printf("按下了一个键!\n");
别的
printf("超时。\n");

返回0;
}



编辑:参见答案;因此我们需要的只是按 Enter 键:



<前>:~$ ./select

一个键被按下了!

或者我们可以使用 stty raw 关闭缓冲输入(并使用 stty Cooked 将其重新打开):



:~ stty raw
:~ ./选择
dA 键被按下!
:~ 熟了

最佳答案

标准输入是缓冲流。 select() 调用将无法检测到有可用的输入,直到在输入末尾命中换行符。您不能像这样使用 select() 来读取各个击键。

关于c - Linux C 选择 : piping echo to input works, 但从键盘读取却没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2780051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com