IO作业:用信号量的方式,创建两个线程 A B1. A线程读取文件中的内容2. B线程打印A读取到的内容到终端,3. 全部打印完毕后,结束进程;4. 现象类似cat一个文件

本文介绍了一个使用信号量实现的多线程程序,线程A读取文件内容并存储到全局变量arr中,线程B则从arr中读取内容并打印到终端。当文件内容全部打印完毕后,程序结束。该程序类似Linux中的cat命令功能。
摘要由CSDN通过智能技术生成

#include <stdio.h>
#include <semaphore.h>
#include <pthread.h>
#include <errno.h>
#include <string.h>
//两个信号灯定义为全局变量    
sem_t sem1;
sem_t sem2;
//全局变量用来存读到的内容
char arr[64]="1,2,31,2,31,2,3";

//线程1的只读
void *read_sem(void *arg)//*arg=&fo_r
{
        fseek(*(FILE **)arg,0,SEEK_SET);
    while(1)
    {
        /************临界区*********/
        if(sem_wait(&sem1)<0)//信号灯1p操作
        {
            perror("sem_wait1");
            return NULL;
        }
        //printf("信号灯减1\n");
        //读数据到arr
        memset(arr,0,sizeof(arr));
        if(fgets(arr,sizeof(arr),*(FILE **)arg)==NULL)
        {
            //    printf("文件读完\n");
                pthread_exit(NULL);//文件读取完毕退出当前进程
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值