2017-06-03 94 views
1

我很難理解爲什麼lseek函數是有用的。 假設我這樣從用戶給我一個參數:當pread接受偏移值時,爲什麼我們需要lseek?

off_t offset = 10; 

而我想從偏移100個字節讀取。 我可以使用pread這樣的:

void * buf = malloc(100); 
if (buf == NULL) { exit(1);} 
int res = pread(file_id, buf, 100, offset); 

在另一方面,我知道我可以設置文件與lseek這樣的:

off_t seek = lseek(file_id, offset, SEEK_SET); 

所以我相信我實現使用pread已經閱讀。我錯過了關於lseek的一些信息,它可以幫助我讀取文件?

+3

lseek和pread都不是標準C++的一部分。或者標準C,就此而言。 –

+0

我的不好,你會怎麼說? C? Linux呢? – Eyzuky

+0

它看起來更像是C++而不是C++。我已經添加了一個POSIX標籤。 –

回答

1

函數可能必須從一個給定的文件句柄讀取/寫入一個不知道它的位置(比如說當前位置),所以你需要解耦讀取(或寫入),因爲調用者可能會有需要設定位置。更多一般來說,很多I/O只是連續的,所以尋求沒有必要,而pread力量尋求。