作业12.13---要求创建两个线程,实现文件打印到终端上,类似cat一个文件:A线程读取文件中的内容B线程将A线程中读取到的数据打印到终端上当文件打印完毕后,结束进程。

2023-05-16

代码

#include <stdio.h>
#include <pthread.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include<semaphore.h>
//初始化信号量
sem_t sem1;
sem_t sem2;
 
FILE *fd_r;   
char buf[20]="";
size_t res = 0;

void *func1(void *arg)
{
	while(1)
	{
		/*      临界区     */
		if(sem_wait(&sem1) < 0)   
		{
			perror("sem_wait");
			return NULL;
		}
		res = fread(buf,1,sizeof(buf),fd_r);

		if(sem_post(&sem2) < 0)   
		{
			perror("sem_post");
			return NULL;
		}
		/*      临界区     */
		if(res < 1)
			break;
	}
	pthread_exit(NULL);
}
 
void *func2(void *arg)
{
	while(1)
	{
        /*      临界区     */
		if(sem_wait(&sem2) < 0)  
		{
			perror("sem_wait");
			return NULL;
		}
 
		fwrite(buf,1,res,stdout);
 
		if(sem_post(&sem1) < 0)  
		{
			perror("sem_post");
			return NULL;
		}
		/*      临界区     */
		if(res < 1)
			break;
	}
	pthread_exit(NULL);
}
 
int main(int argc, const char *argv[])
{

  
	if(sem_init(&sem1,0,1) < 0)
	{
		perror("sem_init");
		return -1;
	}
	if(sem_init(&sem2,0,0) < 0)
	{
		perror("sem_init");
		return -1;
	}
 
	fd_r = fopen(argv[1],"r");
	if(NULL == fd_r)
	{
		perror("fopen");
		return -1;
	}
 
	//创建一个线程用于读取文件中内容
	pthread_t tid1;
	if(pthread_create(&tid1,NULL,func1,NULL) != 0)
	{
		fprintf(stderr,"pthread_create failed\n");
		return -1;
	}
	//创建另一个线程用于将第一个线程中读取到的数据打印到终端上
	pthread_t tid2;
	if(pthread_create(&tid2,NULL,func2,NULL) != 0)
	{
		fprintf(stderr,"pthread_create failed\n");
		return -1;
	}
 
	pthread_join(tid1,NULL);
	pthread_join(tid2,NULL);
	
	//关闭文件
	fclose(fd_r);
	//销毁信号量
	sem_destroy(&sem1);
	sem_destroy(&sem2);
 
	return 0;
}

执行结果

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

