我做了什么:以相反的顺序复制文件的内容。 我无法做到的事情:向前复制内容。
我在网上进行了研究,发现lseek()
有这个论点..
lseek(file_descriptor,offset,whence);
反向读取逻辑是直截了当的。我的代码如下:
#include<fcntl.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
void main(int argc,char *argv[])
{
int fd,fd1,count=0;
char ch='y',buffer;
if(argc>3)
{
printf("\nSyntax Error!<try> ./cp source_name destination_name\n");
exit(0);
}
fd=open(argv[1],O_RDWR);
if(fd==-1)
{
printf("\nCan not open source file .. :(\n");exit(0);
}
fd1=open(argv[2],O_RDWR);
if(fd1=!-1)
{
printf("\nDestination file exist , OverWrite (Y/N) :");
scanf("%s",&ch);
}
if(ch=='y'||ch=='Y')
fd1=creat(argv[2],O_RDWR|0666);
else
exit(0);
while(lseek(fd,count,2)!=-1)
{
count--;
read(fd,&buffer,sizeof(char));
write(fd1,&buffer,sizeof(char));
}
}
我认为可以通过向前复制文件来进行哪些更改。
count=0;
lseek(fd,count,0)!=-1
but this is taking the program in infinite loop . need help .
答案 0 :(得分:1)
要向前复制,您不需要lseek
。
您只需复制,直到read
返回零:
while(read(fd,&buffer,sizeof(char)) > 0)
{
write(fd1,&buffer,sizeof(char));
}
当然,要有效地执行此操作,您将使用大于一个字符的缓冲区,但是如果最后write
小于缓冲区,则必须小心read
的数据量。
答案 1 :(得分:0)
您的向后副本依赖于count
变为否定并寻求失败。
这不适用于正偏移,因为lseek(2)
允许将偏移量设置为超出文件末尾,请参见手册页。