我尝试使用-nostdlib
编译一个调用write
的简单程序,但是出现了错误:
/path/to/file:3: undefined reference to `write'
我曾认为write
是Unix中一直存在的东西,但显然不是这样,事实证明libc有write
函数。我找到了源代码:
/* Write NBYTES of BUF to FD. Return the number written, or -1. */
ssize_t
__libc_write (int fd, const 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;
}
libc_hidden_def (__libc_write)
stub_warning (write)
weak_alias (__libc_write, __write)
libc_hidden_weak (__write)
weak_alias (__libc_write, write)
这似乎只是设置了 errno
。那么 __libc_write
是如何向文件描述符写入数据的呢?