2012-09-13 2 views
2

나는 pread와 pwrite를 사용하여 파일의 시작 부분을 lseek 할 수 있고 하나의 원자 적 연산으로 읽기 또는 쓰기를 시작할 수있다. 이 두 가지 기능은 모두 나를 위해 그런 일을 할 것입니다. 그러나 문제는 필자가 과 #include<unistd.h>을 추가 한 후에도 컴파일러가 내게 warning: implicit declaration of function ‘pread’을 주었다는 것입니다. 내가 놓친 게 있니? 함수 호출을 사용하는 두 문장은 아래와 같습니다. 감사합니다.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) 정의를 노출합니다. 값이 500 이상 ** 인 **을 정의하면 SUSv2 (UNIX 98 및 XPG5) 확장도 노출됩니다. * – cnicutar