1:开启一个线程
主线程中:使用标准IO,向一个文件中写入任意数据
分支线程:使用标准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;
void task1(){
FILE* fp=fopen("demo1.txt","w");
fprintf(fp,"hello");
fflush(fp);
fclose(fp);
}
void task2(){
FILE* fp=fopen("demo1.txt","r");
char buffer[256]="";
fscanf(fp,"%s",buffer);
printf("read:%s \n",buffer);
fclose(fp);
}
void* thread_main(void* arg)
{
task2();
return NULL;
}
int main(int argc, const char *argv[])
{
pthread_t id;
//主线完成写入
task1();
//创建分支线程读取任务
pthread_create(&id,0,thread_main,0);
//等待支线完成
pthread_join(id,NULL);
return 0;
}
2:创建2子个进程 使用文件IO去实现
父进程负责:向文件中写入数据
2个子进程负责:从文件中读取数据
要求:一定保证1号子进程先读取,2号子进程后读取
#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;
void write_to_file(const char*filename)
{
int fd=open(filename,O_WRONLY|O_CREAT|O_TRUNC,0644);
const char* data="hello world\n";
ssize_t byte_written=write(fd,data,strlen(data));
printf("父进程写入数据\n");
close(fd);
}
void read_from(const char* filename,int process_id)
{
int fd =open (filename,O_RDONLY);
char buffer[256];
ssize_t byte_read= read(fd,buffer,sizeof(buffer)-1);
printf("子进程%d 读取:%s\n",process_id,buffer);
close(fd);
}
int main(int argc, const char *argv[])
{
const char* filename="demo2.txt";
write_to_file(filename);
//创建子进程1
pid_t pid1=fork();
if(pid1==0)
{
read_from(filename,1);
exit(0);
}
//父进程等待 子进程1完成
waitpid(pid1,NULL,0);
//创建 子进程2
pid_t pid2=fork();
if (pid2==0)
{
read_from(filename,2);
exit(0);
}
//父进程 等子进程2完成
waitpid(pid2,NULL,0);
printf("全部完成\n");
return 0;
}
3:创建一个线程(1个主线程和一个分支线程)
主线程负责:输入三角形的三条变长
分支线程负责:计算三角形的面积(自己百度海伦公式) 海伦公式里面要用到开平方 sqrt函数,使用sqrt函数编译的时候需要在编译的最后加上 -lm
这里随便怎么整,一定保证先输入数据,再计算面积
#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;
typedef struct {
int a,b,c;
}Triangledata;
//输入三边长
void task1(Triangledata *data)
{
printf("输入三边长:\n");
scanf("%d %d %d",&data->a,&data->b,&data->c);
}
//计算面积
void task2(Triangledata *data)
{
int a=data->a,b=data->b,c=data->c;
if(a+b>c &&a+c>b &&b+c>a)
{
double s=(a+b+c)/2.0;
double area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("面积是%lf\n",area);
}else
{
printf("不能构成三角形\n");
}
}
//分支入口函数
void *thread_main(void* arg)
{
Triangledata *data=(Triangledata*)arg;
task2(data);
return NULL;
}
int main(int argc, const char *argv[])
{
pthread_t id;
Triangledata data;
//主线输入三边长
task1(&data);
//创建支线计算面积
pthread_create(&id,0,thread_main,&data);
//等支线完成
pthread_join(id,NULL);
return 0;
}
标签:typedef,include,struct,int,内附,void,linux,多线程,data
From: https://blog.csdn.net/weixin_56261190/article/details/145121827