6

ファイルを作成し1.txt 2.txt、いくつかのコンテンツを に書き込みます1.txt
次に、以下のコードを使用して、コンテンツを にコピーします2.txt
しかし、うまくいきません。には何もありません2.txt

私の間違いを説明できますか?

int main()
{
    int fd1 = open("1.txt",O_RDWR);
    int fd2 = open("2.txt",O_RDWR);          
    struct stat stat_buf ;
    fstat(fd1,&stat_buf);
    ssize_t size = sendfile(fd1,fd2,0,stat_buf.st_size);
    cout<<"fd1 size:"<<stat_buf.st_size<<endl; //output 41
    cout<<strerror(errno)<<endl; //output success

    close(fd1);
    close(fd2);
    return 0;
}
4

2 に答える 2

6

manによると、署名は

ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);

したがって、最初のパラメーターは書き込み先のファイル記述子であり、2 番目のパラメーターは読み取り元のファイル記述子です。

したがって、呼び出しは次のようになります。

ssize_t size = sendfile(fd2,fd1,0,stat_buf.st_size);

于 2012-12-27T12:30:37.493 に答える
0

sendfileプロトタイプに従って、書き込み先の fd を最初のパラメーターにし、読み取り元の fd を 2 番目のパラメーターにする必要があります。しかし、あなたはそれを正反対の方法で使用しました。

したがって、 sendfile ステートメントは次のようになります。

ssize_t size = sendfile(fd2,fd1,0,stat_buf.st_size);
于 2012-12-27T12:31:51.267 に答える