1、typedef的两种用法:
a、typedef struct{
int a;
int b;
}MYTYPE;
MYTYPE tmp;
typedef unsigned long UL;
b、typedef int(*MYFUN)(int,int);
2、callback函数:
有函数
func1( int a, callback b , void *data);
func2是回调函数。
如下调用
int *data
int c()
{
func1(a,func2,data)
d();
}
fun1完成后, func2 并没有被调用, 等事件发生后才被调用。
上面的说明完全是实际程序的情况。
因为我没有fun1的源代码, 我想问的是此时c 函数所在的进程 和 fun2所在的进程是同一
进程么, 如果是,那么系统是如何实现的,fun2运行的时候,会打断正在运行的d()么。
如果不是,那么为什么 fun2还可以使用 全局变量 data.和c共享堆栈(请注意,fun1决没有生成子进程)。希望高手能帮助解答 谢谢
| 回调函数分同步回调和异步回调,具体情况又分几种,用户层回调和系统层回调,需要具体分析^_^ 根据你提供的信息我还分析不出来,抱歉!! 实现原理就是:某个进程调用你的fun2,这个进程可能是系统进程,也可能就是你应用程序的进程. 如果是系统进程的话,则由于系统层权利很大,可以访问所有资源,能访问你的全局变量等不奇怪. 如果是你自己的进程,则当然可以访问你自己的变量. 同步回调是跟你的fun1一起返回的,类比c++的sort函数 异步回调则是fun1返回后,fun2也可能被调用,类比系统的hook函数 3、char与unsigned char char的表数范围: unsigned char的表数范围:
char就是单字节数据 , 放数据值的。有效数据位是8位 3、socket编程基础: socket() SOCKET PASCAL FAR socket (int af int type,int protocol); af:AF_UNIX,AF_INET,AF_NS; type:SOCK_STREAM,SOCK_DGRAM,SOCK_RAW; protocol:通常置0; bind() int PASCAL FAR bind(SOCKET s,const struct sockaddr FAR*name,int namelen); 如果有错误发生返回0,否则返回SOCKET_ERROR; struct sockaddr_in{ short sin_family;AF_NET u_short sin_port;16位端口号,网络字节顺序 struct in_addr sin_addr;32位ip地址,网络字节顺序 char sin_zero[8];保留 } connet() int PASCAL FAR connect(SOCKET s,const struct sockaddr FAR * name,int namelen) 成功返回0,否则返回SOCKET_ERROR; accept() SOCKET PASCAL FAR accept(SOCKET s, struct sockaddr FAR*addr,int FAR *addrlen) 成功返回SOCKET,否则返回IVALID_SOCKET; listen() int PASCAL FAR listen(SOCKET s,int backlog); 成功返回0,否则返回SOCKET_ERROR; |