C语言中:fopen() fread() fwrite() fclose() fseek() ——库函数
Linux: open() read() write() close() lseek() stat() ——系统调用函数
1.库函数的系统调用函数的区别
系统调用函数是操作系统为内核代码提供给上层使用的函数接口,它的调用在用户态,可由应用程序调用,执行在内核态,由操作系统内核实现,有操作系统内核权限
库函数是语言自身带的库文件,其中是特定功能的实现,由编译器实现封装成的。在用户态调用,在用户态执行,但有些库函数需要转调系统调用函数。
库函数不能直接去操纵物理硬件,必须经过操作系统,所以有些库函数要转调系统调用函数才可以(库函数中只要需要底层支持的都绕不开操作系统,绕不过操作系统就要调用系统调用函数)
所以printf和scanf需要底层支持(一个从界面获取数据,一个将数据打印到界面),而strlen和strcpy则不需要
2.二者效率
(1)库函数有时效率高于系统调用函数,原因:
a.系统调用函数的需要从用户态切换到内核态,而库函数则不需要切换
b.用库函数申请内存时,可能会多分配一些内存,但使用系统调用函数申请时,不会多分配,你申请多少他只会给你分配多少,这在你还需要更大一些内存的情况下,库函数效率高一些
(2)系统调用函数有时效率高于库函数,原因:
有些库函数的调用还需转调系统调用函数
3.Linux文件操作函数
包含的头文件:
#include<sys/types.h><