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

作业社区

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

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

慕尼黑0001808 的学生作业:

//探测用户是否已经输入,如果用户在3秒内没有输入则提示超时一次,如果超时三次程序自动结束。 #include #include #include #include #include #define TIMEOUT_SECOUNTS 3 #define MAX_TIMEOUTS 3 int timeout_count = 0; int input_reveived = 0; void timeout_handler(int signo) { timeout_count++; printf("\n超时,当前超时%d次\n",timeout_count); if(timeout_count >= MAX_TIMEOUTS){ printf("已超时%d次,父进程(pid=%d)超时退出\n",timeout_count,getpid()); exit(EXIT_SUCCESS); } input_reveived = 0; } void input_handler(int signo) { input_reveived = 1; } int main(int argc, char *argv[]) { char buffer[1024] = {0}; pid_t c_pid; signal(SIGALRM,timeout_handler); signal(SIGUSR1,input_handler); while(1){ printf("请在%d秒内尽快完成输入:",MAX_TIMEOUTS); fflush(stdout); c_pid = fork(); if(-1 == c_pid){ perror("[ERROR]fork():"); exit(EXIT_FAILURE); } if(0 == c_pid){ if(fgets(buffer,sizeof(buffer),stdin) != NULL){ printf("你输入的是:%s",buffer); kill(getppid(),SIGUSR1); } exit(EXIT_SUCCESS); } alarm(TIMEOUT_SECOUNTS); pause(); alarm(0); kill(c_pid,SIGKILL); wait(NULL); if(1 == input_reveived){ break; } } printf("父进程(pid=%d正常退出\n)",getpid()); return 0; } 运行结果: linux@linux-VMware-Virtual-Platform:~/study/homework/10412$ gcc main.c linux@linux-VMware-Virtual-Platform:~/study/homework/10412$ ./a.out 请在3秒内尽快完成输入: 超时,当前超时1次 请在3秒内尽快完成输入: 超时,当前超时2次 请在3秒内尽快完成输入: 超时,当前超时3次 已超时3次,父进程(pid=76111)超时退出 linux@linux-VMware-Virtual-Platform:~/study/homework/10412$ ./a.out 请在3秒内尽快完成输入:hello 你输入的是:hello 父进程(pid=76121正常退出 )linux@linux-VMware-Virtual-Platform:~/study/homework/10412$ ./a.out 请在3秒内尽快完成输入: 超时,当前超时1次 请在3秒内尽快完成输入:hello 你输入的是:hello 父进程(pid=76124正常退出 )linux@linux-VMware-Virtual-Platform:~/study/homework/10412$

得分 100
学习任务

学渣小白 的学生作业:

练习1 1.上述图形星座的例子是线性表。 2.双子的前驱是:金牛,后继是:巨蟹 练习2 #include #include #include #define debug 0 #define maximum_number_of_exam_participants 3 #define DEBUG_PRINT(…) do { if(debug) printf(VA_ARGS); } while(0) /*赵一报名参加了数学,英语,政治(A,B,E)的考试 *钱二报名参加了生物,语文(C,D)的考试 *孙三报名参加了生物,政治,历史(C,E,F)的考试 *李四报名参加了语文,历史,数学(D,F,A)的考试 *周五报名参加了英语,历史(B,F)的考试。 *假设考试从上午8点考试,每个科目安排一个小时的时间。要求满足下面两个条件: *(1)每个考试都能顺利进行 *(2)尽可能短缩总体考试时间 问如何安排才能让总考试时间最短,最短是几个小时? */ //推论1:报名最多的是三门,说明最少需要排三场考试 //推论2:一共有六门考试,最多排六场考试 //推论3:至多两门考试同时进行。一共5个人已知每门至少有两人参考,至多两门考试同时进行即4-5人同时考试。如:不可能5门考试进行,已知每门至少有两人参考,5门则至少10人同时考试 //推论4:三次考试每次两门一起考开始逐步排除,如1.三次考试每次两门一起考,2.两次考试每次两门一起考,在单独考两门3.以次考试每次两门一起考,再单独考三门。 //假设赵一学号为1,钱二学号为2,孙三学号为3,李四学号为4,周五学号为5 //假设每门考试为一个数组,经过查询最多人数maximum_number_of_exam_participants的为3人同时考试,则设置所有考试最大人数为此数,如数学考试为int A[3]={1,4}; const int A[maximum_number_of_exam_participants]={1,4,0}; const int B[maximum_number_of_exam_participants]={1,5,0}; const int C[maximum_number_of_exam_participants]={2,3,0}; const int D[maximum_number_of_exam_participants]={3,4,0}; const int E[maximum_number_of_exam_participants]={1,3,0}; const int F[maximum_number_of_exam_participants]={3,4,5}; const int *p[6]={A,B,C,D,E,F}; int two_exams_are_taking_place_simultaneously(int *a,int *b){ for(int i=0;i

