使用cgi读取post上传文件数据回车换行(\r\n)被替换为换行(\n)

7 篇文章 0 订阅
2 篇文章 0 订阅

在使用c语言写的cgi处理表单方式上传文件时,解析post过来的数据,发现客户端传来的数据中,行尾的回车换行 \r\n(crlf)在使用读接口fgetc从标准输入中读时,数据变成了\n(lf),导致按照content-length长度读时挂死在那里,服务器使用的是win7下的iis,换了linux下的shttpd服务器 就是正常数据。现在还没有找到具体的原因,在网上搜索也只有一两个人遇到过这个问题,但是也没有直接解决 ,而是规避了。先记录下,后续有时间再继续定位补充。

定位结论:
由于在windows下,C/C++提供的标准输入stdin默认是以"r"模式打开的,在Linux下由于"r"和"rb"效果相同,因此不会受到影响。在Windows下,"r"意味着文本模式,\r\n会被转换成\n,而且遇到EOF就会停止。

因此为了从标准输入读取二进制数据之前,需要将属性设置为二进制模式,使用以下代码以下代码:

#include <io.h>
#include <fcntl.h>

_setmode(_fileno(stdin), _O_BINARY);

测试ok。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值