C/C++对文件以及标准输入(stdin)、输出(stdout)操作的格式设置

背景:在编写一个软件与Chrome中插件进行通讯,由Chrome中的插件自动抓捕到网页信息,从而调用C++编写的程序,之间通过标准的输入输出进行通讯(数据格式为json文件)。Chrome中抓捕信息的特点是前4个字节作为整个后段内容数据的长度,因此在发送数据到Chrome时,必须是长度(4个字节)+数据段,外不能加任何无效字段,不然会出现通讯异常

出现的现象:在一台电脑上,当程序发送数据给Chrome时,这时Chrome会主动断掉应用程序,其他两台电脑则正常使用

问题:在使用标准输入输出时,用的fread、fwrite没有进行任何的格式设置(分为二进制、文本格式),而此时默认采用的是文本格式,当采用文本格式写入时,则数据段末尾会自动增加/a表示结束,因此Chrome中以为/a是下一个数据来了,,进行解析,亦发现没有数据,格式异常,因此断开了与应用程序的链接。二进制格式则不一样,数据不会进行任何的更改、添加,达到我们的效果

控制对文本、标准输入、输出格式的函数:setmode

示例:

/* SETMODE.C: This program uses _setmode to change
 * stdin from text mode to binary mode.
 */
#include <stdio.h>
#include <fcntl.h>
#include <io.h>


void main( void )
{
   int result;


   /* Set "stdin" to have binary mode: */
   result = _setmode( _fileno( stdin ), _O_BINARY );   // O_TEXT
   if( result == -1 )
      perror( "Cannot set mode" );
   else
      printf( "'stdin' successfully changed to binary mode\n" );
}

MSDN链接:https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-6.0/aa298581(v=vs.60)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值