linux open read 和write的系统调用出现了点顺序问题。。。
#include<stdlib.h>#include<unistd.h>#include<fcntl.h>#include<sys/stat.h>intmain(){in...
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
int main(){
int in_fd;
int out_fd;
char buffer;
char buff[10];
int tmp;
int i=0;
in_fd=open("write.c",O_RDONLY);
out_fd=open("out",O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR);
while(read(in_fd,&buffer,1)==1 && i<10){
write(out_fd,&buffer,1);
putchar(buffer); //这里输出10个字符。。
i++;
}
tmp=read(in_fd,buff,4);
if(tmp==-1)
write(2,"error",tmp);
else
{
write(1,buff,tmp); //这里也是输出4个字符
}
exit (0);
}
输出结果是这个istd#include<u
注意原来的应该 按说前面的应该先执行输出 #include<uistd 才对吧 新手,求指导。。。 展开
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
int main(){
int in_fd;
int out_fd;
char buffer;
char buff[10];
int tmp;
int i=0;
in_fd=open("write.c",O_RDONLY);
out_fd=open("out",O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR);
while(read(in_fd,&buffer,1)==1 && i<10){
write(out_fd,&buffer,1);
putchar(buffer); //这里输出10个字符。。
i++;
}
tmp=read(in_fd,buff,4);
if(tmp==-1)
write(2,"error",tmp);
else
{
write(1,buff,tmp); //这里也是输出4个字符
}
exit (0);
}
输出结果是这个istd#include<u
注意原来的应该 按说前面的应该先执行输出 #include<uistd 才对吧 新手,求指导。。。 展开
2个回答
展开全部
你的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个字符是不会被输出的
#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个字符是不会被输出的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询