【发布时间】:2016-08-05 19:36:46
【问题描述】:
我有一个读取文件然后将其内容复制到另一个文件的代码。我需要让它只复制每 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);
}
【问题讨论】:
-
读入 30 个字节的块,但只使用前 20 个。
-
你为什么使用老式的 C 语言?
-
因为我的老师很古老。他一直在红军中为苏联而战。大声笑。
-
lseek(fd1, 10, 0)中的幻数很可疑。使用适当的宏。 -
@MartinJames,最糟糕的是,他为自己在战争中的成就感到非常自豪。他给我们讲了一半关于战争和教操作系统的老俄罗斯书籍的讲座。他真的不是在教书,只是告诉我们必须用这些功能做什么,仅此而已。