我认为sys_open是规范的系统调用,
也就是说,那些以 . 为前缀的sys_。
但strace它应该记录所有系统调用,输出open为系统调用(非前缀版本),我很困惑......
哪个是系统调用?
我认为sys_open是规范的系统调用,
也就是说,那些以 . 为前缀的sys_。
但strace它应该记录所有系统调用,输出open为系统调用(非前缀版本),我很困惑......
哪个是系统调用?
引用 Brian W. Kernighan 和 Rob Pike 的话,来自“The UNIX Programming Environment”,第 44 页:
程序通过系统调用(内核中的子程序)检索文件中的数据
read。
系统调用被称为read,为了让程序员更简单,C 标准库中的相应函数具有相同的名称。
sys_read另一方面,这个名字只对少数人感兴趣,即那些破解内核的人。它的名字只是被认为是操作系统的一个实现细节。
我假设你在这里谈论 C 或 C++。任何相关的语言标准都sys_open()没有open()强制要求它是“系统调用”。然而,在大多数(全部?)*NIXes(包括 Linux、Mac OS X、BSD 等)open()上都是系统调用。
据我所知,sys_open()它是 Linux 独有的,并作为open().