当前位置: 首页 > news >正文

百度怎么网站排名360推广怎么收费

百度怎么网站排名,360推广怎么收费,网站开发源代码知识产权归属,怎么做虚拟的网站今天在复习UNIX文件系统,用到那个read函数,但是无意中却掉到一个坑里了,用了一个多小时才找到问题根源,这里记录一下。问题是这样的:我需要使用read和write函数把键盘输入的信息复制到输出。所以我写了如下程序&#x…

c4468b3f4df77e96b0a416fa2a870fba.png

今天在复习UNIX文件系统,用到那个read函数,但是无意中却掉到一个坑里了,用了一个多小时才找到问题根源,这里记录一下。

问题是这样的:我需要使用read和write函数把键盘输入的信息复制到输出。所以我写了如下程序:

#include

#define MAXSIZE 10

int main(void)

{charc;charbuf[MAXSIZE];intn;while((n = read(0,buf,MAXSIZE)) > 0)//海燕高尔基在苍茫的大海上狂风卷积write(1,buf,n);//从buf中输出n个字节的信息到标准输出中return 0;

}

输入”HelloWorld“检测,好像没问题。但是当我输入”海燕高尔基在苍茫的大海上狂风卷积“却发现不太对了,这是个什么操作??

HelloWorld

HelloWorld

海燕高尔基在苍茫的大海上狂风卷积

海燕高尔基海上狂风卷

为什么后面那个它中间有几个字掉队了?经过多次测试我发现,如果输入的是英文字符就没问题,而中文字符字节数只要超过了那个MAXSIZE就会出问题。我一度认为,是因为读取一次read后,内存中数据对齐导致的,所以我换了几种组合,中文加英文,但是还是有问题。于是没办法,只能去读函数的原型和定义的相关描述了。函数的原型是长下面这样的:

ssize_t read(int fd, void *buf, size_t count);

该函数每次调用成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0。参数count是请求读取的字节数,读上来的数据保存在缓冲区buf中,同时文件的当前读写位置向后移。注意这个读写位置和使用C标准I/O库时的读写位置有可能不同,这个读写位置是记在内核中的,而使用C标准I/O库时的读写位置是用户空间I/O缓冲区中的位置。

为了检测我读取到的到底是多少个字节,我把程序修改如下:

#include

#define MAXSIZE 10

int main(void)

{charc;charbuf[MAXSIZE];intn;while((n = read(0,buf,MAXSIZE)) >= 0)//海燕高尔基在苍茫的大海上狂风卷积

{

printf("%d\n",n);

write(1,buf,n);//从buf中输出n个字节的信息到标准输出中

putchar('\n');

}return 0;

}

我很疑惑的发现:每次读到的的确是MAXSIZE个字节的数据,也把这对应的数据输出了,但是在一次循环后,中间还是跳过了MAXSIZE个字节的数据没输出。

海燕高尔基在苍茫的大海上狂风卷积10海燕高尔基10海上狂风卷

到底是什么导致了这一现象呢?我怀疑是字符与字节的问题,但是说不上到底是那个函数在处理这个出问题了。所以我另外写了一个函数测试。

#include

int main(void)

{char buf[4];charc ;inti;for(i = 0;i < 3;++i)

{

read(0,buf,2);

buf[2] = '\0';

printf("%s\n",buf);

read(0,buf,2);

buf[2] = '\0';

printf("%s\n",buf);

}

}

我三次分别输入 ”好的\n"   "好的h"  “好hj”,其输出如下:

好的

好的h

h

好hj

j

我发现,其实在读取的时候,数据是没有任何问题的:一个中文占了两个字节,所以第一组测试数据的两个字节读了前两个字节 "好" 字并输出了,但是它下一个竟然不是读第三个字节和第四个字节的 "的" 字,而是把回车读进去并输出了!(每次输出都本来会输出一个空格,这里共输出了四个空格)

而第二组测试数据也是首先读两个字节,输出 "好" ,而第二次读取的两个字节分别是 'h' 和 '\n' 。

第三组数据前两个字节读的是 "好" ,而后两个字节读的分别是 'j' 和 '\n' 。

其实到这里,问题已经不难看出了,当我们使用read函数去读取数据时,它会按照你提供的count去读取count个字节的数据,同时文件指针后移,但是文件指针移动并非是以字节为单位来移动的!!!而是以字符为单位来移的。(这里说的字符并非只是char类型的,还包括了宽字符。我把它们都叫字符)。所以这也就导致了我最开始的那个错误。

海燕高尔基在苍茫的大海上狂风卷积10海燕高尔基10海上狂风卷

它读取了10个字节的数据,也就是读到了5个中文字;然后它把文件指针往后移动10个字符,所以在第一次调用read函数之后,文件指针已经指向了第十一个字符,也就是 "海" 字。所以下一次读取就是从这个位置开始了。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

http://www.lbrq.cn/news/2532043.html

相关文章:

  • 护肤网站模版快刷网站
  • 静态网站模板下载关键词seo优化
  • 网页设计网站概述怎么写seo推广网络
  • 新北网站建设引擎优化是什么意思
  • 外语网站制作如何做自己的网站
  • 仪征网站建设seo引擎优化外包公司
  • 外贸商城网站资质seo优化排名技术百度教程
  • 做网站什么职业廊坊网站推广公司
  • 做直播平台网站赚钱吗互联网销售平台
  • 假冒网站能通过备案登记吗电商网站建设公司哪家好
  • 昆明房地产网站建设百度引擎
  • 优秀国内个人网站网址sem推广软件选哪家
  • 宝鸡英文网站建设短视频矩阵seo系统源码
  • to a wordpress上海seo有哪些公司
  • 做金融网站看那些素材宁波优化网页基本流程
  • 杭州网站建设服务企业网站开发费用
  • 在哪个网站找婚照公司网络代运营推广
  • 网站怎么做更新吗如何优化网站
  • 有什么网站可以做宣传网络推广十大平台
  • 做设计需要知道的几个网站吗中国网民博客 seo
  • 北京做网站的公司上海网站推广服务公司
  • 做网站上的在线支付怎么做长沙企业seo服务
  • js网站源码已到期信息流推广主要具有哪两大优势
  • 做网站店铺图片用什么软件搜索引擎营销策划方案
  • 东丰在线网站建设成都移动seo
  • 西宁网站制作宁波谷歌优化
  • 做局域网网站教程网站设计说明
  • 福田网站建设龙岗网站建设龙岗网站建设推销产品的万能句子
  • tp框架做展示网站重庆seo
  • 2017网站趋势百度推广一级代理商名单
  • 【未解决】STM32无刷电机驱动电路问题记录
  • QT6 Python UI文件转换PY文件的方法
  • 计算机网络学习--------三次握手与四次挥手
  • VUE -- 基础知识讲解(三)
  • USRP捕获手机/路由器数据传输信号波形
  • YOLOv5u:无锚点检测的革命性进步