Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.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
Programming languages Linux中的信号_Programming Languages_Linux_Signals - Fatal编程技术网

Programming languages Linux中的信号

Programming languages Linux中的信号,programming-languages,linux,signals,Programming Languages,Linux,Signals,我正在研究奥雷利书中的信号。我遇到了这个 #include <signal.h> typedef void (*sighandler_t)(int);----> func ptr returns void. uses typedef sighandler_t signal (int signo, sighandler_t handler); typedef可以应用于函数吗 我想知道它是怎么工作的 typedef可以应用于函数吗 是的 我想知道它是怎么工作的 正如你读过的例子

我正在研究奥雷利书中的信号。我遇到了这个

#include <signal.h>
typedef void (*sighandler_t)(int);----> func ptr returns void. uses typedef 
sighandler_t signal (int signo, sighandler_t handler);
typedef可以应用于函数吗

我想知道它是怎么工作的

typedef可以应用于函数吗

是的

我想知道它是怎么工作的

正如你读过的例子——在使用C语言25年后,语法是相当模糊的,我仍然需要考虑它,但它是非常直接的。如果使用typedefs,传递和存储指向函数的指针将大大简化


我建议您绕道学习函数指针和函数的typedef,或者暂时将其视为已读,稍后再返回函数指针,因为您不可能是一名C程序员,也不可能回避它们

一个信号就像一个中断,当它由用户级生成时,会调用操作系统的内核,并相应地执行操作。为了创建一个信号,这里我只给你举一个例子

#include<stdio.h>
#include<signal.h>
#include<sys/types.h>   
void sig_handler1(int num)
{
   printf("You are here becoz of signal:%d\n",num);  
   signal(SIGQUIT,SIG_DFL);
}
void sig_handler(int num)
{
   printf("\nHi! You are here becz of signal:%d\n",num);
} 
int main()  
{ 
    signal(SIGINT,sig_handler1);
    signal(SIGQUIT,sig_handler);
    while(1)
   {
       printf("Hello\n");
       sleep(2);
   }

 }
运行此代码后,如果按Ctrl+C,则会显示一条消息-您在这里是因为信号:2,而不是因为我们已根据操作更改了信号而退出进程。例如,Ctrl+C是一个可屏蔽信号

要了解更多关于信号和信号类型的示例,请访问以下链接:


你好,马茨。谢谢你的建议。我知道指针、函数指针和typedef。我没有在函数上应用typedef。后来,当我在函数上应用typedef时,函数ptrs起作用。如果您知道这些信号API,请解释我并让我清楚
#include<stdio.h>
#include<signal.h>
#include<sys/types.h>   
void sig_handler1(int num)
{
   printf("You are here becoz of signal:%d\n",num);  
   signal(SIGQUIT,SIG_DFL);
}
void sig_handler(int num)
{
   printf("\nHi! You are here becz of signal:%d\n",num);
} 
int main()  
{ 
    signal(SIGINT,sig_handler1);
    signal(SIGQUIT,sig_handler);
    while(1)
   {
       printf("Hello\n");
       sleep(2);
   }

 }