作业-11.14

news/2024/7/7 19:05:33

1、实现LINUX终端CAT的效果

#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <semaphore.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>

char str = 0;
int fd = 0;
sem_t sem1;
sem_t sem2;
ssize_t res;

void* handler1(void* arg)
{
    while(1)
    {
        str = 0;
        res = read(fd, &str, 1);
        if(0 == res)
        {
            break;
        }
        sem_wait(&sem1);
        sem_post(&sem2);
    }
    pthread_exit(NULL);
}
void* handler2(void* arg)
{
    while(1)
    {
        if(0 == res)
        {
            break;
        }
        sem_wait(&sem2);
        //printf("%c", str);
        //str = 0;
        write(1, &str,1);
        sem_post(&sem1);
    }
    pthread_exit(NULL);
}

int main(int argc, const char *argv[])
{
    if(argc != 2)
    {
        fprintf(stderr, "./a.out <filepathname>\n");
        return -1;
    }
    fd = open(argv[1], O_RDONLY);
    if(sem_init(&sem1, 0, 1) < 0)
    {
        perror("sem_init");
        return -1;
    }
    if(sem_init(&sem2, 0, 0) < 0)
    {
        perror("sem_init");
        return -1;
    }
    pthread_t tid1, tid2;
    if(pthread_create(&tid1, NULL, handler1, NULL) != 0)
    {
        perror("pthread_create");
        return -1;
    }
    if(pthread_create(&tid2, NULL, handler2, NULL) != 0)
    {
        perror("pthread_create");
        return -1;
    }
    pthread_join(tid1, NULL);
    pthread_join(tid2, NULL);


    sem_destroy(&sem1);
    sem_destroy(&sem2);


    return 0;
}


http://lihuaxi.xjx100.cn/news/158189.html

相关文章

kindle格式转换,.azw格式转换

kindle格式转换第一步&#xff1a;在亚马逊官网购买图书后&#xff0c;将书发送至有kindle软件的设备。以备后续从设备中下载图书。第二步&#xff1a;使用电脑端的kinlde软件&#xff0c;下载购买的电子书。第三步&#xff1a;下载calibre软件&#xff0c;并安装第四步&#x…

Easy Future亮点集锦|品牌升级,加速产业数字化

11月9日&#xff0c;以“数字孪生 新未来”为主题的「2022 Easy Future易知微秋季产品发布会」圆满落幕&#xff01; 从数据治理到数字孪生&#xff0c;实现“数智视融合&#xff0c;虚实人联动”&#xff0c;打造数字增强世界&#xff0c;结合行业前沿趋势和丰富实践经验&…

SpingBoot之替换容器为Undertow

什么是Undertow容器 Undertow 是一个采用 Java 开发的灵活的高性能Web服务器&#xff0c;提供包括阻塞和基于 NIO 的非堵塞机制。Undertow 是红帽公司的开源产品&#xff0c;是 Wildfly 默认的 Web 服务器。Undertow 提供一个基础的架构用来构建 Web 服务器&#xff0c;这是一…

iOS的签名机制

前言 了解iOS的签名机制之前我们需要掌握以下几个知识: 加密算法(对称加密, 非对称加密) 单向散列函数 数字签名 证书 一、加密算法 1、对称加密 对称加密就是: 加密和解密用的密钥是同一个, 常用的加密算法有 :DES 、 3DES 、AES (注:DES 3DES 已不再安全) 优点: 加密、解…

IP数据包分片理解

IP 数据包在数据帧中的封装: 一、在很多物理网络中&#xff0c;都对数据帧的长度有限制&#xff0c;而且这个限制大都比IP 数据包长度的限制小。 二、物理网络的这个限制&#xff08;对帧数据区&#xff09;通常都称为最大传输单元&#xff08;MTU,Maximum Transfer Unit&…

springboot1:项目启动

1.启动springboot引入的依赖&#xff08;pom.xml的配置&#xff09; 引入父项目&#xff08;依赖管理&#xff09; 父项目的父项目中声明了所有需要依赖的版本号&#xff08;自动版本仲裁机制&#xff09; <parent><groupId>org.springframework.boot</groupId…

DPDK 网络加速在 NFV 中的应用

目录 文章目录 目录前文列表传统内核协议栈的数据转发性能瓶颈是什么&#xff1f;DPDKDPDK 基本技术 DPDK 架构DPDK 核心组件应用 NUMA 亲和性技术减少跨 NUMA 内存访问应用 CPU 绑核技术减少上下文切换损耗应用大页内存技术减少 TLB miss应用 PMD 轮询技术减少网卡外设的硬件…

50行Python代码白嫖Github Actions, 每天检测收录优质项目的存活状态(提供csv纯净数据下载)

受阮一峰老师《科技爱好者周刊》的启发&#xff0c;zhaoolee打算做个优秀项目的存储仓库&#xff0c;于是我写了个csv文件托管到github上, 为了方便检查URL的检查&#xff0c;我写了个脚本&#xff0c;每次更新csv文件或每天东八区的早晨6点&#xff0c;都会进行一url存活检测&…