当前位置: 首页 > article >正文

Linux标准IOday4

1:思维导图

2: 创建2个子进程

        父进程负责:   向文件中写入数据
        2个子进程负责:   从文件中读取数据
        要求:  一定保证1号子进程先读取,2号子进程后读取
        使用文件IO去实现

#include <stdio.h>
 #include <string.h>
 #include <unistd.h>
 #include <stdlib.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <pthread.h>
 #include <semaphore.h>
 #include <wait.h>
 #include <signal.h>
 #include <sys/socket.h>
 #include <arpa/inet.h>
 #include <sys/socket.h>
 #include <sys/ipc.h>
 #include <sys/sem.h>
 #include <semaphore.h>
 #include <sys/msg.h>
 #include <sys/shm.h>
 #include <sys/un.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;	
int main(int argc, const char *argv[])
{
	pid_t pid=fork();
	if(pid>0)
	{
		int wfd=open("1.txt",O_WRONLY | O_CREAT | O_TRUNC,0666);
		char arr[100]="hello world";
		write(wfd,arr,sizeof(arr));
		close(wfd);
		pid_t id=fork();
		if(id>0)
		{
			waitpid(-1,NULL,0);
			waitpid(-1,NULL,0);
		}
		else if(id==0)
		{
			int rfd2=open("1.txt",O_RDONLY);
			char crr[100]="";
			read(rfd2,crr,sizeof(crr));
			printf("2号子进程:%s\n",crr);
			close(rfd2);
		}
	}
	else if(pid==0)
	{
		int rfd1=open("1.txt",O_RDONLY);
		char brr[100]="";
		read(rfd1,brr,sizeof(brr));
		printf("1号子进程:%s\n",brr);
		close(rfd1);
	}
	return 0;
}


3:创建一个线程(1个主线程和一个分支线程)
        主线程负责:  输入三角形的三条变长
        分支线程负责:  计算三角形的面积(自己百度海伦公式)海伦公式里面要用到开平方 sqrt函数,使用sqrt函数编译的时候需要在编译的最后加上-lm
        这里随便怎么整,一定保证先输入数据,再计算面积

#include <stdio.h>
 #include <string.h>
 #include <unistd.h>
 #include <stdlib.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <pthread.h>
 #include <semaphore.h>
 #include <wait.h>
 #include <signal.h>
 #include <sys/socket.h>
 #include <arpa/inet.h>
 #include <sys/socket.h>
 #include <sys/ipc.h>
 #include <sys/sem.h>
 #include <semaphore.h>
 #include <sys/msg.h>
 #include <sys/shm.h>
 #include <sys/un.h>
#include <math.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;
int a,b,c,flag=0;
void* thread_main(void* arg)
{
	while(1)
	{
		if(flag==1)
		{
			float p=(a+b+c)/2.0;
			double s=sqrt(p*(p-a)*(p-b)*(p-c));
			printf("三角形的面积为%lf\n",s);
			break;
		}
	}
}
int main(int argc, const char *argv[])
{
	pthread_t id;
	pthread_create(&id,0,thread_main,0);
	if(flag==0)
	{
		printf("请输入三角形的三条边长:");
LOOP:	scanf("%d%d%d",&a,&b,&c);
		if(a+b<=c||a+c<=b||b+c<=a)
		{
			printf("构不成三角形,请重新输入!\n");
			goto LOOP;
		}
		flag=1;
	}
	pthread_join(id,NULL);
	return 0;
}


http://www.kler.cn/a/502565.html

相关文章:

  • FastDDS安装测试记录
  • Linux第二课:LinuxC高级 学习记录day01
  • Facebook 隐私变革之路:回顾与展望
  • 介绍PyTorch张量
  • Github 2025-01-11 Rust开源项目日报 Top10
  • 《机器学习》——TF-IDF(关键词提取)
  • 设计模式 行为型 备忘录模式(Memento Pattern)与 常见技术框架应用 解析
  • 深入解读五种常见 Java 设计模式及其在 Spring 框架中的应用
  • 关于在协程内使用 Uvicorn 无法正常开启 Web 服务的分析处理
  • 202409 青少年软件编程等级考试C/C++ 二级真题答案及解析(电子学会)
  • 计算机网络之---IP协议
  • 数据结构二叉树-C语言
  • Windows的Redis查看自己设置的密码并更改设置密码
  • 神经网络中的“池化”是什么意思?
  • MySQL 与 Redis 的数据一致性问题
  • Linux自定义分隔符
  • 【14】模型训练自制数据集前的一些数据处理操作
  • 基于springboot果蔬供应链信息管理平台
  • Linux 下 Vim 环境安装踩坑问题汇总及解决方法(重置版)
  • AI学习路线图-邱锡鹏-神经网络与深度学习
  • 双线性插值算法:原理、实现、优化及在图像处理和多领域中的广泛应用与发展趋势(二)
  • 【数据库】Mysql精简回顾复习
  • 【人工智能】自然语言生成的前沿探索:利用GPT-2和BERT实现自动文本生成与完形填空
  • python-leetcode-长度最小的子数组
  • C#版 软件开发6大原则与23种设计模式
  • 【理论】测试框架体系TDD、BDD、ATDD、MBT、DDT介绍