在一个进程中,创建一个子线程。
主线程负责:向文件中写入数据
子线程负责:从文件中读取数据
要求使用线程的同步逻辑,
保证一定在主线程向文件中写入数据成功之后,
子线程才开始运行,去读取文件中的数据
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <dirent.h>
#include <wait.h>
#include <pthread.h>
char buf[100] = {0};
int flag = 0;
void *Son_Thread(void *arg)
{
while(1) //不断从子线程中读取数据
{
while(flag == 0);
FILE *rfp = fopen("./tool_WR.c","r");
if(rfp == NULL)
{
perror("fopen error");
return Son_Thread;
}
fread(buf,1,100,rfp);
printf("子线程:\n");
printf("输出:%s\n",buf);
bzero(buf,sizeof(buf));
sleep(3);
fclose(rfp);
system("clear");
flag = 0;
}
}
int main(int argc, const char *argv[])
{
pthread_t tid;
int ret =pthread_create(&tid,NULL,Son_Thread,NULL);
if(ret != 0)
{
perror("pthread_create error");
return 1;
}
while(1) //不断的从父线程中读取数据
{
while (flag == 1);
FILE *wfp = fopen("./tool_WR.c","w+");
if(wfp == NULL)
{
perror("fopen error");
return 1;
}
printf("父进程:\n");
printf("请输入:>");
//scanf("%s",buf);
fgets(buf,100,stdin);
while(getchar() != '\n');
//fwrite(buf,1,100,wfp);
fputs(buf,wfp);
bzero(buf,sizeof(buf));
fclose(wfp);
flag = 1;
//pthread_join(tid,NULL);
}
}