免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1213 | 回复: 0

05.11.29新进知识 [复制链接]

论坛徽章:
0
发表于 2005-11-30 08:36 |显示全部楼层
1、typedef的两种用法;2、callback函数;3、char与unsigned char;socket基础知识。
1、typedef的两种用法:
   a、typedef struct{
        int a;
        int b;
       }MYTYPE;
       MYTYPE  tmp;
       typedef unsigned long UL;
   b、typedef int(*MYFUN)(int,int);
2、callback函数:
     [color="#555555"]有函数
     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决没有生成子进程)。希望高手能帮助解答 谢谢
  [color="#333333"]  回调函数分同步回调和异步回调,具体情况又分几种,用户层回调和系统层回调,需要具体分析^_^
  根据你提供的信息我还分析不出来,抱歉!!
  实现原理就是:某个进程调用你的fun2,这个进程可能是系统进程,也可能就是你应用程序的进程.
  如果是系统进程的话,则由于系统层权利很大,可以访问所有资源,能访问你的全局变量等不奇怪.
  如果是你自己的进程,则当然可以访问你自己的变量.
  同步回调是跟你的fun1一起返回的,类比c++的sort函数
  异步回调则是fun1返回后,fun2也可能被调用,类比系统的hook函数
3、char与unsigned char
     char的表数范围:
     unsigned char的表数范围:
  有无符号啊,char是否有符号我印象中是编译器相关的,但是实际上大多数编译器都是带符号的。
  有无符号的区别是很大的, 比如这样的比较
  char a = getc(stdin);
  if(a == 255)
  {
  foo();
  }
  foo 将永远不会被调用。
  char就是单字节数据 , 放数据值的。有效数据位是8位
  无符号的有效数据位为7位,第一位为符号位
  char -127~128
  unsigned char 0~255
  楼上说的对,“ 如果不进行数字相关的操作,关系倒不大”。但如果用于计算则应当小心符号的问题。
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;


[color="#555555"]     


   


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/11897/showart_59375.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP