Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C+中使用终端输入中断循环/进程+;在Linux应用程序上_C++_C_Linux - Fatal编程技术网

C++ 如何在C+中使用终端输入中断循环/进程+;在Linux应用程序上

C++ 如何在C+中使用终端输入中断循环/进程+;在Linux应用程序上,c++,c,linux,C++,C,Linux,我正在编写一个Linux命令行应用程序,最终从一块硬件获取数据。数据采集的本质是,它将以一定的数据速率一致地向程序提供数据。一旦用户进入RxData(接收循环),我们就不想停止,除非我们从终端得到命令,告诉它停止。我预见到的问题是,使用getchar()会在while循环的每次迭代中挂起循环,因为程序希望用户输入。我的这种行为错了吗 另一方面,我知道在使用嵌入式设备时,您可以简单地检查寄存器以查看缓冲区是否增加,并使用它来确定是否从缓冲区读取。我在Linux应用程序上没有这种奢侈(或者我有吗?)

我正在编写一个Linux命令行应用程序,最终从一块硬件获取数据。数据采集的本质是,它将以一定的数据速率一致地向程序提供数据。一旦用户进入RxData(接收循环),我们就不想停止,除非我们从终端得到命令,告诉它停止。我预见到的问题是,使用getchar()会在while循环的每次迭代中挂起循环,因为程序希望用户输入。我的这种行为错了吗

另一方面,我知道在使用嵌入式设备时,您可以简单地检查寄存器以查看缓冲区是否增加,并使用它来确定是否从缓冲区读取。我在Linux应用程序上没有这种奢侈(或者我有吗?)。我是否可以运行一些这样的函数(我们称之为getCharAvailable),检查是否输入了数据,然后向我的程序发出停止获取数据的信号


我不能简单地使用SIGINT,因为我需要向硬件发送信号来停止数据采集,并向记录的数据添加一个标题。需要有停止采集的信号。

使用
ncurse
库,在
非延迟模式下使用
getch
,在Linux(或任何其他Unix风格)中,您可以使用
选择
查看2个(或更多)文件描述符、套接字或任何其他可以读取的内容上是否有可用数据。(这就是此系统调用存在的原因…

谢谢。我不知道这个图书馆存在。这看起来应该行得通。我会给它一个镜头,并报告回来。我建议为信号实现一个回调函数处理程序,该处理程序(当接收到sigint信号时)执行所有需要的清理,停止硬件,然后退出程序。这是最直接的解决方案。非常感谢。