作业12.13---要求创建两个线程,实现文件打印到终端上,类似cat一个文件:A线程读取文件中的内容B线程将A线程中读取到的数据打印到终端上当文件打印完毕后,结束进程。 的相关文章

  • C语言printf()输出格式大全

    这里写自定义目录标题 1 xff0e 转换说明符 a A 浮点数 十六进制数字和p P 记数法 C99 c 字符 d 有符号十进制整数 f 浮点数 包括float和doulbe e E 浮点数指数输出 e E 记数法 g G 浮点数不显无意
  • 2019年 电赛C题 全国大学生电子设计竞赛试题解析与总结

    2019年全国大学生电子设计竞赛试题 电赛C题 分析与总结 线路负载及故障检测装置 本科组 一 题目任务 设计并制作线路负载及故障检测装置 xff0c 示意图如图1所示 检测装置只通过两个连接端子与两根导线连接 导线上A B两点距离各自连接
  • 用moment获取一年内指定周的起始时间和结束时间、用户所选时间和前端传参时间不一致问题

    问题1 xff1a 原代码 xff1a 所选周 selectedWeek handler let selectedWeek 61 parseInt this selectedWeek substring 1 计算所选周的周开始时间和周结束时
  • HTML知识(一)

    1 HTML元素 HTML元素指的是从开始标签 start tag 到结束标签 xff08 end tag xff09 的所有代码 元素内容是开始标签与结束标签之间的内容 某些HTML元素具有空内容 xff0c 空元素在开始标签中进行关闭
  • CSS隐藏元素、BFC、元素居中、布局

    1 css中有哪些方式可以隐藏页面元素 xff1f 区别是什么 xff1f 1 1 display none 元素在页面上将彻底消失 xff0c 元素本身占有的空间会被其他元素占有 xff0c 导致浏览器的重排和重绘 特点 xff1a 元素
  • 响应式设计和CSS提高性能的方法

    一 响应式设计 1 是什么 xff1f 是一种网络页面设计布局 xff0c 页面的设计与开发应当根据用户行为以及设备环境 xff08 系统平台 屏幕尺寸 屏幕定向等 xff09 进行相应的响应和调整 2 常见特点 xff08 1 xff09
  • js事件循环机制

    一 同步任务与异步任务 JavaScript是一门单线程 语言 xff0c 但是单线程并不意味着阻塞 实现单线程非阻塞的方式就是事件循环机制 在JavaScript中 xff0c 所有的事件都可以分为同步任务和异步任务 同步任务 xff1a
  • 简易MIMO-OFDM系统的设计

    0 完整源码获得方式 订阅MATLAB FPGA教程 xff0c 免得获得教程案例以及任意2份完整源码 MIMO OFDM系统的接收信号是多个发射天线发送信号的衰落与加性噪声的线性叠加 xff0c 若采用通常SISO OFDM系统或MIMO
  • 栈的定义和操作

    一 栈的定义 栈是一种操作受限制的线性表 xff0c 将允许进行插入 删除的一端称为栈顶 xff0c 另一端称为栈底 二 栈的分类 栈主要分为静态栈和动态栈 xff0c 静态栈类似于数组 xff0c 而动态栈类似于链表 xff0c 但只能对
  • 用C语言和前序遍历创建一棵二叉树

    一 二叉树的介绍 二叉树的特点是二叉树的每个结点的度都不大于2 xff0c 可以视为每个结点都有左孩子和右孩子 故二叉树结点的数据结构为 typedef int BDataType typedef struct BTNode BDataTy
  • 超市购物程序设计

    一 任务介绍 1 任务描述 去超市购物说人们日常生活的重要事情之一 在超市中有很多日常生活的用法 xff0c 如水果 蔬菜 洗衣机 电冰箱等 人们只能买到超市中的已有商品 xff0c 如果所需要的商品在超市中没有或已经卖完了 xff0c 那
  • 如何在IDEA中配置XML、添加XML文件样板以及设置项目编码方式

    一 如何在IDEA中配置XML 1 首先保证本地电脑上有apache maven包 xff0c 打开IDEA 2 点击File下拉菜单中的Settings xff0c 弹出Settings菜单框 3 在弹出的菜单框中选择Build Exec
  • Java之String类与StringBuffer类

    一 String类 1 实例化方式 1 xff09 直接赋值法 String str 61 34 abc 34 String类的设计采用了共享设计模式 在JVM底层实际上会自动维护一个对象池 xff08 字符串对象池 xff09 xff0c
  • 人脸识别项目的测试用例

  • 球机和枪机的区别

    球机 和 枪机 的区别最明显的应该就是外形的区别 xff0c 那么 xff0c 球机和枪机还有什么深层次的区别呢 xff1f 枪机即 枪式摄像机 xff0c 其监控位置固定 xff0c 只能正对某监控位置 xff0c 所以监控方位有限 枪机
  • STM32的USART注意

    在USART的发送端有2个寄存器 xff0c 一个是程序可以看到的USART DR寄存器 另一个是程序看不到的移位寄存器 对应USART数据发送有两个标志 xff0c 一个是TXE 61 发送数据寄存器空 xff0c 另一个是TC 61 发
  • 数据传输中断和查询的区别

    中断方式就是在接受数据时 xff0c 微控制器转入中断服务程序对接受到的数据进行处理 xff0c 而查询方式就是通过查询状态寄存器中接受状态位对接收到的数据进行处理 xff0c 两者在工作上的区别主要在于 xff0c 中断方式微控制器可以执
  • C语言 HTTP发送post和get请求

    安装curl环境 xff1a apt install curl apt get install libcurl4 openssl dev 使用C语言来做HTTP协议 xff0c 然后发送post和get请求 xff0c 这里为post请求的
  • Verilog中输入数据范围的判断

    0 完整源码获得方式 订阅MATLAB FPGA教程 xff0c 免得获得教程案例以及任意2份完整源码 在系统设计的过程中 xff0c 经常需要根据输入数据的值 xff0c 对相关信号的值进行改变 如果输入数据的边界值数量比较少 xff0c
  • xp无法识别u盘exFAT。插入提示格式化

    xp无法识别u盘exFAT 插入提示格式化 肯定不能格式化 xff0c u盘装的都是数据 xff0c 一搜 xff0c 原来是xp太老了 不识别exFAT格式 下了个补丁 WindowsXP KB955704 x86 CHS exfat补丁

