我已经有了如何从一开始就将一个文件复制到另一个文件,但是我怎样才能修改程序以相反的顺序复制它? 源文件应具有读访问权和目标文件读写执行权。 我必须使用文件控制库。
例如
FILE A File B should be |---------| |----------| |ABCDEF | |FEDCBA | |---------| |----------|
** * ** * ** * ** * ** * ** * ** * 更新 * ** * ** * ** *
感谢MikeNakis的提示和建议,Sangeeth为您的代码
我已经重新编写了代码,现在它是以反向顺序打印文件大小的复制字节
这是代码
#include #include #include #include #include #include int main(int argc, char *argv[]) { int source, dest, n; char buf; int filesize; int i; if (argc != 3) { fprintf(stderr, "usage %s ", argv[0]); exit(-1); } if ((source = open(argv[1], 0400)) < 0) { //read permission for user on source fprintf(stderr, "can't open source"); exit(-1); } if ((dest = creat(argv[2], 0700)) = 0; i--) { //read byte by byte from end lseek(source, (off_t) i, SEEK_SET); n = read(source, &buf, 1); if (n != 1) { fprintf(stderr, "can't read 1 byte"); exit(-1); } n = write(dest, &buf, 1); if (n != 1) { fprintf(stderr, "can't write 1 byte"); exit(-1); } } write(STDOUT_FILENO, "DONEn", 5); close(source); close(dest); return 0; }
你只是寻求结束并从那里开始阅读。 难怪它不会读任何东西。 你需要寻找到最后减去1个字节,读取一个字节,写入它,然后搜索结束减去两个字节,读取另一个字节,依此类推。
我认为这是一项家庭作业,所以你的教授不应该介意这种方法的极端低效率。 (真实世界的性能问题是非 – 非学术性的。)如果他抱怨,告诉他理论上,它与执行相同任务的任何其他算法具有相同的时间复杂度:O(N)。 (那个发音为“en的大哦”。)他会给你一个A +。
lseek(source,(off_t)i,SEEK_SET); 应该是lseek(来源,(off_t)i – 1,SEEK_SET);
以上就是c/c++开发分享c使用lseek以相反的顺序复制文件相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/560407.html