易截截图软件、单文件、免安装、纯绿色、仅160KB

深入理解Linux kernel(内核)中的signal函数

在Linux内核代码中,有一个信号处理绑定器函数signal,它到原型定义如下,通过man 2 signal可以查看其原型。
#include <signal.h>
typedef void (*sighandler_t)(int);    (1)
sighandler_t signal(int signum,sighandler_t handler);    (2)
第一句是包含头文件,第二句是类型定义,第三句才是signal函数到真正声明。扩展声明后,真正到声明为
void (*signal(int signum,void (*sighandler)(int)))(int);    (3)
第(3)看起来比第(1)和(2)句更难理解,首先从(1)(2)下手。
(1)表示sighandler_t是自定义类型,它其实是一种函数指针类型,它指向到函数到形参为int,返回值为void。
(2)表示signal函数到形参有一个int型signum,以及一个sighandler_t型到形参handler,返回一个sighandler_t型到值,由(1)可以知道:sighandler_t是函数指针类型,所以signal到第二个形参是一个函数指针,并且signal函数返回一个函数指针。它们指向到函数类型都是具有一个int形参,返回为void到函数。
    迷惑:对于signal函数,对于初学者来说,不仅是语法上到迷惑,还有应用上到迷惑,下面结合我自己到理解,举例说明怎样理解signal函数。
代码think.c-----------------------------------------------------------------------------------
#include<stdio.h>
/*定义一个函数*/
void func(int a){
    printf("in func a=%d\n",a);
}
/*声明一个函数指针*/
void (*pfunc)(int);
/*定义我们自己到my_signal函数*/
void (*my_signal(int sig,void (*handler)(int h)))(int c){
    printf("in my_signal\n");
    /*想一下下面一句,对吗?*/
    return handler;
}
int main(){
    printf("before invoke 'void func(int)'\n");
    func(1);        /*(4)*/
    pfunc=func;
    printf("before invoke 'void func(int) by function pointer'\n");
    pfunc(2);        /*(5)*/
    printf("before invoke 'my_signal(int sig,void (*handler)(int h)))'\n");
&n


相关文档:

Linux设备模型之input子系统详解

一:前言
最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享!
(这篇博客主要是以键盘驱动为例的,不过讲解的是Linux Input Subsystem,可以仔细的研究一下!)
键盘驱动将检 ......

ldap 在Linux上建立LDAP服务器


在Linux上建立LDAP服务器
在Linux上建立LDAP服务器(一)
作者:Carla Schroder;顾恺翻译 发文时间:2003.12.30
你的网络在规模和复杂性方面正处于成长期。一路传播每件事物、发展壮大每件事物然后再丢弃每件事物将占用了它一生的时间。当你痛苦的双手抱头,试图弄清楚的时候,你的用户不知道从哪里发现了你的秘密电话号 ......

linux 下嵌入式开发调试

 
 
调试用户程序:
主机:linux os
          eclipse + cdt + gdb +gcc交叉编译链
目标机:armlinux os
           gdbServer
通讯方式:tcp
文件传输方式:ftp, minicom, 通过nfs.
配置参考 ......

Linux下的神奇指令——netcat


netcat
 就像 cat 
指令一樣,只是將簡單的 
cat 
功能完全「網路化」,好用與靈活的程度可說是很驚人,而在 
Top 100 Network Security Tools
 排行榜中還排行第四名呢!
netcat 除了 ......

linux内核升级步骤

1。下载2.6.9的内核
2。在/usr/src目录下解压内核
tar zvxf /下载的路径/linux-2.6.0.tar.gz
 
3。配置
# make mrproper
# make menuconfig
make mrproper 是清理代码树的动作,保证源代码是干净的
4.编译
make
5。安装
make modules_install
make install
 
看来2。6的编译确实比以 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号