易截截图软件、单文件、免安装、纯绿色、仅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 Bluetooth编程(三) HCI层编程

1. HCI层协议概述:
HCI提供一套统一的方法来访问Bluetooth底层。如图所示:
从图上可以看出,Host Controller Interface(HCI)  就是用来沟通Host和Module。Host通常就是PC, Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth Dongle。
在Host这一端:application,SDP,L2cap等协议 ......

实战Linux Bluetooth编程(六) L2CAP编程实例

例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
 如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......

实战Linux Bluetooth编程 (七) SDP协议

Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。
服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。 ......

ldap 在Linux上建立LDAP服务器


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

Linux下的神奇指令——netcat


netcat
 就像 cat 
指令一樣,只是將簡單的 
cat 
功能完全「網路化」,好用與靈活的程度可說是很驚人,而在 
Top 100 Network Security Tools
 排行榜中還排行第四名呢!
netcat 除了 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号