2013-05-21 23 views
1

試圖瞭解爲什麼socket.c中有ioctl調用?我可以看到我正在使用的已修改的內核,它具有一些在進行調用時加載所需模塊的ioctl調用。爲什麼在socket.c中有ioctl調用?

我想知道爲什麼這些調用在socket.c中結束?不是插座類型的非設備,ioctls主要用於設備。

這裏介紹2.6.32.0重度修改的內核。

回答

2

ioctl患有其歷史名稱。雖然最初是爲了在設備上執行I/O控件而開發的,但它具有足夠通用的結構,可用於在文件描述符的上下文中對內核執行任意服務請求。文件描述符是內核提供的可以與任何東西關聯的不透明值(只是一個int)。

現在,如果您將文件描述符視爲大多數* nix結構所做的文件,則打開/讀取/寫入/關閉是不夠的。如果你想標記一個文件(重命名)怎麼辦?如果你想等待文件變得可用(ioctl)怎麼辦?如果您想在文件關閉時終止所有內容(termios),該怎麼辦?所有在覈心讀/寫上下文中沒有意義的「元」操作都集中在ioctl下; fctls;等等,除非它們經常被使用以至於它們應該得到它們自己的系統調用(例如BSD4.2中的flock(2)功能)

+0

是這個信息有幫助。感謝你的回答。 –

相關問題