0
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <sys/sendfile.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(){
    int fd1,fd2,rc;
    off_t offset = 0;
    struct stat stat_buf;

    fd1=open("./hello.txt",O_RDONLY); //read only
    fd2=open("../",O_RDWR);           //both read and write
    fstat(fd1, &stat_buf);            //get the size of hello.txt
    printf("file size: %d\n",(int)stat_buf.st_size);
    rc=sendfile (fd2, fd1, &offset, stat_buf.st_size);
}

如您所见,这是一个非常简单的程序。但是我只是在 ../ 中找不到 hello.txt 我的目标是看看如果我输入一个任何数字会发生什么,比如 10,而不是可能是数百字节的 st_size。

编辑:

感谢您的回答。好吧,我听从了你的建议并改变了

 fd2=open("../",O_RDWR);

 fd2=open("../hello.txt",O_RDWR);

另外,我检查了 fstat 和 sendfile 的返回值,一切正常。

但问题还是一样。

4

3 回答 3

2

您需要在第二个中指定文件名open,而不仅仅是目录名。

请务必检查所有这些函数的返回值,包括fstat.

于 2011-10-05T09:26:42.563 回答
2

你试过fd2 = open("../hello.txt",O_RDWR);吗?

于 2011-10-05T09:26:53.717 回答
0

1>

  fd1=open("./hello.txt",O_RDONLY); //read only
  fd2=open("../",O_RDWR);           //both read and write

用。。。来代替

 fd1=open("../hello.txt",O_RDONLY); //read only
  fd2=open("../your_file_name",O_RDWR);         

2>

 fstat(fd1, &stat_buf); 

将在 stat_buf 中填写一些与 fd1 文件相关的信息。此处该文件的大小也在该结构中返回,带有 st_size 元素。

现在在

 rc=sendfile (fd2, fd1, &offset, stat_buf.st_size);

总 stat_buf.st_size 字节将在 fd2 文件上发送。如果在这里如果你写 10 那么只有 10 个字节会进入 fd2。

于 2011-10-05T09:35:41.437 回答