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

作业社区

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

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

学无止境呀呀呀 的学生作业:

#include // 使用 EINTR 判断被信号打断 #include // 使用 printf、fgets、fdopen #include // 使用 EXIT_FAILURE/EXIT_SUCCESS #include // 使用 strlen、strcmp #include // 使用 pid_t 类型 #include // 使用 waitpid 等待子进程 #include // 使用 pipe、fork、write、close #define BUFFER_SIZE 1024 // 定义缓冲区大小,限制一次读写长度 static int write_all(int fd, const char *buf, size_t len) { // 保证写完全部数据 size_t off = 0; // 已写入的字节数 while (off < len) { // 还没写完就继续 ssize_t n = write(fd, buf + off, len - off); // 写剩余数据 if (n < 0) { // 写失败 if (errno == EINTR) { // 被信号中断 continue; // 重试写入 } return -1; // 其他错误直接返回失败 } off += (size_t)n; // 累加已写入字节 } return 0; // 全部写入成功 } int main(void) { int pipe_fd[2]; // 管道描述符:0 读端,1 写端 pid_t pid; // 保存 fork 返回的进程 ID char buffer[BUFFER_SIZE]; // 读写缓冲区 if (pipe(pipe_fd) == -1) { // 创建管道 perror("pipe"); // 打印错误原因 return EXIT_FAILURE; // 失败退出 } pid = fork(); // 创建子进程 if (pid < 0) { // fork 失败 perror("fork"); // 打印错误原因 return EXIT_FAILURE; // 失败退出 } if (pid == 0) { // 子进程分支 close(pipe_fd[1]); // 子进程关闭写端 FILE *in = fdopen(pipe_fd[0], "r"); // 将读端包装成 FILE* 便于 fgets if (!in) { // fdopen 失败 perror("fdopen"); // 打印错误原因 close(pipe_fd[0]); // 关闭读端避免泄漏 return EXIT_FAILURE; // 失败退出 } printf("[子进程] 等待数据...\n"); // 提示正在等待 while (fgets(buffer, sizeof buffer, in)) { // 按行读取管道内容 size_t len = strlen(buffer); // 计算行长度 if (len > 0 && buffer[len - 1] == '\n') { // 检查末尾换行 buffer[len - 1] = '\0'; // 去掉换行便于比较 } printf("[子进程] 收到数据: %s\n", buffer); // 打印收到内容 if (strcmp(buffer, "quit") == 0) { // 判断是否退出指令 printf("[子进程] 检测到 quit,准备退出。\n"); // 提示退出 break; // 退出读取循环 } } fclose(in); // 关闭流并同时关闭读端 printf("[子进程] 退出。\n"); // 子进程退出提示 return EXIT_SUCCESS; // 子进程正常退出 } close(pipe_fd[0]); // 父进程关闭读端 printf("[父进程] 请输入内容 (quit 退出):\n"); // 提示用户输入 while (fgets(buffer, sizeof buffer, stdin)) { // 从标准输入读取一行 size_t len = strlen(buffer); // 获取输入长度 int is_quit = (strcmp(buffer, "quit\n") == 0 || strcmp(buffer, "quit") == 0); // 判断是否为 quit if (write_all(pipe_fd[1], buffer, len) == -1) { // 写入管道 perror("write"); // 写入失败提示 break; // 停止循环 } if (is_quit) { // 如果是 quit printf("[父进程] 发送 quit,正在停止...\n"); // 提示退出 break; // 退出循环 } } close(pipe_fd[1]); // 关闭写端以发送 EOF waitpid(pid, NULL, 0); // 等待子进程结束 printf("[父进程] 退出。\n"); // 父进程退出提示 return EXIT_SUCCESS; // 父进程正常退出 }

得分 100
学习任务

慕盖茨7572105 的学生作业:

#include #include #include #define MAX 10 //实际学⽣的存储 struct student { char name[20]; int id; int age; }; typedef struct student datatype_t; typedef struct{ datatype_t buf[MAX]; //定义数组记录班级学⽣每个学⽣的信息。 int n; //学⽣实际到来的个数。 }seqlist_t; //1.为结构体在堆区申请空间, 用l保存 seqlist_t *create_empty_seqlist() { seqlist_t *l = NULL; l = (seqlist_t *)malloc(sizeof(seqlist_t)); if(NULL == l) { printf("malloc is fail!\n"); return NULL; } memset(l, 0, sizeof(seqlist_t)); l->n = 0; return l; } //2.判满 int is_full_seqlist(seqlist_t *l) { return l->n == MAX ? 1 : 0; } //3.插入数据 void insert_data_seqlist(seqlist_t *l, datatype_t data) { l->buf[l->n] = data; l->n ++; return ; } //4.输出数据 void printf_data_seqlist(seqlist_t *l) { int i = 0; printf("NAME\tID\tAGE\n"); for(i=0;ibuf[i].name, l->buf[i].id, l->buf[i].age); } return ; } int main() { seqlist_t *l = NULL; l = create_empty_seqlist(); datatype_t data; while(!is_full_seqlist(l)) { printf("Please input %d data [NAME\tID\tAGE] : ", MAX-l->n); scanf("%s%d%d", data.name, &data.id, &data.age); insert_data_seqlist(l, data); //scanf("%s%d%d", &(l->buf[l->n].name[0]), &(l->buf[l->n].id), &(l->buf[l->n].age)); } printf_data_seqlist(l); free(l); l = NULL; return 0; } Please input 10 data [NAME ID AGE] : a 1 10 Please input 9 data [NAME ID AGE] : b 2 20 Please input 8 data [NAME ID AGE] : c 3 30 Please input 7 data [NAME ID AGE] : d 4 40 Please input 6 data [NAME ID AGE] : e 5 50 Please input 5 data [NAME ID AGE] : f 6 60 Please input 4 data [NAME ID AGE] : g 7 70 Please input 3 data [NAME ID AGE] : h 8 80 Please input 2 data [NAME ID AGE] : i 9 90 Please input 1 data [NAME ID AGE] : j 10 100 NAME ID AGE a 1 10 b 2 20 c 3 30 d 4 40 e 5 50 f 6 60 g 7 70 h 8 80 i 9 90 j 10 100

微信客服

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

帮助反馈 APP下载

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

公众号

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