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;
}