Linux下開發-fcntl和ioctl的區別

啊浪的部落格發表於2017-11-05
fcntl函式可以改變一個已開啟的檔案的屬性,可以重新設定讀、寫、追加、非阻塞等標誌(這些標誌稱為File Status Flag),而不必重新open檔案

通過fcntl設定的都是當前程式如何訪問裝置或檔案的訪問控制屬性,例如讀、寫、追加、非阻塞、加鎖等,但並不設定檔案或裝置本身的屬性,例如檔案的讀寫許可權、串列埠波特率等。

int fcntl(int fd, int cmd);
int fcntl(int fd, int cmd, long arg);
int fcntl(int fd, int cmd, struct flock *lock);




ioctl函式用於設定某些裝置本身的屬性,例如串列埠波特率、終端視窗大小,注意區分這兩個函式的作用。

ioctl用於向裝置發控制和配置命令,有些命令也需要讀寫一些資料,但這些資料是不能用read/write讀寫的,稱為Out-of-band資料。也就是說,read/write讀寫的資料是in-band資料,是I/O操作的主體,而ioctl命令傳送的是控制資訊,其中的資料是輔助的資料。例如,在串列埠線上收發資料通過ead/write操作,而串列埠的波特率、校驗位、停止位通過ioctl設定,A/D轉換的結果通過read讀取,而A/D轉換精度和工作頻率通過ioctl設定。


int ioctl(int d, int request, ...);


相關文章