read()和write()C中的非文本文件

时间:2016-10-06 22:52:05

标签: c file unix tcp client-server

我有一个客户端服务器程序,在其中我通过TCP以块的形式从服务器读取文件到客户端。但是,并非所有发送的块都是我给出的大小。其中一些小于要求的大小甚至1。 这是我的服务器端代码,用于从文件读取和写入套接字     rd=read(filed, buffer,128);
    write(socketd,buffer,128);

仅适用于非文本文件。在使用txt文件时,它可以很好地工作,但是对于pdfs,ppts和图像都失败了。有没有办法以块的形式阅读这些非文本文件?

pdf文件的每次迭代中读取的大小(以字节为单位)的示例 128 128 128 128 116 128 128 36

2 个答案:

答案 0 :(得分:0)

您应该只写出实际从文件中读取的金额。如果文件的大小不是128的倍数,那么最后一次读取不能返回128个字节,它只返回文件中剩下的内容。使用function getY(x) { return new Promise( function(resolve,reject){ setTimeout( function(){ resolve( (3 * x) - 1 ); }, 100 ); } ); } function foo(bar,baz) { var x = bar * baz; // return both promises return [ Promise.resolve( x ), getY( x ) ]; } function spread(fn) { return Function.apply.bind( fn, null ); } Promise.all( foo( 10, 20 ) ) .then( spread( function(x,y){ console.log( x, y ); // 200 599 } ) ) 作为写入套接字的数量。

rd

答案 1 :(得分:0)

问题已解决。我正在使用strlen(缓冲区)来提供这些数字。根据需要,read()返回的整数为128。