Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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
Linux 如何使用CRT单元处理程序中的SIGINT?_Linux_Freepascal_Lazarus - Fatal编程技术网

Linux 如何使用CRT单元处理程序中的SIGINT?

Linux 如何使用CRT单元处理程序中的SIGINT?,linux,freepascal,lazarus,Linux,Freepascal,Lazarus,我有一个控制台应用程序(程序),它使用CRT单元。在Linux下,当我按CTRL+C时,什么也没有发生。但是,我希望按照预期处理这个SIGINT信号(立即退出程序)。我发现使用CRT会重新定义STDIN和STDOUT内容,这样普通的SIG处理程序就不能工作了。目前,我尝试了fpSignal(SIGINT,SignalHandler(@DoSig)),但仍按CTRL+C键不起任何作用。当我手动(通过htop)向流程发送SIGINT时,处理程序将启动。但不能使用CTRL+C。 不幸的是,不使用CRT

我有一个控制台应用程序(
程序
),它使用CRT单元。在Linux下,当我按CTRL+C时,什么也没有发生。但是,我希望按照预期处理这个
SIGINT
信号(立即退出程序)。我发现使用
CRT
会重新定义STDIN和STDOUT内容,这样普通的SIG处理程序就不能工作了。目前,我尝试了
fpSignal(SIGINT,SignalHandler(@DoSig))
,但仍按CTRL+C键不起任何作用。当我手动(通过htop)向流程发送SIGINT时,处理程序将启动。但不能使用CTRL+C。 不幸的是,不使用
CRT
装置不是一个选项


非常感谢您的帮助:)

原因是CRT单元将重定向标准输入/输出句柄,因此您必须“手动”检查SIGINT,信号处理器将无法工作。
您应该使用KeyPressed功能检查按键是否按下,然后使用ReadKey检查是否发送了SIGINT(例如Ctrl-C)

CRT装置叫什么?你是说屏幕吗?X11下的一些终端模拟器?现在大多数电脑都有LCD屏幕…你应该显示你的源代码以获得帮助。你读过吗?我说的“CRT装置”是指freepascal装置CRT: