/dev/fd
概念
/dev/fd/n 提供檔案系統路徑來存取已開啟的 file descriptor n
open("/dev/fd/3", mode) // 等同於 dup(3)為什麼需要 /dev/fd?
很多程式只接受檔案路徑,不接受 file descriptor
場景:無法修改的第三方程式
// 第三方函數庫,無法修改
void process_data(const char *filename) {
int fd = open(filename, O_RDONLY); // 只認路徑!
// ...
}
// 你想讓它處理已開啟的 fd 3
process_data("/dev/fd/3"); // 用 /dev/fd 解決場景:Shell 命令只接受檔案路徑
# diff 只能接受檔案路徑作為參數
diff <(ls -l /tmp) <(ls -l /var)
# Shell 展開後實際是:diff /dev/fd/63 /dev/fd/64dup() vs /dev/fd
| 特性 | dup() | /dev/fd |
|---|---|---|
| 用途 | 程式內部複製 fd | 傳給只認路徑的程式 |
| 能否跨程式 | 否 | 是(作為路徑參數) |
| 需修改程式碼 | 是 | 否 |
實作細節
open("/dev/fd/n", mode)內部等同於dup(n)