2012-09-13 37 views
2

我正在嘗試使用pread和pwrite,以便我可以查看文件的開頭,並開始讀取或寫入一個原子操作。這兩個函數都會爲我做到這一點,但是,我遇到的問題是編譯器給我warning: implicit declaration of function ‘pread’,即使在我添加#define _XOPEN_SOURCE 500#include<unistd.h>之後,就像手冊頁所述。我錯過了什麼嗎?下面是兩個帶有函數調用的語句。 謝謝!pread和pwrite未定義?

#include<unistd.h> 



#define _XOPEN_SOURCE 500 
    int main (int argc, char *argv[]) 
    { 



while ((read_in += pread(source_fd, in_buf, in_buf_size,read_in)) ) 
    { 

if (write_out += pwrite(dest_fd, in_buf, read_in, write_out) == -1) 
     { 
+0

你能顯示整個代碼嗎? – Mysticial

+0

@Mysticial當然,我添加了所有的代碼作爲編輯。我認爲這可能是太多的代碼。 – tpar44

回答

3

您需要定義包括_XOPEN_SOURCE 500

#define _XOPEN_SOURCE 500 

#include<unistd.h> 

否則,unistd.h頭將看不到宏定義。

+0

謝謝!也許對我來說知道_XOPEN_SOURCE 500是什麼是有用的,這樣我會更好地理解它,你會不會知道這是什麼? – tpar44

+1

@ tpar44 *如果定義(使用任何值),則暴露POSIX.1,POSIX.2和X/Open(XPG4)定義。如果將值**定義爲**或更高值**,則還應公開SUSv2(UNIX 98和XPG5)擴展名。* – cnicutar