2016-08-02 4 views
0
int main(int argc, char *argv[]) 

{ 

int i, j, count; 
int f1; 
char buf[16]; 
f1 = open(argv[1], O_RDWR | O_APPEND); 
if(f1 == -1) 
    perror("open failed"); 

if(lseek(f1, 0, SEEK_SET) == -1) 
    printf("lseek failed\n"); 


while(count = read(0, buf, 16)) { 
    write(f1, buf, count); 
} 

close(f1); 
return 0; 
} 

이것은 내 코드입니다. 인수로 주어진 파일을 열고 파일 시작 부분의 모든 내용을 기록해야합니다. 파일은 추가 모드에서 열리고 lseek는 설명자를 시작으로 이동하는 데 사용됩니다. f1의 값에 변화가 없으므로 lseek는 실패합니다.lseek 파일 추가 모드로 작동하지 않습니다

답변

0

파일이 O_APPEND 모드로 열리면 write()를 호출 할 때마다 오프셋 포인터가 원자 작업을 처리하기 위해 파일 끝으로 이동했기 때문입니다.

이것은 파일 끝에 "텍스트"를 파일 (예 : 로그 파일)에 추가하는 많은 프로세스의 목적에 사용됩니다.

그래서 같은 코드를 변경하려고 : 만 O_RWONLY 플래그에

열려있는 파일을 (필요 EOF lseek의를 사용하고자 할 경우()).

open()에서 O_APPEND 플래그를 사용하지 않고 write()는 각 호출시 오프셋을 EOF로 자동으로 이동하지 않았습니다.