为什么 Linux Open 系统调用不需要路径的缓冲区大小参数?
Why does the Linux Open system call not need a buffer size parameter for the path?
为什么 open
系统调用不像 write
系统调用那样需要缓冲区大小参数?
这两个系统调用如何区别对待它们的字符串参数?
open
系统调用是否假定路径参数以零结尾的字符串,而 write
系统调用则不是?如果是这样,为什么不一致?
为什么不让所有(或 none)使用字符串/数组的系统调用都需要一个大小参数?
UNIX 是作为一个操作系统开发的,用于用汇编编写的程序,后来用于用 C 编写的程序。在 UNIX 团队使用的汇编约定中,后来在 C 中,字符串以 NUL 字节终止。因此,在与操作系统对话时使用相同的约定是很自然的。 Linus 在设计 Linux 时抄袭了 UNIX API,所以才会有相同的设计。使用 NUL 终止字符串不会丢失任何功能,因为 NUL 字节不允许出现在路径或其他标识符中。
write
调用将任意二进制数据写入文件。此数据不一定是文本,因此使用字符串约定没有多大意义。
为什么 open
系统调用不像 write
系统调用那样需要缓冲区大小参数?
这两个系统调用如何区别对待它们的字符串参数?
open
系统调用是否假定路径参数以零结尾的字符串,而 write
系统调用则不是?如果是这样,为什么不一致?
为什么不让所有(或 none)使用字符串/数组的系统调用都需要一个大小参数?
UNIX 是作为一个操作系统开发的,用于用汇编编写的程序,后来用于用 C 编写的程序。在 UNIX 团队使用的汇编约定中,后来在 C 中,字符串以 NUL 字节终止。因此,在与操作系统对话时使用相同的约定是很自然的。 Linus 在设计 Linux 时抄袭了 UNIX API,所以才会有相同的设计。使用 NUL 终止字符串不会丢失任何功能,因为 NUL 字节不允许出现在路径或其他标识符中。
write
调用将任意二进制数据写入文件。此数据不一定是文本,因此使用字符串约定没有多大意义。