0

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

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

2 回答 2

1

要向前复制,您不需要lseek.

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

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

write当然,要有效地做到这一点,您将使用大于一个字符的缓冲区,但是如果最后一个字符小于缓冲区,则必须小心您的数据read量。

于 2012-12-03T13:55:03.810 回答
0

您的反向副本依赖于count变得消极并寻求失败。这不适用于正偏移量,因为lseek(2)允许将偏移量设置在文件末尾之外,请参阅手册页。

于 2012-12-03T13:52:49.893 回答