2013-02-14 85 views
1

如果我這樣做的:關於系統程序:打開UNIX文件系統

fd2 = open ("file", O_RDONLY); 

然後

fd1 = open ("file", O_RDONLY); 
在同一進程

。 我得到兩個不同的文件指針嗎?我的意思是,我可以移動「光標」100個字節與fd2和 fd1的光標將保持爲零?

此外,即使我打開兩個READONLY ..文件系統是否在File表中創建兩個條目?或只有一個? (不是Inode表)

謝謝!

+3

爲什麼不簡單地測試它? – koopajah 2013-02-14 16:13:53

+1

@koopajah:因爲在一個系統上的行爲並不一定告訴你它是如何*一般行爲。當然,這是值得嘗試的,但是測試的結果並不是確定性的。 – 2013-02-14 16:54:30

回答

2

注意:最初版本有一個複製和粘貼錯誤影響結果。現在修復。

在一個嘗試,看看基礎上,我寫了

#include <stdio.h> 
#include <fcntl.h> 
#include <unistd.h> 

int main(int argc, char *argv[]){ 
    int fd1 = open("/etc/passwd",O_RDONLY); 
    int fd2 = open("/etc/passwd",O_RDONLY); 
    printf("%d %d\n",fd1,fd2); 
    printf("FD1 position = %d\n", lseek(fd1,0,SEEK_CUR)); 
    printf("FD2 position = %d\n", lseek(fd2,0,SEEK_END)); 
    printf("FD1 position = %d\n", lseek(fd1,0,SEEK_CUR)); 
} 

這在我的Mac OS 10.5箱和一些對科學的Linux機器在功能上相同,則返回

$ ./a.out 
3 4 
FD1 position = 0 
FD2 position = 2888 
FD1 position = 0 

(區別僅在大小爲/etc/passwd)。

你會注意到你回來的數字不同fd s,他們每個人都有自己的位置光標。