首先server.c中如下几行代码: signal(SIGPIPE, SIG_IGN); /* Ignore sigpipe */ sa.sa_handler = sigchld_handler;
/***********************************************************/ 当服务器close一个连接时,若client端接着发数据。 根据TCP协议的规定,会 收到一个RST响应,client再向这个服务器发送数据时系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。 signal(SIGPIPE,SIG_IGN);这时SIGPIPE交给了系统处理。
/****************************************************************/
sigaction()是POSIX的信号接口,而signal()是标准C的信号接口(如果程序必须在非 POSIX系统上运行,那么就应该使用这个接口) struct sigaction *oldact) { {
/*****************************************************************/ 在SPCAV4L.C文件中: jpegsize= convertframe(vd->ptframe[vd->frame_cour]+ sizeof(struct frame_t), 刚开始看的一头雾水,原来结构体frame_t是用来保存控制视频图像的相关信息,convertframe()函数将pFramebuffer中的数据转成完整的JPEG格式的数据保存到ptframe缓存中去,在frame_t指向的地址后面,紧接着的是转换成JPEG格式后的数据, 在SOCKET中,是先写入frame_t,再写入jpeg数据。 ret = write_sock(sock, (unsigned char *)headerframe, sizeof(struct frame_t)) ;
/*************************************************************/ 下面是百度找到的,关于字符指针转换成结构体指针的说法: 我这里有这样的结构体
struct roadmap_db_section {
char name[12];
int first;
int next;
int size;
int count;
};
然后有这样一条语句: char * c = &ss(其中ss为一个文件内容在内存中的首地址)
struct* s = (struct roadmap_db_section *) c;
我想问的是,这个字符型的指针,怎么就能强制转化为结构体类型的指针呢?转换
后这个结构体指针和字符指针之间是什么关系啊?
指针说白了就是地址,32位机中地址是用long表示的,所以指针是可以相互转换的, 只是转换后寻址方式不同了而已.
上面的roadmap_db_section的在内存中占28字节,转成char*就相当于一个 char c[28], 不管它怎么换也就是这28个字节的内容.再转结构体时,前面12个 字节放入name[12]中,后面的每四位作一个整数
|