相关疑难解决方法(0)

我在查看 <unistd.h> 中定义的 read() 函数代码时遇到问题

我现在试图通过研究实际的代码实现来了解 read(2) 函数的工作原理,首先,我尝试了解它是如何在 #include 头文件中定义的。

在该文件中,我发现了这个:

ssize_t  read(int, void *, size_t) __DARWIN_ALIAS_C(read);
Run Code Online (Sandbox Code Playgroud)

然后,我用谷歌搜索找到了实际的 read() 函数声明。

和,

https://github.com/lattera/glibc/blob/master/io/read.c

我找到了这个。在这段代码中,

/* Read NBYTES into BUF from FD.  Return the number read or -1.  */
ssize_t
__libc_read (int fd, void *buf, size_t nbytes)
{
  if (nbytes == 0)
    return 0;
  if (fd < 0)
    {
      __set_errno (EBADF);
      return -1;
    }
  if (buf == NULL)
    {
      __set_errno (EINVAL);
      return -1;
    }

  __set_errno (ENOSYS);
  return -1;
}
Run Code Online (Sandbox Code Playgroud)

现在这是我的问题。

  1. __libc_之前是什么read?为什么需要它?当用户调用read(2)时,如何调用这个函数?

  2. 在我看来,这段代码与从文件描述符读取缓冲区无关,而是只有处理可能的错误的代码: fd < …

c unix posix system-calls unistd.h

4
推荐指数
1
解决办法
1616
查看次数

标签 统计

c ×1

posix ×1

system-calls ×1

unistd.h ×1

unix ×1