read返回-1

AIGPTchina 2012-10-13 04:07:57
int fileSize;
int fid;//文件句柄
int len;
fid = open(szFileName,O_RDWR|O_CREAT,0755);
if (!fid)
{
printf("\r\n!fid\r\n");
errcall(__FILE__, __LINE__, "open-Hash文件失败");
return FALSE;
}
fileSize = checkfile(szFileName);
printf("\r\nGetFileHash=%d\r\n",fileSize);
char * pFileContent = (char *)malloc(fileSize);
printf("\r\nfileszie=%d\r\n",fileSize);

len = read(fid, pFileContent, fileSize);
if(len != fileSize)
{
printf("\r\nlen != fileSize\r\n");
printf("\r\nlen =%d\r\n",len);len = -1
errcall(__FILE__, __LINE__, "文件个数错误");
return FALSE;
}
...全文
116 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
armsword 2012-10-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

这里有错误。

char * pFileContent = (char *)malloc(fileSize);

这里你分配的堆,只读属性。

之后

len = read(fid, pFileContent, fileSize);

你是向缓冲区写如数据啊。

所以你把pFileContent 定义数组形式就可以了。

刚才没自己看。Sorry。

貌似可以结……
[/Quote]

擦,又弄错了,掩面学习得了。
armsword 2012-10-13
  • 打赏
  • 举报
回复
这里有错误。

char * pFileContent = (char *)malloc(fileSize);

这里你分配的堆,只读属性。

之后

len = read(fid, pFileContent, fileSize);

你是向缓冲区写如数据啊。

所以你把pFileContent 定义数组形式就可以了。

刚才没自己看。Sorry。

貌似可以结贴了。
mujiok2003 2012-10-13
  • 打赏
  • 举报
回复
和EOF作比较吧,-1多半是EOF
mujiok2003 2012-10-13
  • 打赏
  • 举报
回复
用feof和ferror判断错误
armsword 2012-10-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

C/C++ code


size_t fread(
void *buffer, //指向数据存放缓冲区的指针
size_t size, //单个字符占用字节数
size_t count, //要进行读写多少个size的字符
FILE *stream //指向某个已打开文件的FILE类型指针
);





请使用fread()
[/Quote]

弄错了。LZ这个是Linux平台。
AIGPTchina 2012-10-13
  • 打赏
  • 举报
回复
errno:9
帅得不敢出门 2012-10-13
  • 打赏
  • 举报
回复
看下errno的信息.
armsword 2012-10-13
  • 打赏
  • 举报
回复


size_t fread(
void *buffer, //指向数据存放缓冲区的指针
size_t size, //单个字符占用字节数
size_t count, //要进行读写多少个size的字符
FILE *stream //指向某个已打开文件的FILE类型指针
);




请使用fread()
AIGPTchina 2012-10-13
  • 打赏
  • 举报
回复



int fileSize;
int fid;//文件句柄
int len;
fid = open(szFileName,O_RDWR|O_CREAT,0755);
if (!fid)
{
printf("\r\n!fid\r\n");
errcall(__FILE__, __LINE__, "open-Hash文件失败");
return FALSE;
}
fileSize = checkfile(szFileName);
printf("\r\nGetFileHash=%d\r\n",fileSize);
char * pFileContent = (char *)malloc(fileSize);
printf("\r\nfileszie=%d\r\n",fileSize);

len = read(fid, pFileContent, fileSize);
if(len != fileSize)
{
printf("\r\nlen != fileSize\r\n");
printf("\r\nlen =%d\r\n",len);len = -1 errcall(__FILE__, __LINE__, "文件个数错误");
return FALSE;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