linux open二进制,linux上使用open读取一个二进制文件

在实际项目中用到了二进制文件的读取功能,就彻底研究一下。我们只注意read整个二进制文件有没有问题,而不关心效率和时间。

看下面的代码,注意几点:

1.read函数的使用,它的返回值是每次读取的字符个数,小于第三个参数时,则返回试驾读取到数值。

2.while循环有两个结束条件,1)刚好read的第三个参数是整个文件的整数倍,2)不是整数倍则需要自己加判读。

#include #include #include #include #include #include #include #include #include   #include   int ReadBinaryFile(const char* _fileName, void* _buf, int _bufLen); int WriteBinaryFile(const char* _fileName, void* _buf, int _bufLen); int main(int argc, char *argv[]) { if(argc < 2) { printf("main argc < 2\r\n"); exit(0); } printf("input file=%s\n", argv[1]); int nReadnum = 512; int nfilenum = 512; int nReadretnum = 0; unsigned char sendBuffer[512];   int fp;// * fp = NULL;   fp = open(argv[1], O_RDONLY); // 必须确保是以 二进制写入的形式打开   if( NULL == fp )   {       return (-1);   }   int read_num = 0;   while(1)   {   printf("=0=fread nReadnum=%d\n", nReadnum);     nReadretnum = read(fp, &sendBuffer, nReadnum); // nReadretnum有可能小雨512   printf("=1=fread nReadretnum=%d nfilenum=%d read_num=%d\n", nReadretnum, nfilenum, read_num); if(nReadretnum != 0) { read_num ++;   printf("=11=fread nReadretnum=%d\n", nReadretnum);   WriteBinaryFile("./1.h264", sendBuffer, nReadretnum);   if(nReadretnum != nReadnum)   break; } else {  printf("=121=fread nReadretnum=%d\n", nReadretnum); break; } printf("=2=fread nReadretnum=%d\n", nReadretnum); }   close(fp); //fromLen = sizeof(fromAddr); //if(recvfrom(sock,sendBuffer,128,0,(struct sockaddr*)&fromAddr,&fromLen)<0) //{ //printf("()recvfrom() error\r\n"); //close(sock); //exit(1); //} //printf("recvfrom() result:%s\r\n",sendBuffer); return 0; } /* * 函数说明: 写二进制文件 * 参数描述: _fileName, 文件名称 *           _buf, 要写的内存缓冲。 *           _bufLen, 内存缓冲的长度 *   返回值: 0, 成功 *           -1, 失败 * */ int WriteBinaryFile(const char* _fileName, void* _buf, int _bufLen) {     FILE * fp = NULL;     if( NULL == _buf || _bufLen <= 0 ) return (-1);     fp = fopen(_fileName, "ab+"); // 必须确保是以 二进制写入的形式打开     if( NULL == fp )     {         return (-1);     }     fwrite(_buf, _bufLen, 1, fp); //二进制写     fclose(fp);     fp = NULL;     return 0;     }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值