免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1921 | 回复: 5
打印 上一主题 下一主题

[函数] 为什么fscanf函数不能在线程中运行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-23 15:28 |只看该作者 |倒序浏览
下面程序使用静态编译,执行会在fscanf处退出.为什么?
请各位高手指点一下
记得是静态编译,动态编译没问题


#include <stdio.h>;
//#include <stdlib.h>;
//#include <unistd.h>;
#include <pthread.h>;
#include <semaphore.h>;
//#include <ctype.h>;
#include <string.h>;

int ar[2];
FILE *fp;

void * ReadData1(void*){
            printf("start thread\n";
        fscanf(fp,"%d %d",&ar[0],&ar[1]);
        printf("%d--%d\n",ar[0],ar[1]);
        printf("end thread\n";
}
int main(void){
        fp=fopen("1.dat","r";
        pthread_t t3;
        pthread_create(&t3,NULL,ReadData1,NU

LL);

        while(1){
        }

}

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-04-23 15:50 |只看该作者

为什么fscanf函数不能在线程中运行

可能是因为fscanf是不可再入函数。
在线程中不要使用标准i/o函数。

论坛徽章:
0
3 [报告]
发表于 2004-04-23 22:12 |只看该作者

为什么fscanf函数不能在线程中运行

我在aix下面一开始运行也是在fscanf处core dump出来,后来发现不是fscanf的问题,原来是我没有1.dat这个文件,在fopen处又没有判断。fscanf一个空的文件指针自然出错了,呵呵。把1.dat文件产生后,运行就没有问题了。楼主是不是也是这个问题?

论坛徽章:
0
4 [报告]
发表于 2004-06-01 08:31 |只看该作者

为什么fscanf函数不能在线程中运行

原帖由 "lenovo" 发表:
可能是因为fscanf是不可再入函数。
在线程中不要使用标准i/o函数。

斑竹能不能解释一下什么叫“不可再入函数”
谢谢先

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2004-06-01 10:45 |只看该作者

为什么fscanf函数不能在线程中运行

你可以参考《unix环境高级编程》。
简单的就是说在多线程中不能使用的函数。

论坛徽章:
0
6 [报告]
发表于 2004-06-01 10:54 |只看该作者

为什么fscanf函数不能在线程中运行

提个小意见:
为什么fscanf函数不能在线程中运行?
这句话最好改为:
为什么fscanf函数不能在子线程中运行?
如果你直接在main()中使用fscanf是不是在线程中呢?当然是啊,是在主线程中。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP