2013-06-19 67 views
0

我正在經歷多次呼叫read_from_fd導致數據爲空。從文件讀取多次失敗(需要char陣列malloc?)

#include <fcntl.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <unistd.h> 

int fd; 

void read_from_fd() { 
    char data[2]; 

    read(fd, data, 1); 

    data[1] = 0x00; 

    printf("data %s\n", data); 
} 

int main(void) { 
    fd = open("test.txt", O_RDWR); 

    read_from_fd(); 
    read_from_fd(); 
    read_from_fd(); 
} 

因此,第一次讀取打印數據,但第二次和第三次打印空的東西。

我想這必須做一些從char的內存。它是否正確?我需要做些什麼來解決這個問題?

博多

+1

你能顯示輸入文件嗎?如果文件中只有一個字符,那麼顯然你只會得到一次。如果你想多次,你必須使用lseek – cgledezma

+0

@cgledezma重置搜索指針,這似乎是問題!你能創建一個答案,以便我可以標記它嗎? – bodokaiser

回答

2

如果輸入中只有一個字符,那麼顯然你只能得到它一次。這與文件中的查找指針有關。當您用O_RDWR標誌執行打開操作時,seek指針被放在文件的開頭。然後在每次讀取時調用讀取的字節數。當seek指針到達文件末尾時,讀取調用將用0填充緩衝區並返回適當的值。

如果您想一遍又一遍讀取相同的字符,則必須使用函數lseek重置查找指針。

0

根據opengroup多個併發的行爲讀取同一管道,FIFO,或終端裝置是不確定的。