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
是否按预期工作?