当前位置: 技术问答>linux和unix
请教线程里面读取文件的问题
来源: 互联网 发布时间:2016-07-28
本文导语: 大家好,最近开始想学习下线程编程的东西,遇到个问题: 在主程序中读取磁盘上的一个txt文档,读3个字节后打印出来,要是在主函数中不创建线程,就是不加 ret = pthread_create(&pidA,&attr,(void *)pthread_A,NULL); 这一...
大家好,最近开始想学习下线程编程的东西,遇到个问题:
在主程序中读取磁盘上的一个txt文档,读3个字节后打印出来,要是在主函数中不创建线程,就是不加
ret = pthread_create(&pidA,&attr,(void *)pthread_A,NULL); 这一行,可以正常读取到数据为:
fd = 6
ret = 3
data is 222
但是加了这一行后,读取到的是:
fd = 6
ret = -1
data is (null)
请教大家:
1、是不是线程创建的有问题,还是其他的什么原因导致的。
2、在线程里面是否也可以执行read函数来读取txt的文件内容。 谢谢!
代码如下:
#include
#include
#include /*O_RDONLY 宏定义在该头文件中*/
#include /*线程头文件:编译的时候需要链接线程库,否则编译不过*/
#include
#include
#include /*sched_param 结构体需要*/
#include "taskLib.h"
void *pthread_A(void *arg)
{
for(;;)
{
printf("test pthreadn");
sleep(1);
}
}
void main()
{
int fd;
char *buf;
int ret;
pthread_t pidA;
pthread_attr_t attr;
struct sched_param param;
int newprio = 99;
fd = open("/124.txt", O_RDONLY);
ret = read(fd,buf,3);
close(fd);
printf("fd = %dn",fd);
printf("ret = %dn",ret);
printf("data is %s n",buf);
ret = pthread_create(&pidA,&attr,(void *)pthread_A,NULL); //加了这行代码后,读取到的数据就不对了!!
for(;;)
{
sleep(10);
}
}
在主程序中读取磁盘上的一个txt文档,读3个字节后打印出来,要是在主函数中不创建线程,就是不加
ret = pthread_create(&pidA,&attr,(void *)pthread_A,NULL); 这一行,可以正常读取到数据为:
fd = 6
ret = 3
data is 222
但是加了这一行后,读取到的是:
fd = 6
ret = -1
data is (null)
请教大家:
1、是不是线程创建的有问题,还是其他的什么原因导致的。
2、在线程里面是否也可以执行read函数来读取txt的文件内容。 谢谢!
代码如下:
#include
#include
#include /*O_RDONLY 宏定义在该头文件中*/
#include /*线程头文件:编译的时候需要链接线程库,否则编译不过*/
#include
#include
#include /*sched_param 结构体需要*/
#include "taskLib.h"
void *pthread_A(void *arg)
{
for(;;)
{
printf("test pthreadn");
sleep(1);
}
}
void main()
{
int fd;
char *buf;
int ret;
pthread_t pidA;
pthread_attr_t attr;
struct sched_param param;
int newprio = 99;
fd = open("/124.txt", O_RDONLY);
ret = read(fd,buf,3);
close(fd);
printf("fd = %dn",fd);
printf("ret = %dn",ret);
printf("data is %s n",buf);
ret = pthread_create(&pidA,&attr,(void *)pthread_A,NULL); //加了这行代码后,读取到的数据就不对了!!
for(;;)
{
sleep(10);
}
}
|
跟创建线程无关,你的程序本身就是错的,会产生未定义的错误