当前位置: 技术问答>linux和unix
系统调用和库函数
来源: 互联网 发布时间:2016-08-11
本文导语: UNIX环境高级编程里写到: The technique used on UNIX systems is for each system call to have a function of the same name in the standard C library. 1.我们平时程序里用的read(),write()等也是库函数咯?由这些库函数再去调用系...
UNIX环境高级编程里写到:
The technique used on UNIX systems is for each system call to have a function of the same name in the standard C library.
1.我们平时程序里用的read(),write()等也是库函数咯?由这些库函数再去调用系统函数?只是两个函数同名而已。
2.fread()等C标准库函数最终也是调用read(),这里的read()是指系统函数那个吧?
是这么理解么?
谢谢
The technique used on UNIX systems is for each system call to have a function of the same name in the standard C library.
1.我们平时程序里用的read(),write()等也是库函数咯?由这些库函数再去调用系统函数?只是两个函数同名而已。
2.fread()等C标准库函数最终也是调用read(),这里的read()是指系统函数那个吧?
是这么理解么?
谢谢
|
基本正确,
在库函数里,使用的是中断,进入内核调用相应的功能
在内核中,read对应的入口是sys_read()。
当然,在用户程序中的所有函数调用,要么是你自己写的,要么是库函数,要想直接调用系统的,估计要用汇编写。
|
很多库函数是用系统调用实现的。关注int 0x80也许能得到你要的答案。
|
暂时不用区分得这么清楚,有个概念就行了。
看完操作系统后就明白了。
有些函数并可能是库函数,也可能是系统调用。
比如socket在源于BSD的系统(比如FreeBSD)上是系统调用。
但是socket在源于SYSV的系统(比如AIX)上是库函数。
看完操作系统后就明白了。
有些函数并可能是库函数,也可能是系统调用。
比如socket在源于BSD的系统(比如FreeBSD)上是系统调用。
但是socket在源于SYSV的系统(比如AIX)上是库函数。
|
库函数是提供特定功能函数,比如memcpy,mmap等
而系统调用是提供用户态程序操作内核态资源的一套机制。库函数的实现既可能是通过系统调用也可能是不是用系统调用(如果不需要操作内核资源的话)。
比如memcpy不需要使用系统调用而mmap需要。
而系统调用是提供用户态程序操作内核态资源的一套机制。库函数的实现既可能是通过系统调用也可能是不是用系统调用(如果不需要操作内核资源的话)。
比如memcpy不需要使用系统调用而mmap需要。