
应该是: 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个字符是不会被输出的
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)