write函数返回值总是为-1
下面的代码中的gp_pro_head为楼栋链表的头指针全局变量,gp_mana_head为管理员链表的头指针全局变量。管理员链表为单向链表,楼盘链表为三向链表,楼盘链表每个结点上有对应的楼栋链表头指针,楼栋链表上每个结点有对应房屋链表的头指针。所有的链表均为后进先出方式创建。我用open函数创建文件返回值为4,但是write函数的返回值均是-1,我不知道是什么原因导致的,请教各位前辈,这个问题的原因是什么?有解决办法么?没有的话可以用别的函数代替么?在下刚刚自学C语言不久,各位不吝赐教,在下感激不尽。
/**
* 函数名称: CopyData
* 函数功能: 将四类基础数据备份到一个数据文件.
* 输入参数:
* 输出参数: 无
* 返 回 值: BOOL类型总是为TRUE
*
* 调用说明:
*/
BOOL CopyData(void)
{///这个函数有问题,不能存入数据
PROPERTY_NODE *pProNode=NULL;
BUILD_NODE *pBuildNode=NULL;
HOUSE_NODE *pHouseNode=NULL;
SYS_MANAGER_NODE *pManaNode=NULL;
int handle;
int t;
pro_node_num=0; /*楼盘信息表的长度*/
build_node_num=0; /*房屋信息表的长度*/
house_node_num=0; /*楼栋信息表的长度*/
mana_node_num=0; /*管理员信息表的长度*/
/*统计管理员人数*/
for(pManaNode=gp_mana_head;pManaNode!=NULL;pManaNode=pManaNode->next)
{
mana_node_num++;
}
/*统计楼盘数*/
for(pProNode=gp_pro_head;pProNode!=NULL;pProNode=pProNode->next)
{
pro_node_num++;
for(pBuildNode=pProNode->head_build;pBuildNode!=NULL;pBuildNode=pBuildNode->next)
{/*统计楼栋数*/
build_node_num++;
for(pHouseNode=pBuildNode->head_house;pHouseNode!=NULL;pHouseNode=pHouseNode->next)
{/*统计房屋数*/
house_node_num++;
}
}
}
printf("楼盘数目为%ld\n",pro_node_num);
printf("管理员数目为%ld\n",mana_node_num);
printf("楼栋数目为%ld\n",build_node_num);
printf("房屋数目为%ld\n",house_node_num);
if((handle=open(gp_sys_info_filename,O_WRONLY|O_BINARY))==-1);
{
handle=open(gp_sys_info_filename,O_CREAT|O_BINARY,S_IREAD);
}
printf("handle的值为%d\n",handle);
/*将四类基础数据的记录数保存到新文件*/
t=write(handle,(char*)&pro_node_num,sizeof(pro_node_num));
printf("成功保存%d个楼盘数\n",t);
t=write(handle,(char*)&build_node_num,sizeof(build_node_num));
printf("成功保存%d个楼栋数\n",t);
t=write(handle,(char*)&house_node_num,sizeof(house_node_num));
printf("成功保存%d个房屋数\n",t);
t=write(handle,(char*)&mana_node_num,sizeof(mana_node_num));
printf("成功保存%d个管理员数\n",t);
/*将将楼盘信息数据保存到新文件*/
for(pProNode=gp_pro_head;pProNode!=NULL;pProNode=pProNode->next)
{
t=write(handle,(char*)pProNode,sizeof(pProNode));
printf("成功保存%d个楼盘信息\n",t);
}
/*将楼栋信息数据保存到新文件*/
for(pProNode=gp_pro_head;pProNode!=NULL;pProNode=pProNode->next)
{
for(pBuildNode=pProNode->head_build;pBuildNode!=NULL;pBuildNode=pBuildNode->next)
{
t=write(handle,(char*)pBuildNode,sizeof(pBuildNode));
printf("成功保存%d个楼栋信息\n",t);
}
}
/*将房屋信息数据保存到新文件*/
for(pProNode=gp_pro_head;pProNode!=NULL;pProNode=pProNode->next)
{
for(pBuildNode=pProNode->head_build;pBuildNode!=NULL;pBuildNode=pBuildNode->next)
{
for(pHouseNode=pBuildNode->head_house;pHouseNode!=NULL;pHouseNode=pHouseNode->next)
{
t=write(handle,(char*)pHouseNode,sizeof(pHouseNode));
printf("成功保存%d个房屋信息\n",t);
}
}
}
/*将管理员信息数据保存到新文件*/
for(pManaNode=gp_mana_head;pManaNode!=NULL;pManaNode=pManaNode->next)
{
t=write(handle,(char*)pManaNode,sizeof(pManaNode));
printf("成功保存%d个管理员信息\n",t);
}
close(handle);
printf("数据备份成功!");
return TRUE;
}