为了账号安全,请及时绑定邮箱和手机立即绑定

作业社区

探索学习新天地,共享知识资源!

0 提交作业
0 布置作业
0 满分作业
得分 100
学习任务

别摸我的键盘 的学生作业:

sem.h #ifndef __SEM_UTIL__ #define __SEM_UTIL__ #include #include #include #include #include #include #include #include #include #include #include #define PATH "." #define PROID 88 union semun{ int val; unsigned short* array; }; /** * 创建并初始化信号量集合 */ extern int sem_create(int num, unsigned short sem_init_vals[]); /** * 信号量占用 */ extern int sem_p(int sem_id, int semnum); /** * 信号量释放 */ extern int sem_v(int sem_id, int semnum); /** * 信号量集合删除 */ extern int sem_del(int sem_id); /** *获取当前时间字符串 format : yyyy-MM-dd hh:mm:ss */ extern char * gettime(); #endif sem.c #include "sem.h" int sem_create(int num, unsigned short sem_init_vals[]){ key_t key = ftok(PATH, PROID); if(key == -1){ perror("ftok()"); exit(EXIT_FAILURE); } int sem_id = semget(key, num, IPC_CREAT|0666); if(key == -1){ perror("semget()"); exit(EXIT_FAILURE); } union semun se; se.array = sem_init_vals; int ret = semctl(sem_id, 0, SETALL, se); if(key == -1){ perror("semctl()"); exit(EXIT_FAILURE); } return sem_id; } int sem_p(int sem_id, int semnum){ struct sembuf semb; semb.sem_num = semnum; semb.sem_op = -1; semb.sem_flg = SEM_UNDO; return semop(sem_id, &semb, 1); } int sem_v(int sem_id, int semnum){ struct sembuf semb; semb.sem_num = semnum; semb.sem_op = 1; semb.sem_flg = SEM_UNDO; return semop(sem_id, &semb, 1); } int sem_del(int sem_id){ return semctl(sem_id, 0, IPC_RMID, NULL); } char * gettime(){ time_t cur_time; struct tm *local_tm; static char buf[20]; cur_time = time(NULL); if(cur_time == ((time_t) - 1)){ fprintf(stderr, "failed to obtain the current time.\n"); return NULL; } local_tm = localtime(&cur_time); if(local_tm == NULL){ fprintf(stderr, "failed to convert the time.\n"); return NULL; } sprintf(buf,"%04d-%02d-%02d %02d:%02d:%02d",local_tm->tm_year + 1900, local_tm->tm_mon+1, local_tm->tm_mday, local_tm->tm_hour, local_tm->tm_min, local_tm->tm_sec); return buf; } Makefile all: @gcc sem.c main.c -o main clean: @rm -rf main mian.c #include "sem.h" #define SEM_NUM 2 #define SEM_NUM_P 0 #define SEM_NUM_C 1 #define WRITE_FILE "./time" #define MAX 64 int main(int argc, const char *argv[]) { FILE *w_file; char buf[MAX]; int idx = 0; w_file = fopen(WRITE_FILE, "w+"); if(w_file == NULL){ perror("fopen()"); exit(EXIT_FAILURE); } unsigned short sem_init_vals[] = {1,0}; int sem_id = sem_create(SEM_NUM, sem_init_vals); pid_t pid = fork(); if(pid == -1){ perror("fork()"); exit(EXIT_FAILURE); }else if(pid == 0){ while(idx != 11){ sem_p(sem_id, SEM_NUM_C); memset(buf, 0, MAX); snprintf(buf, MAX, "%s", gettime()); //buf = t; //strcpy(buf, t); fwrite(buf,sizeof(char), strlen(buf), w_file); fflush(w_file); sem_v(sem_id, SEM_NUM_P); idx ++; } fclose(w_file); exit(EXIT_SUCCESS); }else if(pid > 0){ while(idx != 11){ sem_p(sem_id, SEM_NUM_P); memset(buf, 0, MAX); snprintf(buf, MAX, "%d,\n"); fwrite(buf, sizeof(char), strlen(buf), w_file); fflush(w_file); sem_v(sem_id, SEM_NUM_P); sleep(1); idx ++; } fclose(w_file); wait(NULL); sem_del(sem_id); exit(EXIT_SUCCESS); } return 0; }

微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号