例如(大多数功能都是这样设置的)socket / bind.c的源代码是:
19 #include <errno.h> 20 #include <sys/socket.h> 21 22 /* Give the socket FD the local address ADDR (which is LEN bytes long). */ 23 int 24 __bind (fd,addr,len) 25 int fd; 26 __CONST_SOCKADDR_ARG addr; 27 socklen_t len; 28 { 29 __set_errno (ENOSYS); 30 return -1; 31 } 32 33 weak_alias (__bind,bind) 34 35 stub_warning (bind) 36 #include <stub-tag.h>
我承认我没有花很多时间,但是实际功能的代码究竟在哪里呢?这是一个很好的范例吗?
解决方法 __bind函数是一个 stub:它是一个外部看起来像真实的东西(相同的原型)但不执行必要功能的函数.weak_alias
宏告诉链接器绑定是__bind的弱别名.也就是说,bind的定义是weak symbol.如果没有其他定义的一个名为bind的符号,这个定义就是如果有另一个(非弱)的绑定定义,那么那个非弱定义就会被定义,而弱定义被忽略.弱的别名是一个弱符号,是另一个符号的别名(而不是自己定义).如果使用弱别名,则stub_warning
宏会导致链接器发出警告.
绑定的真正实现取决于Glibc的编译 *** 作系统.在Hurd,它定义在sysdeps/mach/hurd/bind.c
.在linux上,bind是一个系统调用:在Glibc源中没有C代码,只有汇编代码. bind在sysdeps/unix/sysv/linux/bind.S
中提供,它重用了sysdeps / unix / sysv / linux / ** / socket.S或ports / sysdeps / unix / sysv / linux / * / socket.S中的体系结构相关定义.这些定义都是底层系统调用周围的薄包装,注意将参数和返回值复制到正确的寄存器中.
以上是内存溢出为你收集整理的当我遇到套接字代码时,我正在使用glibc,有人可以解释发生了什么吗?全部内容,希望文章能够帮你解决当我遇到套接字代码时,我正在使用glibc,有人可以解释发生了什么吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)