2017-04-07 67 views
0

進出口使用的read()函數在C.閱讀()正在讀實際數據

有一個問題之前,閱讀垃圾數據我有一個文件可以說,文件X具有內容:

Data to be outputted 

然而,當我打開該文件,並使用它看我用垃圾數據下面的代碼

ssize_t reader = 0; 
ssize_t writer = 0; 
char buffer[256]; 
reader = read(myFile, buffer, 256); 
//check if reader is -1, if so then exit(1) 
writer = write(1, buffer, 256); 
//check if writer is -1, if so then exit(1) 

讀取功能似乎運行兩次獲得。一旦有一堆垃圾數據,然後跟在文件中的實際數據。任何想法如何彌補這一點?

+2

你應該只寫你所讀的。更改爲'writer = write(1,buffer,reader);' – zzn

+1

您的代碼片段不是MCVE([MCVE]),並且無法提供您聲明的行爲。請提供實際工作的MCVE,以複製您所聲稱的內容。 (你在文件中的數據之後會產生各種垃圾 - 如果垃圾包含回車,它可能會部分覆蓋真正的數據。) –

+0

爲什麼使用POSIX讀取,寫入?爲什麼不是標準的C fread和fwrite? –

回答

1

你確定你的緩衝區是用'\ 0'填充的,用'\ 0'結束嗎? 而你打電話寫256 - 在第三arg

#include <fcntl.h> 

int main() { 
    const int max_size = 256;  
    char buffer[max_size] = {}; 
    int my_input = open("input", O_TEXT, S_IREAD); 

    ssize_t reader; 
    ssize_t writer; 
    reader = read(my_input, buffer, max_size); 
    if(reader != -1) 
     writer = write(1, buffer, reader); 

    return 0; 
} 
+1

1是標準輸出的標準文件描述符編號,又名STDOUT_FILENO。 –

+1

爲什麼'write(my_output,buffer,max_size);'中的max_size'?請參閱[評論](http://stackoverflow.com/questions/43268891/read-is-reading-junk-data-before-reading-actual-data#comment73606838_43268891) – chux

+0

@chux哦我應該寫:write(my_output,buffer ,讀者); – bobra