ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

将文件写入.c中的另一个文件

2019-10-10 04:00:52  阅读:11  来源: 互联网

标签:c-3 linux file



我有一个读取文件的代码,然后将其内容复制到另一个文件.我需要使它仅复制每20个符号,然后跳过10个符号,然后再跳过20个符号,依此类推.

我必须使用lseek()函数,但是我不知道如何将所有这些都放入循环中来完成.

main (argc, argv)
int argc;
char *argv[];
{
    int fd1, fd2;
    int nbytes, mode;
    char buf[BUFSIZ];
    if(argc<3){
        fprintf(stderr, "%s: nepareizs kopesanas parametrs\n", argv[0]);
        exit(1);
    }
    if((fd1 = open(argv[1], O_RDONLY)) < 0){
        fprintf(stderr, "Nevar atvert failu %s\n", argv[1]);
        exit(1);
    }
    if((fd2 = open(argv[2], O_WRONLY | O_CREAT, mode))<0){
        fprintf(stderr, "Nevar izveidot jaunu failu %s\n", argv[2]);
        exit(1);
    }

    nbytes = lseek(fd1, 10, 0)
    while((nbytes = read(fd1, buf, BUFSIZ))>0){
            if(write(fd2, buf, nbytes) < 0){
                fprintf(stderr, "не понимаю\n");
                break;

            }

    }

    if (nbytes<0)
        fprintf(stderr, "не понимаю\n");
    close(fd1);
    close(fd2);
    exit(0);
}

解决方法:

更换

nbytes = lseek(fd1, 10, 0)
while((nbytes = read(fd1, buf, BUFSIZ))>0){
        if(write(fd2, buf, nbytes) < 0){
            fprintf(stderr, "не понимаю\n");
            break;

        }

}

while((nbytes = read(fd1, buf, BUFSIZ))>0){
        /* first you write your 20 bytes */
        if(write(fd2, buf, nbytes) < 0){
            fprintf(stderr, "не понимаю\n");
            break;

        }
        /* and then you move 10 bytes further */
        if (lseek(fd1, 10, 0) < 0){
            /* break if this is the eof */
            break;
        }

}

如果BUFSIZ为20.

或者,最简单地,BUFSIZ = 30:

while((nbytes = read(fd1, buf, BUFSIZ))>0){
    /* you only write the first 20 read bytes, or nbytes
       if there are no much bytes in the buffer */
    if(write(fd2, buf, nbytes < 20 ? nbytes : 20) < 0){
        fprintf(stderr, "не понимаю\n");
        break;
    }
}


标签:c-3,linux,file

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有