> 用信号量的方式,创建两个线程 A B
>
> 1. A线程读取文件中的内容
> 2. B线程打印A读取到的内容到终端,
> 3. 全部打印完毕后,结束进程;
> 4. 现象类似cat一个文件
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <stdlib.h>
sem_t sem1,sem2;
char buff[32] = "";
void* handle(void* arg)
{
while(1)
{
sem_wait(&sem2);
printf("%s",buff);
sem_post(&sem1);
}
}
int main(int argc, const char *argv[])
{
FILE* fp = fopen(argv[1],"r");
if(fp == NULL)
{
perror("fopen");
return -1;
}
if(sem_init(&sem1,0,1) != 0)
{
perror("sem_init");
return -1;
}
if(sem_init(&sem2,0,0) != 0)
{
perror("sem_init");
return -1;
}
pthread_t tid;
if(pthread_create(&tid,NULL,handle,NULL) != 0)
{
perror("pthread_create");
return -1;
}
while(1)
{
sem_wait(&sem1);
if(fgets(buff,sizeof(buff),fp) == NULL)
{
//perror("fgets");
exit(0);
}
sem_post(&sem2);
}
return 0;
}