一直对section 2 和 section 3两个段的API分得不是很开.
section 2和3的说明:
2 System calls (functions provided by the kernel)
3 Library calls (functions within program libraries)
当然, 本人是分得到system calls和library calls的.
只是这两者的API有部分是一样的.
可以man 2 setgid和man 3 setgid. 可以发现, 差不多是一个屁样了.
3的存在, 是因为glibc需要有posix标准的一套API. 如glibc的setgid函数其实就是调用了system call的setgid API.
往往对section 2和3的API出现混淆. 举个例子吧:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main()
{
int fd = open("/tmp", O_DIRECTORY|O_RDONLY);
if(fd >=0)
printf("sucess\n");
else
printf("no sucess\n");
}
编译时使用: gcc /tmp/c2.c -D _GNU_SOURCE -o /tmp/a.out
这时的open是使用system call的open, 可以打开一个文件夹的, 手册是man 2 open里说的内容.
如果不用_GNU_SOURCE这个宏的话, 就是man 3 open里说的内容
对特同名这种函数, 使用了宏去控制
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.