哪个是syscall,sys_open还是open?

时间:2011-04-04 03:26:03

标签: system-calls strace

我认为sys_open是规范的系统调用,

即带有sys_前缀的那些。

strace应该记录所有系统调用,输出open作为系统调用(非前缀版本),我感到困惑......

哪一个是系统调用?

2 个答案:

答案 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()之上的图层实现的。