C pread在';那不应该吗?

C pread在';那不应该吗?,c,file-transfer,chunking,C,File Transfer,Chunking,我正在写一个文件传输程序。但是由于某种原因,pread返回0,尽管它不在文件的末尾。有人能看一下我的代码并发现问题吗?它与fread完美配合 int file; unsigned int size = selfp->intdata; file=open(str, O_RDONLY); char buf[1024]; printf("filename = %s \n", str);//prints file

我正在写一个文件传输程序。但是由于某种原因,
pread
返回
0
,尽管它不在文件的末尾。有人能看一下我的代码并发现问题吗?它与
fread
完美配合

        int file;
        unsigned int size = selfp->intdata;
        file=open(str, O_RDONLY); 
        char buf[1024];

        printf("filename = %s \n", str);//prints file name requested
        printf("buffer = %s \n", buf);//prints nothing currently
        printf("offset = %d \n",atoi(chunkIndex)*CHUNK);//prints 0 for first chunk
        printf("CHUNK = %d \n", CHUNK);//prints 1024
        int myoffset = atoi(chunkIndex)*CHUNK; 
        int dataSize=pread(file, buf, sizeof buf, myoffset);
        printf("%d\n", dataSize);//returns 0

        close(file);

谢谢

我们如何验证您的
atoi(chunkIndex)*CHUNK
不在特定文件的末尾?您没有检查
open
是否成功,或者您对
atoi
的调用是否按照您的想法进行。请同时提供示例输入,否则我们无法回答您的问题。如果您将
1024
sizeof(buf)
混为一谈,这将无济于事<代码>字符buf[块]将是一种改进。但我认为你真正的问题在于你没有检查
open()
错误。我想我的观点是
pread
几乎肯定在做它应该做的事情。这一功能是经过战斗考验的;你的代码不是。因此,假设您的代码是罪魁祸首,那么有示例输入(即您正在读取的文件)会有所帮助。再次,在调用
open
后检查是否成功。我认为@EdS.是正确的;除非你在一个非标准的操作系统中工作,否则一个坏掉的
pread
会有点令人震惊。你有没有试过看看你是否真的能找到你想要的偏移量?打印出
lseek(文件、myoffset、SEEK_SET)
的结果,查看它是否匹配
myoffset
。如果使用
fdopen
从描述符创建文件句柄,
fread
是否按预期工作?