当前位置:  技术问答>linux和unix

while循环中调用write()函数,为什么只执行一次?

    来源: 互联网  发布时间:2017-01-05

    本文导语:  函数如下所示,在while循环中,从发fd1  read()一个字节数据(如“a”),通过lseek设置fd2的偏移量,然后write() fd2 ;在本程序中共执行10次循环,fd2 应该被写入了十次数据,且每次写入的数据位置不同,也就...

函数如下所示,在while循环中,从发fd1  read()一个字节数据(如“a”),通过lseek设置fd2的偏移量,然后write() fd2 ;在本程序中共执行10次循环,fd2 应该被写入了十次数据,且每次写入的数据位置不同,也就是fd2中应该有10个“a”,但是fd2中只有1个
我感觉好像是lseek()或write()在10次循环中只运行了一次,为什么?

如果不使用循环,lseek()或write()顺序写,这样fd2中的数据就正常了

#include 
#include 
#include 
#include 
#include 

int main(int argc,char* argv[]){
    int fd1,fd2;
    char buffer[100];
    long offset=0;
    int num,i;

    if(argc!=3){
        printf("Usage : %s source dest",argv[0]);
        return 1;
    }

    if((fd1=open(argv[1],O_RDONLY))==-1){
        perror("Cannot open the file");
        return 1;
    }

    if((fd2=open(argv[2],O_CREAT | O_WRONLY,0777))==-1){
        perror("Cannot create the destination file");
        return 1;
    }

    i=10;

        while(i--){

        printf("offset=%dn",offset);

        num=read(fd1,buffer,10);

        if(lseek(fd2,offset,SEEK_SET)==-1){
            perror("Cannot move the file pointer");
            return 1;
        }
        
        if(write(fd2,buffer,num)==-1){
            perror("Cannot write the file content to the file");
            return 1;
        }

        offset=offset+20;

        if(lseek(fd2,offset,SEEK_SET)==-1){
            perror("Cannot move the file pointer");
            return 1;
        }

         if(write(fd2,buffer,num)==-1){
            perror("Cannot write the file content to the file");
            return 1;
        }
      
        
    }

    close(fd1);
    close(fd2);
    return 0;
}

|
  num=read(fd1,buffer,10);

你把read放在循环里了,fd1对应的文件内容太短了吧
循环一次就全读完了,然后下次循环读不到数据,自然什么也没写进去,每次write的num都是0

如果文件大些就正常了吧
又或者我猜你的意思应该是把这行read放在while上面?

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教一个基础问题while循环怎么从10到0来循环10次?
  • shell while循环内的变量在循环外部值不能传递
  • 用while循环等待事件发生时是否可以释放系统资源
  • shell 的 while无限循环问题!
  • MySQL循环语句之while循环测试
  • 关于shell中的while循环的使用,求助
  • shell 脚本 while循环结构问题,急ing,,,,,,
  • MySQL与MSSQl使用While语句循环生成测试数据的代码
  • 简单的shell脚本 关于while循环
  • 请问为什么这样的两个while循环却有不同的效果
  • C#条件语句、循环语句(if、while)
  • 哪位linux高手帮我看看下面这个shell脚本为什么不能进入while循环??
  • 关于do-while 循环
  • Shell脚本while、until循环语句简明教程
  • 请教shell for while 循环用来一行一行读取文件内容的区别
  • Shell编程中FTP嵌入到while循环后报的错,请各位高手帮我看看。
  • c#入门之循环语句使用详解(for循环、do/while)
  • ???请高人指点!!!Java多线程中run()方法中的while(true)循环有什么意义?
  • 精通unix shell脚本编程中关于while循环的问题!
  • 一个老调重弹的问题:while循环中wait为什么不能代替waitpid
  • Linux 下c++开发error while loading shared libraries问题解决
  • for(iter.hasNext()){....}用法与while有什么区别?
  • 消息队列一般是怎么使用的,是采用While的方式进行轮询么
  • shell脚本中while不能嵌套?
  • error while loading shared libraries:libncurses.so.4
  • 新手请教:while read中末尾的重定向表示什么意思?
  • proc时错误:error while loading shared libraries.....
  • Bash 中的while 语句
  • shell编程中while的问题,高分
  • error while loading shared libraries:在线等
  • cygwin——error while loading shared libraries:?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    一个老调重弹的问题:while循环中wait为什么不能代替waitpid iis7站长之家