当前位置: 技术问答>linux和unix
C语言应用程序使用的函数来源于libc库, Libc库中的函数是在哪里实现的??
来源: 互联网 发布时间:2016-11-27
本文导语: 如题 我想知道应用程序调用一个函数的具体过程 比如:应用程序中调用read()函数, 先到libc库里找?? 再到内核里面?? 然后再返回用户空间?? 这个过程我不太清楚,请高手解答!!!最好举个例子!! ...
如题
我想知道应用程序调用一个函数的具体过程
比如:应用程序中调用read()函数, 先到libc库里找?? 再到内核里面?? 然后再返回用户空间??
这个过程我不太清楚,请高手解答!!!最好举个例子!!
我想知道应用程序调用一个函数的具体过程
比如:应用程序中调用read()函数, 先到libc库里找?? 再到内核里面?? 然后再返回用户空间??
这个过程我不太清楚,请高手解答!!!最好举个例子!!
|
1、“普通函数”,如str*等等很多函数,在glibc中实现了,只要包含对应的头文件即可使用。
2、系统调用,典型的如read、write、open等等,如2楼所说。
网上有一些简单的字符设备驱动,大意是从用户空间写(write)一字符串到内核空间,再从内核空间读(read)到用户空间。两者的交互通过copy_*_user来实现。可以去搜索一下。
2、系统调用,典型的如read、write、open等等,如2楼所说。
网上有一些简单的字符设备驱动,大意是从用户空间写(write)一字符串到内核空间,再从内核空间读(read)到用户空间。两者的交互通过copy_*_user来实现。可以去搜索一下。
|
一个简单的例子用来理解(未必完全正确):printf
printf在libc中被实现,在其实现过程中,通过write系统调用向实际硬件设备传送待写字符。write系统调用触发软中断,从而陷入内核态,保存当前进程状态后,开始在内核中实现真正的物理操作,传送完成后读取进程描述符,进而恢复到当前进程,也就是返回了用户态,至此系统调用完成,printf继续执行下面的语句(如果还有的话),最终printf执行完成,返回到调用程序。
以上过程忽略了进程抢占及同步等实际问题。只是一个大致的过程介绍。
printf在libc中被实现,在其实现过程中,通过write系统调用向实际硬件设备传送待写字符。write系统调用触发软中断,从而陷入内核态,保存当前进程状态后,开始在内核中实现真正的物理操作,传送完成后读取进程描述符,进而恢复到当前进程,也就是返回了用户态,至此系统调用完成,printf继续执行下面的语句(如果还有的话),最终printf执行完成,返回到调用程序。
以上过程忽略了进程抢占及同步等实际问题。只是一个大致的过程介绍。