第一题
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <dirent.h>
#include <sys/wait.h>
#include <pthread.h>
#include <semaphore.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <arpa/inet.h>typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;int apple=0;
sem_t p;void* run(void* arg)
{while(1){sem_wait(&p);while(apple>=8){apple-=8;printf("消费者消费了8个苹果,现在有%d个苹果\n",apple);sleep(1);}sem_post(&p);}
}int main(int argc, const char *argv[])
{sem_init(&p,0,1);pthread_t id;pthread_create(&id,0,run,0);pthread_detach(id);while(1){sem_wait(&p);while(apple<8){apple+=3;printf("生产者生产了3个苹果,现在有%d个苹果\n",apple);sleep(1);}sem_post(&p);sleep(1);}return 0;
}
第二题
方法一
方法二
第三题
函数用途:从控制台读取一个字符,但不显示在 屏幕 上
getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回, getch返回值是用户输入的ASCII码,出错返回-1.输入的字符不会回显在屏幕上.