我应该创建一个程序,它接受一个给定的文件并创建一个带有反向txt的文件。我想知道有没有办法可以从文件末尾开始read()并将其复制到创建文件的第一个字节,如果我不知道文件的确切大小? 此外,我已经搜索了这个,并遇到了fread,fopen等许多例子。但是我不能使用这个项目,我只能使用read,open,lseek,write和close。 这是我的代码到目前为止它并不多,但仅供参考:
#include<stdio.h>
#include<unistd.h>
int main (int argc, char *argv[])
{
if(argc != 2)/*argc should be 2 for correct execution*/
{
printf("usage: %s filename",argv[0[]);}
}
else
{
int file1 = open(argv[1], O_RDWR);
if(file1 == -1){
printf("\nfailed to open file.");
return 1;
}
int reversefile = open(argv[2], O_RDWR | O_CREAT);
int size = lseek(argv[1], 0, SEEK_END);
char *file2[size+1];
int count=size;
int i = 0
while(read(file1, file2[count], 0) != 0)
{
file2[i]=*read(file1, file2[count], 0);
write(reversefile, file2[i], size+1);
count--;
i++;
lseek(argv[2], i, SEEK_SET);
}
答案 0 :(得分:1)
我怀疑大多数文件系统都是为有效支持此操作而设计的。有可能,您必须阅读整个文件才能达到目的。出于同样的原因,大多数语言可能不包括向后读取文件的任何特殊功能。
想出点什么。尝试在内存中读取整个文件。如果它太大,则将开头,反转,转换为临时文件并继续阅读...最后将所有临时文件合并为一个。此外,您可以通过手动低级操作磁盘扇区,或者至少使用针对文件系统的低级编程来做一些聪明的事情。看起来这不是你想要的。
答案 1 :(得分:0)
为什么不尝试fseek
在文件中导航?此功能包含在stdio.h
中,就像fopen
和fclose
一样。
另一个想法是实现一个简单的堆栈......
答案 2 :(得分:0)
这没有错误检查==非常糟糕
如果您通过Google获得创意,则可以获得以下几个示例。 IMO到目前为止你得到的帮助实际上并不是很好的提示。 这似乎是功课,所以要小心复制。做一些关于这里使用的调用的阅读。 stat(fstat)fread(read)
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
int main(int argc, char **argv)
{
struct stat st;
char *buf;
char *p;
FILE *in=fopen(argv[1],"r");
fstat(fileno(in), &st); // get file size in bytes
buf=malloc(st.st_size +2); // buffer for file
memset(buf, 0x0, st.st_size +2 );
fread(buf, st.st_size, 1, in); // fill the buffer
p=buf;
for(p+=st.st_size;p>=buf; p--) // print traversing backwards
printf("%c", *p);
fclose(in);
return 0;
}