gpt4 book ai didi

c - lseek() 用于复制文件

转载 作者:行者123 更新时间:2023-11-30 15:53:22 24 4
gpt4 key购买 nike

我所做的:以相反的顺序复制文件的内容。我不能做什么:向前复制内容。

我在网上进行了研究,发现 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 .

最佳答案

要向前复制,您不需要 lseek

您只需要复制,直到read返回零:

while(read(fd,&buffer,sizeof(char)) > 0)
{
write(fd1,&buffer,sizeof(char));
}

当然,为了有效地做到这一点,您可以使用大于一个字符的缓冲区,但是您必须小心如果最后一次读取,您写入的数据量小于缓冲区。

关于c - lseek() 用于复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13684557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com