【发布时间】:2012-01-03 17:22:02
【问题描述】:
我已经知道如何从一开始就将一个文件复制到另一个文件,但是我如何修改程序以以相反的顺序复制它?源文件应具有读取权限,目标文件应具有读写执行权限。我必须使用文件控制库。
例如
FILE A File B should be
|---------| |----------|
|ABCDEF | |FEDCBA |
|---------| |----------|
*********************更新**********
感谢 MikeNakis 的提示和建议 ,Sangeeth 为您的代码
我已经重新编写了代码,现在它是以相反的顺序复制字节打印文件大小
这里是代码
#include<stdlib.h>
#include<stdio.h>
#include<fcntl.h>
#include<string.h>
#include<sys/stat.h>
#include<unistd.h>
int main(int argc, char *argv[]) {
int source, dest, n;
char buf;
int filesize;
int i;
if (argc != 3) {
fprintf(stderr, "usage %s <source> <dest>", 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) { //rwx permission for user on dest
fprintf(stderr, "can't create dest");
exit(-1);
}
filesize = lseek(source, (off_t) 0, SEEK_END); //filesize is lastby +offset
printf("Source file size is %d\n", filesize);
for (i = filesize - 1; i >= 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, "DONE\n", 5);
close(source);
close(dest);
return 0;
}
【问题讨论】:
-
“逆序”是什么意思?
-
像文件A一样从末尾复制文件|abcdefg|文件 B 应该被复制 |gfedcba|
-
OK - 所以你想颠倒目标文件中 bytes 的顺序?
-
你的意思是,字符串反转整个文件内容并写入一个新文件?!
-
Paul R. 是的,我想你抓住了我)
标签: c file posix filestream