Linux C write函数

Linux C write函数,第1张

好隐蔽的一个错误!! if ((fd=open(pathname, FLAGS, MODE)==-1)) 这句,括号的位置错误了

应该是: if ( (fd=open(pathname, FLAGS, MODE))==-1)

原写法,导致fd值为0,成了标准输入(终端)了,所以,lseek就会一直报错!

你的write.c第一行是

#include<unistd.h>

是这样的吧?

首先是读取的流程

显示while循环读数据,循环执行了10次 因为i=10而退出,但读数据实际读了11次,这个不难理解吧

所以这11次读的数据分别是#include<un 前10个被存到文件out里面,同时由putchar输出

然后一次性读四个字节"istd" 这四个字节用write(1....)输出

write输出的时候是直接写到stdout上,而putchar和printf一样 是缓冲类输出,在C库中对于这类输出数据并不会马上写到终端,而是当遇到换行/缓冲区满/程序退出/缓冲区flush 等等情况才会输出到stdout

这样就导致了,write输出的四个字节马上输出了,而putchar的10个字节一直在buffer中,直到程序退出才会输出。于是 后写的在前,前面的反而到后面了

尝试在while结束后输出一个\n或者做一下flush 就可以看到效果了

也可以在程序结尾加一个getchar 或者while(1) 可以看到程序退出前,那10个字符是不会被输出的


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7333630.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-04
下一篇2023-04-04

发表评论

登录后才能评论

评论列表(0条)

    保存