linux-文件接口函數的追蹤

用open,close,read,write,ioctl,fcntl函數多了,感覺有點模糊,因爲每次使用這些函數時都實現包含了頭文件fcntl.h,錯誤地以爲這些函數都在fcntl.h中申明,然而事實不是這樣的:

首先open函數和fcntl的確是老老實實呆在fcntl.h中:

extern int fcntl(int __fd,int __cmd,...) __THROW;

extern open(__const char *__file,int __oflag,...)__THOW;

其中第三個參數是可選參數,之所以這樣寫的原因是避免gcc在編譯時對第三個參數進行類型檢查。

read、write、close卻沒有被統一存放在fcntl.h中,而是存放在了unistd.h中,這是POSIX標準的一部分.

 在/usr/include裏面沒有ioctl.h,使用locate命令查找ioctl.h,除了在內核源代碼中找到外,發現ioctl函數就在/usr/include/sys/ioctl.h中被定義, 而struct flock結構的尋找費了點時間,在fcntl.h和unistd.h中都找不到這個函數的聲明,後來才發現在fcntl.h中有這樣的包含語句:

#include <bits/fcntl.h>

所以我打開了這個子fcntl.h文件,找到了struct flock結構。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章