免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3901 | 回复: 2
打印 上一主题 下一主题

[函数] 系统函数或者语言实现的源码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-04 17:20 |显示全部楼层 |倒序浏览
看CORBA讲到一个尖锐的问题,就是从I/O读入输入的字符(长度没有限制),然后返回给调用他的程序。里面列举了3种方法的对比。
其中一种讲到了UNIX 的系统read函数。
我一直想看看这些read,printf之类怎么实现的,当然windows下面反汇编可以看到汇编代码。但是我不知道比如read到底是怎么实现的?

后来我查到Linux内核中循环缓冲区(http://www.kerneltravel.net/jiaoliu/kern-kfifo.html),明白了点内核是怎么处理缓冲区的,但是缓冲区的大小还是不清楚怎么查到?
  1. unsigned int __kfifo_put(struct kfifo *fifo, unsigned char *buffer, unsigned int len)
  2. {
  3.      unsigned int l;
  4.      len = min(len, fifo->size - fifo->in + fifo->out);
  5. ...
  6.     smp_mb();

  7. /* first put the data starting from fifo->in to buffer end */
  8.     l = min(len, fifo->size - (fifo->in & (fifo->size - 1)));
  9.    memcpy(fifo->buffer + (fifo->in & (fifo->size - 1)), buffer, l);

  10. /* then put the rest (if any) at the beginning of the buffer */
  11.    memcpy(fifo->buffer, buffer + l, len - l);
  12. ...
  13. smp_wmb();

  14.    fifo->in += len;
  15.    return len;
  16. }
复制代码
还有比如我看到STL里面vector的find函数,在手册里面没有查到,就像去看他是怎么实现的,可是不知道怎么查找源码?

还有关于C语言或者C++语言的实现问题,我一直在想,但是想不明白:
c/c++语言的实现可否说是编译器实现的一部分,包括头文件里面函数的实现,和语法检查。

烦请高手们解答,谢谢。

论坛徽章:
0
2 [报告]
发表于 2010-04-04 22:29 |显示全部楼层
本帖最后由 LaoLiulaoliu 于 2010-04-05 01:55 编辑

谢谢楼上,讲的我茅塞顿开,算是有一个理解上面的突破。
太感谢了!

问题继续中……

论坛徽章:
0
3 [报告]
发表于 2010-04-05 02:14 |显示全部楼层
我打开glibc,找到io/read.c 发现没有汇编,但是是很奇怪的C代码:
  1. #include <errno.h>
  2. #include <unistd.h>
  3. #include <stddef.h>

  4. /* Read NBYTES into BUF from FD.  Return the number read or -1.  */
  5. ssize_t
  6. __libc_read (int fd, void *buf, size_t nbytes)
  7. {
  8.   if (nbytes == 0)
  9.     return 0;
  10.   if (fd < 0)
  11.     {
  12.       __set_errno (EBADF);
  13.       return -1;
  14.     }
  15.   if (buf == NULL)
  16.     {
  17.       __set_errno (EINVAL);
  18.       return -1;
  19.     }

  20.   __set_errno (ENOSYS);
  21.   return -1;
  22. }
  23. libc_hidden_def (__libc_read)
  24. stub_warning (read)

  25. weak_alias (__libc_read, __read)
  26. libc_hidden_weak (__read)
  27. weak_alias (__libc_read, read)
  28. #include <stub-tag.h>
复制代码
比如libc_hidden_def(),stub_warning(),libc_hidden_weak(),weak_alias()有没有类似函数的介绍和用法。
我用sourceinsight看,发现有许多的定义,跳转到定义处,发现有更多的未知函数。求教如何来读这个read.c
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP