IO进线程练习(用到了:文件IO 标准IO 多进程 exec进程转移 有名管道 无名管道)

1 利用文件IO读取文件数据存入链表,当触法ctrl+c时将链表数据存入文件。

main.c

#include"head.h"
FILE*fp_w;
linklist L;
void handler(int sig){out_file(fp_w,L);printf("文件写入完成\n");exit(0);
}int main(int argc, const char *argv[])
{__sighandler_t s =signal(SIGINT,handler);datatype buf;FILE*fp_r=fopen("../standard_io/cpy_f.c","r"); if(fp_r==NULL){perror("fopen");return -1;}fp_w=fopen("./1.c","w");if(fp_w==NULL){perror("fopen");return -1;}L=create_head();while(1){if(fscanf(fp_r,"%c",&buf)==-1){break;}insert(L,buf);}printf("文件读取完成\n");out_put(L);while(1);
END:return 0;
}

fun.c

#include"head.h"
linklist create_head(){linklist L=(linklist)malloc(sizeof(struct node));if(NULL==L){printf("申请空间失败\n");return NULL;}L->len=0;L->next=NULL;return L;
}linklist create_linknode(datatype key){linklist p=(linklist)malloc(sizeof(struct node));if(NULL==p){printf("申请空间失败\n");return NULL;}p->data=key;p->next=NULL;return p;
}
int  insert(linklist L,datatype key){if(NULL==L){printf("传参失败\n");return -1;}linklist f=L;while(f->next!=NULL){f=f->next;}linklist p=create_linknode(key);if(p==NULL){printf("创建节点失败\n");return -1;}f->next=p;(L->len)++;return 0;
}
int out_put(linklist L){linklist p=L->next;for(int i=0;i<L->len;i++){printf("%c",p->data);p=p->next;}return 0;
}
int out_file(FILE*fp_w,linklist L){linklist p=L->next;for(int i=0;i<L->len;i++){if(fprintf(fp_w,"%c",p->data)<0){perror("fprintf");return -1;}p=p->next;}return 0;
}

head.h

#ifndef __HEAD_H__
#define __HEAD_H__
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<pthread.h>
#include<sys/wait.h>
#include<signal.h>
typedef char datatype;
typedef struct node{union{int len;datatype data;};struct node* next;
}*linklist;linklist create_head();
linklist create_linknode(datatype key);
int  insert(linklist L,datatype key);
int out_file(FILE*fp_w,linklist L);
int out_put(linklist L);
#endif

2写两个.c文件,要求用无名管道实现进程间通信,第一个进程输入三个边长,第二个线程输出面积

1.c

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<pthread.h>
#include<sys/wait.h>
#include<signal.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>
int main(int argc, const char *argv[])
{char flags=0;int pfd[2];if(pipe(pfd)<0){perror("pipe");return -1;}char std[2];std[0]=pfd[0];std[1]=pfd[1];int arg[3]={0};pid_t pid=fork();if(pid>0){
agi:printf("Please input data>>");scanf("%d %d %d",&arg[0],&arg[1],&arg[2]);if(arg[0]+arg[1]>arg[2]&&arg[0]+arg[2]>arg[1]&&arg[1]+arg[2]>arg[0]){printf("Input success\n");flags=1;if(write(pfd[1],&flags,1)<0){perror("write");return -1;}flags=0;printf("send success\n");write(pfd[1],&(arg[0]),4);printf("send a\n");write(pfd[1],&(arg[1]),4);printf("send b\n");write(pfd[1],&(arg[2]),4);printf("send c\n");int s=0;while(1){wait(&s);if(s!=0){goto end;}}}else{fprintf(stderr,"Intput error\n");goto agi;}}else if(pid==0){while(1){if(read(pfd[0],&flags,1)<0){perror("read");return -1;}if(flags==1){printf("exec success\n");execlp("./2","1",&std[0],&std[1],NULL);}}}
end:		return 0;
}

 2.c

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<pthread.h>
#include<sys/wait.h>
#include<signal.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>
#include<math.h>
int main(int argc, const char *argv[])
{int a,b,c;int p_r=*(argv[1]);int p_w=*(argv[2]);if(read(p_r,&a,4)<0){perror("reaed");return -1;}if(read(p_r,&b,4)<0){perror("reaed");return -1;}if(read(p_r,&c,4)<0){perror("reaed");return -1;}int p=(a+b+c)/2;int S=sqrt(p*(p-a)*(p-b)*(p-c));printf("child S=%d\n",S);exit(S);
}

3 进程间并发交互 有名管道

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include<unistd.h>
#include<errno.h>
#include<fcntl.h>
int main(int argc, const char *argv[])
{if(mkfifo("./fifo1",0664)<0){if(errno!=17){perror("mkfifo");return -1;}}printf("create fifo1 success\n ");int fd_w=open("./fifo1",O_WRONLY);printf("fd_w is open\n");int fd_r=open("./fifo2",O_RDONLY);printf("open file succsee fd_r=%d,fd_w=%d\n",fd_r,fd_w);char buf[128]="";pid_t pd=fork();while(1){if(pd>0){printf("please input>>");fgets(buf,sizeof(buf),stdin);buf[sizeof(buf)-1]=0;if(write(fd_w,buf,sizeof(buf))<0){perror("write");return -1;}if(strcmp(buf,"quit\n")==0)break;printf("input success\n");}else if(pd==0){bzero(buf,sizeof(buf));if(read(fd_r,buf,sizeof(buf))<0){perror("read");return -1;}if(strcmp(buf,"quit\n")==0)break;printf("B input:%s",buf);}}close(fd_w);close(fd_r);return 0;
}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<errno.h>
#include<fcntl.h>
int main(int argc, const char *argv[])
{if(mkfifo("./fifo2",0664)<0){if(errno!=17){perror("mkfifo");return -1;}}printf("create fifo2 success\n");int fd_r=open("./fifo1",O_RDONLY);printf("fd_r if open\n");int fd_w=open("./fifo2",O_WRONLY);printf("open file succsee fd_r=%d,fd_w=%d\n",fd_r,fd_w);char buf[128]="";pid_t pd=fork();while(1){if(pd>0){bzero(buf,sizeof(buf));if(read(fd_r,buf,sizeof(buf))<0){perror("read");return -1;}if(strcmp(buf,"quit\n")==0)break;printf("A input:%s",buf);}else if(pd==0){printf("please input>>");fgets(buf,sizeof(buf),stdin);buf[sizeof(buf)-1]=0;if(write(fd_w,buf,sizeof(buf))<0){perror("write");return -1;}if(strcmp(buf,"quit\n")==0)break;printf("input success\n");}}close(fd_w);close(fd_r);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/733028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文读懂MySQL7大日志(slow、redo、undo、bin、relay、general、error)

Slow Log 简介 用于记录执行时间超过指定值的 SQL 语句的详细信息&#xff0c;多用于调试和监控。 配置 因为开启会略微影响性能&#xff0c;所以默认没有开启&#xff0c;所以需要配置。 查看是否开启 show variables like %slow%; ------------------------------------…

计算机找不到api-ms-win-core-path-l1-1-0的5种解决方法

在计算机使用过程中&#xff0c;我们可能会遇到各种问题&#xff0c;其中之一就是找不到某些系统文件。最近&#xff0c;许多用户反映他们在使用电脑时遇到了“找不到api-ms-win-core-path-l1-1-0文件”的问题。这个问题通常出现在Windows操作系统中&#xff0c;可能会影响到一…

Java外观模式源码剖析及使用场景

外观模式 一、介绍二、家庭影院项目案例使用三、Java API或框架中应用分析三、Spring框架ApplicationContext源码 一、介绍 外观模式(Facade Pattern)是一种结构型设计模式,它为子系统中的一组接口提供了一个统一的高层接口,使得子系统更加容易使用。外观模式定义了一个高层接…

leetcode:二叉树的左右子树反转的递归和迭代的C++实现

问题描述 给定一个二叉树&#xff0c;将其每个节点的左右子树进行反转。 解决方案 以下是 C 代码实现&#xff1a; TreeNode* invertTree(TreeNode* root) {if (root nullptr) {return nullptr;}// 交换当前节点的左右子树TreeNode* temp root->left;root->left r…

C语言转义字符:一文打尽

转义字符 1. 前言2. 预备知识2.1 打印格式2.2 进制转换2.3 ASCII码 3. 什么是转义字符4. 常见的转义字符4.1 \?4.2 \4.3 \"4.4 \\4.5 \dddddd表示1到3个八进制数字4.6 \xdddd表示1到2个十六进制数字4.7 其他转义字符 5. 一道笔试题6. 一个小插曲 1. 前言 大家好&#xf…

DFS和BFS以及练习题目(未完待续)

DFS和BFS 温馨提示&#xff1a;学习dfs之前最好先了解一下递归的思想。 递归思想 斐波那契 题目分析 题目代码 import java.util.Scanner; public class Main{static long dp[]; public static void main(String[] args) {Scanner scanner new Scanner(System.in);int t…

吴恩达deeplearning.ai:倾斜数据集的误差指标精确率、召回率

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai专栏 文章目录 倾斜数据集的误差指标罕见病预测精确率和召回率 精确率和召回率的权衡精确率和召回率的矛盾关系 F1算法 倾斜数据集的误差指标 在神经网络中&#xff0c;如果你的数据集中正例和负…

CSS样式中长度单位含义解析:rpx、px、vw、vh、em、rem、pt

在 CSS 样式中&#xff0c;有几种常见的长度单位&#xff0c;包括 rpx 、 px 、 vw 和 vh 等&#xff0c;含义解析如下&#xff1a; 1 . rpx &#xff08;响应像素&#xff09;&#xff1a; 是微信小程序中的一种相对长度单位&#xff0c;可以根据屏幕宽度进行自适应缩放。 1rp…

PTA 对于下列程序,正确的是() 。void f(int *p){ *p = 5;}int main(void){ int a, *p; a = 10;

对于下列程序&#xff0c;正确的是&#xff08;&#xff09; 。 void f(int *p) {*p 5; } int main(void) {int a, *p;a 10;p &a;f(p);printf(“%d”, (*p));return 0; }A.5 B.6 C.10 D.11 答&#xff1a;A 解析&#xff1a;这里考察当是指针作为函数的参数。这里将 p …

python脚本批量关闭exe文件

python脚本批量关闭exe文件 1、安装psutil库 pip install psutil2、示例代码 """ @contact: 微信 1257309054 @file: main.py @time: 2024/3/9 21:16 @author: LDC """ import os import time import psutildef is_process_running(process_n…

docker删除、停止所有容器或镜像

docker删除、停止所有容器或镜像 列出所有的容器 ID docker ps -aq停止所有容器 docker stop $(docker ps -aq)删除所有容器 docker rm $(docker ps -aq)删除所有镜像 docker rmi $(docker images -aq)

算法之对于算法的想法

小插曲 很早就参加过头条的面试&#xff0c;真的很早以前&#xff0c;头条那时还不是很火&#xff0c;自己的首先也不是头条。就知道对算法特别的重视&#xff0c;现实也的确如此。记得还是面对面的面试&#xff0c; 忘记一面的算法题目了&#xff0c;不过当时是有思路的&…

Codeforces Round 719 (Div. 3)除F2题外补题报告

Codeforces Round 719 Div. 3 除F2题外补题报告 得分情况补题情况错题分析C题题目大意初次思路正解思路正解代码错误原因 D题题目大意初次思路正解思路正解代码错误原因 E题题目大意初次思路正解思路正解代码 F1题题目大意正解思路正解代码 G题题目大意正解思路正解代码 得分情…

EDA 许可证调度

背景 在芯片设计和HPC行业EDA软件的许可证是很昂贵的数据资源&#xff0c;如何高效利用许可证以及计算资源是系统管理员需要认真思考的问题。 商用解决方案 LSF是芯片和HPC行业流行的调度方案&#xff0c;LSF产品家族包含了许可证调度的功能。它提供了许可证管理和调度功能&…

开发知识点-C++之win32与NT内核

win32 Windows MFC编程 常用API汇总EnumWindows()函数UpdateData()函数static与 单例 设计模式函数原型:BOOL WINAPI SetConsoleTitle(__in LPCTSTR lpConsoleTitle);HWND 是一个基本类型 表示窗口句柄FindWindow函数SendMessage函数 将指定的消息发送到一个或多个窗口PostMes…

Matlab|配电网智能软开关(sop)规划模型

目录 1 主要内容 目标函数 2 部分程序 3 程序结果 3.1 sop选址定容优化模型 3.2 对比算例&#xff08;不含sop&#xff09; 4 下载链接 1 主要内容 该程序参考文献《基于改进灵敏度分析的有源配电网智能软开关优化配置》&#xff0c;采用二阶锥算法&#xff0c;以改进的…

蓝桥杯-最大距离

根据题意直接写出来就行。 简单题就话不多说上代码了 #include <iostream> #include <cmath> using namespace std; int main() {int n;cin>>n;int a[1000]{0};for(int i0;i<n;i){cin>>a[i];}int temp 0;int dis 0;for(int i0;i<n-1;i)for(…

JMeter—逻辑控制器

JMeter逻辑控制器 JMeter逻辑控制器可以对元件的执行逻辑进行控制&#xff0c;除仅一次控制器外&#xff0c;其他可以嵌套别的种类的逻辑控制器  一、ForEach控制器 定义一个循环规则&#xff0c;关键参数说明&#xff1a; 输入变量前缀&#xff1a;可以在“用户自定义的变量…

读书笔记:《思考 . 快与慢》- 3 过度自信与决策错误

《思考 . 快与慢》 [美] 丹尼尔 . 卡尼曼 著 胡晓姣 李爱民 何梦莹 译 这本书会改变你的思考方式 叙事谬误&#xff0c;用来描述有缺憾的往事是如何影响我们的世界观和我们对未来的预期的 能够吸引人们眼球的那些说法往往很通俗易懂&#xff0c;具体而不抽象 人类常会…

蓝桥杯刷题(二)

参考大佬代码&#xff1a;&#xff08;区间合并二分&#xff09; import os import sysn, L map(int, input().split()) # 输入n,len arr [list(map(int, input().split())) for _ in range(n)] # 输入Li,Si def check(Ti, arr, L)->bool:sec [] # 存入已打开的阀门在…