我认为sys_open
是规范的系统调用,
即带有sys_
前缀的那些。
但strace
应该记录所有系统调用,输出open
作为系统调用(非前缀版本),我感到困惑......
哪一个是系统调用?
答案 0 :(得分:2)
引用Brian W. Kernighan和Rob Pike,来自“UNIX编程环境”,第44页:
程序通过名为
read
的系统调用(内核中的子例程)检索文件中的数据。
系统调用称为read
,为了简化程序员,C标准库中的相应功能具有相同的名称。
另一方面,名称sys_read
只对少数人有用,即那些破解内核的人。它的名称只是操作系统的实现细节。
答案 1 :(得分:1)
我假设你在谈论C或C ++。任何相关语言标准都不要求sys_open()
和open()
为“系统调用”。但是,在大多数(所有?)* NIXes(包括Linux,Mac OS X,BSD等)上open()
是一个系统调用。
据我所知,sys_open()
是Linux独有的,并且是作为open()
之上的图层实现的。