随机推荐

  • 迅雷x导入未完成任务失败的解决办法。

    最近用x雷下东西 xff0c 卸载时不小心点了删除下载任务 再打开时任务已经没了 怎么办 文件还没下完呢 重装x雷 导入未完成任务 结果失败 我dnnm 十几年的软件 xff0c 这么重要的功能都没做好 xff1f xff1f 故意的吧 经
  • LSP编程之64位实现的一些经验。

    以前32位时 xff0c lsp代码正常运行 xff0c 但安装在win7后也能运行 xff0c 但逐渐发现32位的lsp dll只能过滤32位的进程 64位的进程似乎没有影响 查看dll模块也没有我的lsp dll身影 百度了下资料 发现
  • 判断字符串是否有中文

    hasch cpp 定义控制台应用程序的入口点 include 34 stdafx h 34 include lt windows h gt bool hasChinese const std wstring amp src for int
  • 修复机械硬盘那些事

    关于降速 就是硬盘出现许多错误后 xff0c 比如坏道 xff0c 硬盘传输模式会不断降级 xff0c 慢到只有1 5M s 读取速度 解决办法是格式化 xff0c 删除 xff0c 重启 重新分区 然后速度测试恢复了90M s 正常了 关
  • 关于避免qq迅雷流氓驱动的问题

    qq作为聊天软件 xff0c 装机必备 迅雷当年也是必备 但是 随着企业膨胀 43 流氓 都开发出驱动 43 服务来常驻系统底层了 作为一个关注隐私的人 非常不喜欢第三方载入驱动 xff0c 而且还是聊天软件和下载软件 你要那么大权限作甚
  • 【原】记一次加密网页html的研究

    某次web编程 思考着辛辛苦苦编写的web别人 右键查看源码不就一目了然了 xff1f 当然有些人会把script写入外部js引入 xff0c 但也只是增加了查看源码的步骤 我就想把整个页面html都加密下 xff0c 只是右键查看时 xf
  • cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso

    ed2k file cn windows 7 ultimate with sp1 x64 dvd u 677408 iso 3420557312 B58548681854236C7939003B583A8078 文件 D 迅雷下载 cn w
  • rtmpsrv.c 支持publish的方法

    rtmpsvr c是rtmpdump里的代码 实现了简单的rtmpserver 可以连接但客户端publish就卡住了 分析代码 xff0c 发现是没有实现对应的消息处理 增加代码如下即可publish了 else if AVMATCH a
  • Chrome提示“您的连接不是私密连接”& 删除所有证书 解决办法

    访问经常上的站 xff0c 结果提示 您的连接不是私密连接 xff0c 怀疑是证书有错误 就把chrome 设置 高级设置 HTTPS SSL 把里面证书全部删除了 结果导致所有https网站都提示 您的连接不是私密连接 下载了个 http
  • 217维特比译码器的FPGA设计

    0 完整源码获得方式 订阅MATLAB FPGA教程 免得获得教程案例以及任意2份完整源码 二 viterbi译码器 nbsp nbsp nbsp 2 1 7 卷积码译码过程的总体结构可分为4个子模块 分别是分支度量模块 加比选蝶形运算单元
  • rtmp2flv rtmp直播转httpflv工具

    下载 https download csdn net download smwhotjay 10696519 注意 由于用到了openssl xff0c 所以需要安装VC2008sp1 exe 不然运行会失败 软件用途 给rtmp服务器增加
  • Linux TCP/UDP调试助手下载安装(转载备忘)

    Linux TCP UDP调试助手下载安装 xff08 转载 备忘 xff09 本文主要转载 https blog csdn net have fun article details 88229426 作为备忘文档使用 因为本人要简单调试一
  • [转载]boost库的简单介绍

    boost库的简单介绍 boost是一个准标准库 xff0c 相当于STL的延续和扩充 xff0c 它的设计理念和STL比较接近 xff0c 都是利用泛型让复用达到最大化 不过对比STL xff0c boost更加实用 STL集中在算法部分
  • Linux上Qt程序闪退的BUG

    问题现象 输出信息 xcb Unknown request in queue while dequeuing xcb Most likely this is a multi threaded client and XInitThreads
  • EKF2学习笔记之运行流程2

    2017 8 4 by snow 2cd read mag data and set it 这里有个细节 xff0c 对于多个magnetometer同时工作时 xff0c 在处理时需要 Check if the magnetometer
  • 最近做小四轴的一些问题

    最近在折腾原来做过的小四轴 xff0c 把数据用Matlab处理了一下 主要有一个问题就是震动很大 xff0c 平着放的话角度能震动到30 40度 但是装上桨之后就没那么震了 xff0c 但是还有一个问题就是会死机 首先想到是电机转动的时候
  • 最新干货|面向无人机的自主导航与避障

    分享嘉宾 鲁鹏 文稿整理 William 1 无人机在自主导航方面的挑战 无人机在未知环境上导航 xff0c 面临着很多挑战 xff0c 由于未知环境下 xff0c 并不知道当前环境的地图可能会存在一些威胁 xff0c 主要原因在于没有先验
  • Clang-Format格式化选项介绍

    Clang Format可用于格式化 xff08 排版 xff09 多种不同语言的代码 xff0c 其自带的排版格式主要有 xff1a LLVM Google Chromium Mozilla WebKit 如果你使用Visual Stud
  • mavros连接px4失败的usb-ttl原因

    问题描述 xff1a 最近在搞mavros xff0c 以方便协处理器和pixhawk通讯 xff0c 在按照官网教程安装mavros xff0c 设置px4 xff0c 连接硬件之后发现mavros卡在中间下不去 xff1a MAVROS
  • 作业12.13---要求创建两个线程,实现文件打印到终端上,类似cat一个文件:A线程读取文件中的内容B线程将A线程中读取到的数据打印到终端上当文件打印完毕后,结束进程。

    代码 include lt stdio h gt include lt pthread h gt include lt sys stat h gt include lt sys types h gt include lt fcntl h g