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

作业社区

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

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

枝wenz_fpJNR0 的学生作业:

#include #include #include #include #include #include // 错误处理函数 void error_handle(char *msg) { perror(msg); exit(EXIT_FAILURE); } // 信号处理函数 void signal_handler(int signum) { fprintf(stdout, "子进程2: 收到信号%s\n", strsignal(signum));//打印子进程2收到的信号名称 } int main(int argc, char const *argv[]) { pid_t cpid; // 注册信号处理函数signal_handler if(signal(SIGUSR2, signal_handler) == SIG_ERR) { error_handle("[ERROR] signal(): 子进程2失败!\n"); } // 创建子进程1 cpid=fork(); if(cpid==-1) { error_handle("[ERROR] fork(): 子进程1失败!\n"); }else if(cpid==0) { //子进程1 fprintf(stdout, "子进程1: %d正在运行...\n", getpid());//打印子进程1的pid pause();//暂停子进程1,等待父进程发送信号 exit(EXIT_SUCCESS); }else if (cpid > 0) { //父进程 sleep(1);//等待1秒 fprintf(stdout, "父进程: %d向子进程1发送信号\n", getpid());//打印父进程的pid kill(cpid, SIGUSR1);//向子进程1发送信号SIGUSR1 // 等待子进程1结束 wait(NULL);//等待子进程1结束 fprintf(stdout, "父进程: %d子进程1结束\n", getpid());//打印父进程的pid // 创建子进程2 cpid=fork(); if(cpid==-1) { error_handle("[ERROR] fork(): 子进程2失败!\n"); } else if(cpid==0) { //子进程2 fprintf(stdout, "子进程2: %d正在运行...\n", getpid());//打印子进程2的pid pause();//暂停子进程2,等待父进程发送信号 exit(EXIT_SUCCESS); } else if (cpid > 0) { //父进程 sleep(1);//等待1秒 fprintf(stdout, "父进程: %d向子进程2发送信号\n", getpid());//打印父进程的pid kill(cpid, SIGUSR2);//向子进程2发送信号SIGUSR2 // 等待子进程2结束 wait(NULL);//等待子进程2结束 fprintf(stdout, "父进程: %d子进程2结束\n", getpid());//打印父进程的pid // 退出父进程 fprintf(stdout, "父进程: %d退出\n", getpid());//打印父进程的pid exit(EXIT_SUCCESS); } } return 0; }

得分 100
学习任务

枝wenz_fpJNR0 的学生作业:

#include #include #include #include #include #include int main(int argc, char const *argv[]) { pid_t cpid; cpid=fork(); if(cpid == -1){ perror("[ERROR] fork()"); exit(EXIT_FAILURE); }else if(cpid == 0){ // 子进程 fprintf(stdout,"子进程ID1: %d 正在运行.\n", getpid());//打印子进程ID raise(SIGSTOP);//发送SIGSTOP信号,使子进程暂停 fprintf(stdout,"子进程ID1: %d 已暂停.\n", getpid());//打印子进程ID exit(EXIT_SUCCESS); }else if (cpid > 0) { int ret; sleep(1);//等待1秒,确保子进程先暂停 printf("父进程发送 SIGKILL 给子进程1 (PID: %d)\n", cpid); ret=kill(cpid,SIGKILL);//发送SIGKILL信号,使子进程终止 if (ret == 0) { printf("子进程1 (PID: %d) 已被终止.\n", cpid); } else { perror("kill 子进程1 失败"); } waitpid(cpid, NULL, 0);//等待子进程结束 // 创建子进程2 cpid = fork(); if(cpid == -1){ perror("[ERROR] fork()"); exit(EXIT_FAILURE); }else if(cpid == 0){ // 子进程2 fprintf(stdout,"子进程2 ID: %d 正在运行.\n", getpid());//打印子进程2 ID raise(SIGSTOP);//发送SIGSTOP信号,使子进程2暂停 fprintf(stdout,"子进程2 ID: %d 已暂停.\n", getpid());//打印子进程2 ID exit(EXIT_SUCCESS); }else if (cpid > 0) { // 父进程 sleep(1);//等待1秒,确保子进程2先暂停 printf("父进程发送 SIGKILL 给子进程2 (PID: %d)\n", cpid); ret = kill(cpid, SIGKILL);//发送SIGKILL信号,使子进程2终止 if (ret == 0) { printf("子进程2 (PID: %d) 已被终止.\n", cpid); } else { perror("kill 子进程2 失败"); } waitpid(cpid, NULL, 0);//等待子进程2结束 fprintf(stdout,"父进程 ID: %d 退出.\n", getpid());//打印父进程 ID exit(EXIT_SUCCESS); } } return 0; }

得分 100
学习任务

枝wenz_fpJNR0 的学生作业:

#include #include #include #include #include #include #include #include #define FIFO_NAME "./fifo" void error_exit(char *msg) { perror(msg); exit(EXIT_FAILURE); } int main(int argc, char const *argv[]) { int r_fd; int ret; int rbyte; char read_buf[64]; ret=access(FIFO_NAME, F_OK);//检查FIFO_NAME是否存在 if(ret == -1) { mkfifo(FIFO_NAME, 0633);//创建FIFO_NAME } r_fd = open(FIFO_NAME, O_RDONLY);//打开FIFO_NAME if(r_fd == -1) { error_exit("[ERROR] open() :"); } // 从FIFO_NAME读取数据 rbyte=read(r_fd, read_buf, sizeof(read_buf)); if(rbyte > 0)//如果读取到数据 { read_buf[rbyte] = '\0';//添加结束符 printf("current time: %s\n", read_buf); } close(r_fd);//关闭FIFO_NAME return 0; } #include #include #include #include #include #include #include #include #define FIFO_NAME "./fifo" void error_exit(char *msg) { perror(msg); exit(EXIT_FAILURE); } // 获取当前时间的字符串表示,格式为YYYY-MM-DD HH:MM:SS` void get_current_time_str(char *time_str, size_t size) { time_t t = time(NULL); struct tm *tm = localtime(&t); char temp_buf[32]; // 格式化时间(一定够长) strftime(temp_buf, sizeof(temp_buf), "%Y-%m-%d %H:%M:%S", tm); // 安全复制,自动截断 + 强制补结束符 snprintf(time_str, size, "%s", temp_buf); } int main(int argc, char const *argv[]) { int fd; char time_str[64]; int ret; int wbyte; ret=access(FIFO_NAME, F_OK);//检查FIFO_NAME是否存在 if(ret == -1) { mkfifo(FIFO_NAME, 0633);//创建FIFO_NAME } fd = open(FIFO_NAME, O_WRONLY);//打开FIFO_NAME if(fd == -1) { error_exit("[ERROR] open() :"); } // 向FIFO_NAME写入当前时间 get_current_time_str(time_str, sizeof(time_str)); // 写入当前时间 wbyte=write(fd,time_str, strlen(time_str));//写入当前时间 if(wbyte == -1) { error_exit("[ERROR] write() :"); } close(fd);//关闭FIFO_NAME return 0; }

微信客服

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

帮助反馈 APP下载

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

公众号

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