Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 冲浪宝典 > 网络资源 > 05.11.29新进知识
【标  题】:05.11.29新进知识
【关键字】:05.11.29
【来  源】:http://blog.chinaunix.net/article.php?articleId=59375&blogId=11897

05.11.29新进知识

Your Ad Here 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函数:

     有函数
     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是否有符号我印象中是编译器相关的,但是实际上大多数编译器都是带符号的。

  有无符号的区别是很大的, 比如这样的比较
  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;

 


    

 

 

  

计算机专业术语中英对照:【上一篇】
怎样在windows下加大mysql的连接数?:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • Unix 操作系统常见故障恢复技巧
  • sqlplus下得到执行计划和统计信息的两种方法
  • 中序转化为后序
  • C++ Coding Standards Item 4: Invest in code reviews
  • 自动变更交换机密码小程序
  • shell问答10:在SED中使用变量
  • 找到杂乱的图片,把它们放在一起
  • DecisionExpressionTest(Jbpm)
  • 网络层访问权限控制技术 ACL详解(五、完) 单向访问控制
  • 震荡波与冲击波病毒技术对比
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.