2015-02-06 1 views
-1

파일에 4 개의 부호없는 정수 구조체를 쓰고 다시 읽으려고하는데 아무 것도 읽을 수 없습니다.파일에서 구조체 읽기

// create and write values in superblock 
.. 
Superblock s; // the struct 
if(write(file_desc , &superblock , sizeof(Superblock)) == -1) { 
    perror("writing superblock"); 
    exit(1); 
} 
close(file_desc); 
file_desc = open(path_file, O_WRONLY | O_CREAT, 0600); 
while ((read(file_desc , &s , sizeof(Superblock))) > 0) { 
    printf("%u %u %u %u\n", s.block_size, s.filename_size, s.max_file_size, 
     s.max_dir_file_no); 
} 

그것도 루프를 입력하지 않습니다

여기 내 코드입니다. 내가 뭘 놓치고 있니?

+2

디스크에 구조를 직접 읽고 쓰는 것은 좋지 않은 생각입니다. 그들은 패딩을 포함 할 수 있는데, 이것은 매우 컴파일러에 의존적입니다. – unwind

+1

네, 구조의 각 필드를 직렬화하여 외부 표현의 일부인 비트를 제어 할 수있게하는 것이 좋습니다. 전체 구조체를 직접 작성하면 해당 컨트롤이 없습니다. – unwind

+0

나는 그것을 가지고있다. – gsamaras

답변

5

쓰기 전용 (O_WRONLY)으로 파일을 연 다음 read을 시도하고 있습니다.

+0

그게 다야! 그건 그렇고, write()가 3 번째의 인수가 구조체의 사이즈보다 큰 경우 어떻게 동작 할까를 알고 있습니까? – gsamaras

+0

@ G.Samaras 저는 대부분의 경우 정의되지 않은 동작을 호출 할 것이라고 확신합니다. – davmac

+0

@ G.Samaras 두 번째 인수로 그냥 주소, 쓰기 3 arg를 읽습니다. 이 주소로 시작하는 많은 바이트. 허드슨 버그를 기억하니? –