为什么Linux Open系统调用不需要路径的缓冲区大小参数?

问题描述 投票:-1回答:1

为什么open系统调用不需要像write系统调用那样的缓冲区大小参数?

这两个系统调用如何区别对待它们的字符串参数?

open系统调用是否假定路径参数的以零结尾的字符串,而write系统调用没有?如果是这样,为什么不一致?

为什么不使用所有(或没有)使用字符串/数组的系统调用需要大小参数?

c linux assembly system-calls api-design
1个回答
2
投票

UNIX是作为用汇编编写的程序的操作系统开发的,后来用于用C编写的程序。在UNIX团队使用的汇编约定中,稍后在C中,字符串以NUL字节终止。因此,在与操作系统交谈时使用相同的约定是很自然的。 Linus在设计Linux时复制了UNIX API,因此它具有相同的设计原因。使用NUL终止字符串不会丢失任何功能,因为不允许NUL字节出现在路径或其他标识符中。

write调用将任意二进制数据写入文件。这个数据不一定是文本,因此使用字符串约定没有多大意义。

© www.soinside.com 2019 - 2024. All rights reserved.