gpt4 book ai didi

c - C 中的信号处理

转载 作者:太空狗 更新时间:2023-10-29 16:26:28 25 4
gpt4 key购买 nike

我如何在 C 中实现 Ctrl-C 和 Ctrl-D 的信号处理....所以如果按下 Ctrl-C 那么程序将忽略并再次尝试从用户那里获取输入...如果 Ctrl -D 被按下然后程序将终止...

我的程序如下:

int main(){
char msg[400];

while(1){
printf("Enter: ");
fgets(msg,400,stdin);
printf("%s\n",msg);
}
}

谢谢,

戴夫

最佳答案

在处理 POSIX 信号时,您可以使用两种方法。首先,简单(但不鼓励)的方式,signal() .第二,更优雅,当前但复杂的方式,sigaction() .请使用 sigaction(),除非您发现它在您需要工作的某些平台上不可用。

This chapter glibc 手册的一部分解释了两者之间的差异,并提供了有关如何使用两者的良好示例代码。它还列出了可以处理的信号,建议它们应该如何处理,并更深入地讨论如何判断任何给定信号当前是(或不是) 处理。这比我想在此处粘贴到答案中的代码多得多,因此有链接。

花一两个小时阅读链接和完成示例真的很值得。信号处理(特别是在守护程序中)非常重要。一个好的程序应该处理所有可以处理的致命信号(即 SIGHUP)并明确忽略它可能不使用的信号(即 SIGUSR1/SIGUSR2)。

研究正常信号和实时信号之间的差异也无妨,至少可以了解内核如何合并先验信号而不合并后者。

完成后,您可能会倾向于编写一组易于修改的函数来处理您的信号,并一遍又一遍地重复使用该代码。

很抱歉没有给出一个快速而肮脏的代码片段来向您展示如何解决您的迫切需求,但这不是一个快速而肮脏的话题:)

关于c - C 中的信号处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2485028/

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