
檔案與目錄的管理
|
301
fd = open (argv[1], O_RDONLY | O_NONBLOCK);
if (fd < 0) {
perror ("open");
return 1;
}
/* 送出彈出命令給 CD-ROM 裝置。 */
ret = ioctl (fd, CDROMEJECT, 0);
if (ret) {
perror ("ioctl");
return 1;
}
ret = close (fd);
if (ret) {
perror ("close");
return 1;
}
return 0;
}
「
CDROMEJECT
要求」係 Linux 之 CD-ROM 裝置驅動程式所提供的一個功能。當核心收
到一個
ioctl()
要求時,它會找到負責處理所提供之檔案描述器的檔案系統(就正規檔
案而言)或裝置驅動程式(就裝置節點而言),然後把要求傳遞給它們處理。就此例而
言, CD-ROM 裝置驅動程式會收到要求並且彈出光碟機。
本章稍後我們將看到一個
ioctl()
的例子,這個例子會使用一個選項參數傳回資訊給發
出要求的行程。
監視檔案事件
Linux 提供了一個介面,
inotify
,可用於監視檔案—例如,監視檔案何時被移動、讀取、
寫入或刪除。假設你正在撰寫一個圖形化檔案管理程式,例如 GNOME 的檔案管理程
式。當檔案管理程式正在顯示一個目錄的內容時,如果有一個檔案被複製到該目錄,則
檔案管理程式所看到的目錄與實際的目錄會出現不一致的現象。
一個解決方案就是不斷重讀目錄的內容、偵測變動以及更新所顯示的內容 ...