C库函数和系统调用的区别
主要根据Linux系统来阐述1.系统调用和库函数本身没有什么关系,也不能说哪一个更底层,因为C语言库函数不一定调用系统调用;系统调用也不一定调用C语言库函数2.下面这张图给出的是用户自定义的函数和系统调用的关系,以及用户自定义的函数和C语言库函数的关系(注意,系统调用和C语言库函数本身没有关系)(1)你要写一个自己的函数,可以去调用库函数,最简单的例子#include<stdio.h>
·
主要根据Linux系统来阐述
1.系统调用和库函数本身没有什么关系。但一般认为系统调用更底层,因为有的库函数可以调用系统调用。
2.下面这张图给出的是用户自定义的函数和系统调用的关系,以及用户自定义的函数和C语言库函数的关系(注意,系统调用和C语言库函数本身没有关系)
(1)你要写一个自己的函数print实现标准输出功能,可以去调用库函数printf,这是最简单的例子
#include<stdio.h>
void print(){
printf("Hello Wolrd!\n"); //printf是一个库函数
}
这个函数只调用了库函数没有调用系统调用。
(2)你要写一个函数createDir实现在文件夹下新建目录,如果使用系统调用比库函数更方便的话,可以去调用系统调用,给出一个例子
#include<>
void createDir(){
int value=mkdir(目录名,目录mode) //mkdir是一个系统调用
}
在Linux系统下,自己写新建目录的函数,直接调用mkdir这个系统调用是最方便的,反而没有这个功能的C库函数可以用
(3)对于某些性质程序员,可能对系统调用更熟悉,哪怕某个功能可以用C库函数实现,他也会直接调用系统调用。
比如(1)中的标准输出函数,可以直接调系统调用实现
void print(){
char buf[20]="Hello world!";
write(1,buf,sizeof(buf)); //write是一个系统调用
}
(4)不是所有的C库函数都调用系统调用,比如strcpy()函数、atoi()函数,根本没有必要调用系统调用
总的来说,无论是调用C语言库函数还是调用系统调用,都是程序员实现自定义函数功能的一种手段,通常哪个方便用哪个
更多推荐
已为社区贡献1条内容
所有评论(0)