求救!! C的 fopen函数报错!!errno=22

libingwai 2007-12-11 10:39:19
我在程序多次打开了一个文件,第一次循环时可以正确打开文件,但是到第二次循环时就报errno=22
请问这是啥问题呀???????
...全文
3612 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
thexihexi0 2011-07-28
  • 打赏
  • 举报
回复
同求啊,搞了大半天了,还是有问题。。。
wangyaosuper 2008-11-25
  • 打赏
  • 举报
回复
在进行共享内存操作的时候报errno = 22是什么意思?
libingwai 2007-12-11
  • 打赏
  • 举报
回复
什么意思?
wei801004 2007-12-11
  • 打赏
  • 举报
回复
共享打开
libingwai 2007-12-11
  • 打赏
  • 举报
回复
我这个程序一开始是在高版本的gcc上跑的,编译执行都没问题
但是现在放到低版本的gcc上就报这个错了,可以编译,但是执行不了
chlaws 2007-12-11
  • 打赏
  • 举报
回复
同意,代码贴出来看看
还有一点,第1次打开的时候应该是用写的模式 "w"
后面打开形式就应该不能用"w",否则覆盖了原来的内容,就读取不到里面的信息了
SimonFu 2007-12-11
  • 打赏
  • 举报
回复
l_fp = fopen(filename,"r");
if( l_fp == NULL )
{
vtcp_log("文件不存在或者存在错误,请检查[%s]\n",filename);
return 1;
}
fclose(l_fp);

要清除错误标志位吧
libingwai 2007-12-11
  • 打赏
  • 举报
回复
我也顶一下
libingwai 2007-12-11
  • 打赏
  • 举报
回复
我只把报错的部分,和主程序帖上来了,请大家帮帮忙
就是在第二次调用scan_rpt_var这个函数的时候报错,说是参数非法
l_read_fp = fopen(_read_file, "r");
if( l_read_fp == NULL)
{
vtcp_log("ddddopen read_file error\n");
return -1;
}就是在这里报错errno=22
main()
{
/* 检查文件是否顺利打开 */
l_fp = fopen(filename,"r");
if( l_fp == NULL )
{
vtcp_log("文件不存在或者存在错误,请检查[%s]\n",filename);
return 1;
}
fclose(l_fp);
TRACE
ret=Com_cur_no_code_Dec_Sel(g_pub_tx.reply,"use_ind='Y'");
if(ret)
{
sprintf(acErrMsg,"sql error!! %s,%d [%d]",__FILE__,__LINE__,ret);
WRITEMSG
goto ErrExit;
}
while(1)
{
memset(&g_com_cur_no_code,0x00,sizeof(struct com_cur_no_code_c));

ret=Com_cur_no_code_Fet_Sel(&g_com_cur_no_code,g_pub_tx.reply);
if(ret==100) break;
else if(ret){
sprintf(acErrMsg,"sql error!! %s,%d [%d]",__FILE__,__LINE__,ret);
WRITEMSG
goto ErrExit;
}
/* 根据机构号循环处理报表 */
for(i=0; i<brno_nums; i++)
{

memset(&g_brno_tmp, 0x00, sizeof(struct com_branch_c));

init_prt_val(&g_prt_val);

strcpy(g_filename,l_str_tmp);

/* 创建文件 */
TRACE
ret = cre_file(&g_brno[i], g_filename);
if( ret ) goto ErrExit;

vtcp_log("[%s][%d]\n",__FILE__,__LINE__);
g_brno_tmp = g_brno[i];

/* 第一次扫描报表,记录所有的变量 */
ret = scan_rpt_var(filename);
vtcp_log("[%s][%d]\n",__FILE__,__LINE__);TRACE
if( ret ) goto ErrExit;

/*report 校验计算公式和变量 */
if(cal_form_nums != prt_val_nums)
{
vtcp_log("变量与计算公式定义错误: 数量不符\n");
vtcp_log("cal_form_nums=[%d]\n",cal_form_nums);
vtcp_log("prt_val_nums=[%d]\n",prt_val_nums);
continue;
}
if( cmp_cal_val() ) continue;

/* 计算出变量的值 */
cal_g_prt_val();

/* 打印报表 */
ret = make_rpt(filename,g_fp);
if(ret) goto ErrExit;

fclose(g_fp);

if(fp)
fclose(fp);

vtcp_log("[%s][%d]提交数据库!\n",__FILE__,__LINE__);
vtcp_log("机构[%s]完成\n",g_brno_tmp.br_no);
}
}
Com_cur_no_code_Clo_Sel();
}
/**************************************************************
开始扫描报表的所有变量
input :
char *_read_file 格式文件名
FILE *_prt_fp 报表文件句柄
output
0 -- success
1 -- fail
**************************************************************/
int scan_rpt_var(char *_read_file)
{
char l_str_tmp[STR_TMP_LEN];
FILE *l_read_fp;
int l_ret;

/* 打开格式文件 */
l_read_fp = fopen(_read_file, "r");
if( l_read_fp == NULL)
{
vtcp_log("ddddopen read_file error\n");
return -1;
}

vtcp_log("[%s][%d]\n",__FILE__,__LINE__);
while( !feof(l_read_fp) )
{
memset(l_str_tmp, 0x00, sizeof(char));
fgets( l_str_tmp, BUFLEN+1, l_read_fp );

del_fore_space(l_str_tmp);
del_after_space(l_str_tmp);
/*** 如果行首为 # 或 // ,表示本行为注释 ***/
if( l_str_tmp[0]=='#' || !strncmp( l_str_tmp, "//", 2 ) ) continue;
/*** 如果空行,则跳过 ***/
if( strlen(l_str_tmp)==0||l_str_tmp[0]=='\0'||l_str_tmp[0]== '\n')
continue;
if( !strncmp(l_str_tmp,"body",4) )
{
/*** 开始扫描报表 ***/


scan_rpt_body(l_read_fp);
}else
{

continue;
}
}

vtcp_log("[%s][%d]\n",__FILE__,__LINE__);
return 0;
}
ckt 2007-12-11
  • 打赏
  • 举报
回复
贴代码看看
xaobao 2007-12-11
  • 打赏
  • 举报
回复
帮顶一下吧
libingwai 2007-12-11
  • 打赏
  • 举报
回复
已经关闭了都,但还是报错呀??
Treazy 2007-12-11
  • 打赏
  • 举报
回复
多次打开同一个文件,如果在打开一个文件后没有关闭
那之后的打开文件会导致很多问题!建议1个打开对应1个关闭

69,371

社区成员

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

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