2015-02-06 98 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 2015-02-06 15:21:57

+1

是的,最好直接序列化結構的每個字段,以便控制哪些位是外部表示的一部分。通過直接寫入整個結構,你沒有這種控制。 – unwind 2015-02-06 15:27:48

+0

我明白了@unwind。 – gsamaras 2015-02-06 15:27:49

回答

5

您正在打開僅用於寫入的文件(O_WRONLY),然後嘗試從中讀取read

+0

就是這樣!順便說一下,當它的第三個參數大於結構的大小時,'write()'會如何運作? – gsamaras 2015-02-06 15:15:44

+0

@ G.Samaras我相當肯定,在大多數情況下會調用未定義的行爲。 – davmac 2015-02-06 15:20:07

+0

@G.Samaras作爲第二個參數只是一個地址,寫入將讀取第3個參數。從這個地址開始的許多字節。記得Heardbleed的錯誤? – 2015-02-06 15:21:05