问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

...对一个设备文件进行多线程读写(两个线程就行),求大神给一个简单的...

发布网友 发布时间:2024-03-08 23:44

我来回答

1个回答

热心网友 时间:2024-08-05 17:03

配置文件为 conf.txt
测试代码如下,注意链接的时候加上 -lpthread 这个参数

#include <stdio.h>
#include <errno.h> //perror()
#include <pthread.h>

#include <unistd.h> //sleep()
#include <time.h> // time()
#include <stdlib.h> //rand()

#define FD "conf.txt"

typedef void *(*fun)(void *);

struct my_struct
{
unsigned time_to_wait;
int n;
};

void *test_thread(struct my_struct *);

int main (int argc, char const *argv[])
{
FILE *fp = fopen(FD, "r");
if (fp == NULL)
{
perror(FD);
return -1;
}

srand((unsigned)time(NULL)); //初始化随机种子

int thread_count;
fscanf(fp, "%d", &thread_count);
fclose(fp);

if (thread_count <= 0)
{
printf("线程数<1,退出程序。\n");
return -1;
}

pthread_t *ptid = (pthread_t *)malloc(sizeof(pthread_t) * thread_count); //保存线程ID

int i;
for (i = 0; i < thread_count; i++)
{
int tw = rand() % thread_count + 1; //随机等待时间

struct my_struct * p = (struct my_struct *)malloc(sizeof(struct my_struct));
if (p == NULL)
{
perror("内存分配错误");
goto ERROR;
}
p->time_to_wait = tw;
p->n = i + 1;

int rval = pthread_create(ptid + i, NULL, (fun) test_thread, (void *)(p)); //注意这里的强制转换(两个)
if (rval != 0)
{
perror("Thread creation failed");
goto ERROR;
}
//sleep(1); //这句加也可以,不加也可以。最开始的时候加上这个是为了让两个线程启动的时候之间有一定的时间差
}

printf("主线程启动\n\n");
fflush(stdout);
for (i = 0; i < thread_count; i++)
{
pthread_join(*(ptid + i), NULL); //等待所有线程退出。
}
printf("\n主线程退出\n");
ERROR:
free(ptid);
return 0;
}

void *test_thread(struct my_struct * p) //线程启动的时候运行的函数
{
printf("第%d个线程启动,预计运行%d秒\n", p->n, p->time_to_wait);
fflush(stdout);

sleep(p->time_to_wait); //让线程等待一段时间
printf("第%d个线程结束\n", p->n);
fflush(stdout);
free(p);
return NULL;
}

你的第二个问题我在百度HI回你了~
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
上午去烧香,晚上梦见僵尸要吃我 ...电梯顶层的上方看到死人半个身子 我我掉头走后 被吓醒了 郁_百度知... 我两次梦见去逛商场然后电梯(上升的,带扶手的)塌了,丧尸出来,我和一群... 梦见在丧尸要咬我然后被我一脚踢进电梯它里半个身体出来了还想咬,然后... 香港hpv九价预约官网网址 电脑所有的电线有哪些电脑有哪些连接线 电脑电源那么多线起什么作用电脑电源连接线有多少个基本的都有什么作用... 显示器要接几根线 ...连接线是9芯的,谁知道是哪几条有用,哪几条没有用,各是什么颜色... mbr平板膜可以倒着放么 怀孕期间的美味挑战:拔丝山药 舒享插座与公牛插座哪个好 公牛地暖咋样 公牛地暖质量怎么样 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 公牛地暖怎么样 公牛地暖分水器怎么样 家是地暖砖上放插板电源插板行吗 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 天津河西尖山到塘沽第五大街41号 开泰科技园做什么车? 从天环车站到塘沽滨海开发区第五大街怎么走? 从大港到天津开发区第五大街41号开泰科技园A2-2怎么走 有医生吗?谁知道肾结石病人可以喝牛奶吗? nfc绑定的北京一卡通天津可以用么 一个男人养不起一个女人拿来还能做什么的短语 角质 念什么 离婚后,男方因给别人贷款做担保,对方到期未还,工资被冻结,无力支付抚养... 新疆阿尔法身高 高阿尔法酸的颗粒酒花有何优点 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 中国的教育到底是不是应试教育 德克萨斯州位置 微信被删除了还能看到微信运动吗? 玄凤鹦鹉肠出血怎么治疗 玄凤鹦鹉的大便为甚麼有点橙色 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 八字透出是什么意思 雪之韵是什么意思? 某进程的一个线程处于阻塞状态,则该进程必然处于阻塞状态.这个说法对吗... 龙潭溶洞风景区的游玩攻略有哪些? 云台溶洞景区中有哪些适合拍照游玩的好地方? 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 考研安徽理工大学与西安理工大学那个好一点呢? 安徽理工大学在就业上和西安理工大学相比怎样?差距大么? 西安科技大学和安徽理工大学哪个好 西安外国语大学和安徽理工大学哪个好? 25除以0.75的竖式如何列? 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 为什么蚊子喜欢搓脚?