得分 100
学习任务

慕工程6300203 的学生作业:

write.c #include #include #include #include #include #include #include #define FIFO_PATHNAME "./fifo" // 设计两个没有血缘关系的进程,使用有名管道一个进程获取当前系统时间给另外一个进程 int main(int argc, char* argv[]) { struct tm *tm; time_t t; FILE *f_fifo; int ret; ret = access(FIFO_PATHNAME, F_OK); if (ret == 0) { unlink(FIFO_PATHNAME); } mkfifo(FIFO_PATHNAME, 0666); f_fifo = fopen(FIFO_PATHNAME, "w"); if (f_fifo == NULL) { perror("[ERROR] fopen(): "); exit(EXIT_FAILURE); } time(&t); tm = localtime(&t); int year = tm->tm_year + 1900; int month = tm->tm_mon + 1; fprintf(f_fifo, "%d-%d-%d %d:%d:%d", year, month, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec); fclose(f_fifo); return 0; } read.c #include #include #include #include #include #include #include #define FIFO_PATHNAME "./fifo" // 设计两个没有血缘关系的进程,使用有名管道一个进程获取当前系统时间给另外一个进程 int main(int argc, char* argv[]) { FILE *f_fifo; int ret; char buffer[64]; ret = access(FIFO_PATHNAME, F_OK|R_OK); if (ret == -1) { perror("[ERROR] access():"); exit(EXIT_FAILURE); } f_fifo = fopen(FIFO_PATHNAME, "r"); if (f_fifo == NULL) { perror("[ERROR] fopen(): "); exit(EXIT_FAILURE); } while (1) { if (fgets(buffer, 64, f_fifo) == NULL) { break; } fputs(buffer, stdout); } fclose(f_fifo); return 0; }

得分 100
学习任务

慕尼黑0001808 的学生作业:

//创建两个子进程 A 与 B,给子进程 A 发送 SIGUSR1 信号, 子进程 B 发送 SIGUSR2 信号, //子进程A的处理方式设置为默认, //子进程B的处理方式为使用自定义处理函数,并打印接收的信号的字符串信息(使用strsignal() 函数) #include #include #include #include #include #include void my_signal_fun(int sig) { fprintf(stdout,"Receive:%s\n",strsignal(sig)); } int main(int argc, char *argv[]) { pid_t a_pid,b_pid; a_pid = fork(); b_pid = fork(); if(SIG_ERR == signal(SIGUSR2,my_signal_fun)){ perror("signal():"); exit(EXIT_FAILURE); } if(-1 == a_pid || -1 == b_pid){ perror("fork():"); exit(EXIT_FAILURE); } if(0 == a_pid){ printf("进程a(pid=%d)运行中...\n",getpid()); pause(); printf("进程a(pid=%d)正常退出\n",getpid()); exit(EXIT_SUCCESS); } if(0 == b_pid){ printf("进程b(pid=%d)运行中...\n",getpid()); pause(); printf("进程b(pid=%d正常退出\n)",getpid()); exit(EXIT_SUCCESS); } kill(a_pid,SIGUSR1); wait(NULL); kill(b_pid,SIGUSR2); wait(NULL); printf("父进程(pid=%d)退出\n",getpid()); return 0; } 运行结果: linux@linux-VMware-Virtual-Platform:~/study/homework/10410$ gcc main.c linux@linux-VMware-Virtual-Platform:~/study/homework/10410$ ./a.out 进程b(pid=41259)运行中... 进程a(pid=41260)运行中... Receive:User defined signal 2 进程b(pid=41259正常退出 )父进程(pid=41257)退出 linux@linux-VMware-Virtual-Platform:~/study/homework/10410$

微信客服

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

帮助反馈 APP下载

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

公众号

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