【问题标题】:Where can I see the source code of system API like write/read of linux?我在哪里可以看到系统 API 的源代码,比如 linux 的 write/read?
【发布时间】:2013-05-20 20:04:08
【问题描述】:

我已经从here 下载了系统源代码,但是我在包中找不到读/写函数的源代码。谁能告诉我在哪里可以获得这些套接字操作函数的代码?

[为什么要查看源代码]
我正在开发一个多线程的 linux 应用程序,我需要知道,调用诸如 write/read/sendmsg 之类的套接字操作函数以同时从不同线程访问同一个 TCP 套接字是否安全。

【问题讨论】:

  • @deufeufeu 我在写自己的帖子之前也读过这篇文章,但我对它提供的答案不满意,所以我决定自己检查源代码:_)

标签: linux sockets ubuntu tcp


【解决方案1】:

您可以在LXR 的内核源代码中搜索函数和其他内容。

但是在你搜索之前,你应该知道 write/read/sendmsg 是系统调用,它们的定义不像通常的函数。 当你使用read()时,sys_read()实际上是有效的,它本身的定义也很混乱:here

这里是write()sendmsg()

如果您想了解更多关于系统调用的信息,例如它们的定义,您可以阅读 Linux Kernel Development 的第 5 章。

【讨论】:

  • LXR 很有用!~ 3QU~
【解决方案2】:

1) 找出你想看的库提供的功能

例如“人读”

NAME
   read - read from a file descriptor

SYNOPSIS
   #include <unistd.h>

   ssize_t read(int fd, void *buf, size_t count);

2) 定位头文件,例如"/usr/include/unistd.h"

3) 找出提供此文件的软件包,例如 Debian/Ubuntu。

pwadas@kehillah:~$ dpkg -S /usr/include/unistd.h 
libc6-dev: /usr/include/unistd.h

4) 下载源码包并浏览代码

可能有许多“读取”函数可从各种库中获得。你可能想试试

man 7 socket
man 7 tcp 

或其他相关来源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-25
    • 2016-04-04
    • 2010-09-20
    • 2012-04-26
    • 2018-06-21
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    相关资源
    最近更新 更多