2017-04-07 36 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