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

作业社区

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

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

浪潮君 的学生作业:

#include // 标准输入输出头文件(用于 printf、fgets 等) #include // 标准库头文件(用于 exit、EXIT_FAILURE 等) #include // 字符串操作函数(如 strcmp, strtok) #include // Unix 系统调用头文件(如 fork, execvp) #include // 等待子进程结束(wait 函数) #define MAX_CMD_LEN 128 // 用户输入命令最大长度 #define MAX_ARGS 10 // 命令最多支持的参数个数(包含命令本身) int main(void) { char input[MAX_CMD_LEN]; // 用于保存用户输入的命令行 // 主循环:持续运行 shell,直到用户输入 "exit" while (1) { // 打印 shell 提示符 printf("minishell> "); fflush(stdout); // 确保提示符立即显示(防止缓冲延迟) // 读取用户输入(阻塞等待,最大读取 MAX_CMD_LEN 字节) if (fgets(input, sizeof(input), stdin) == NULL) { // 若读取失败或遇到 EOF(如 Ctrl+D),退出循环 break; } // 去除结尾的换行符(fgets 会保留 \n) input[strcspn(input, "\n")] = '\0'; // 判断是否是退出命令 if (strcmp(input, "exit") == 0) { break; } // -------- 命令解析 -------- // 使用 strtok 将输入字符串按空格分割为多个参数 char *args[MAX_ARGS] = {0}; // 参数数组初始化为 NULL int arg_count = 0; // 参数计数器 // 提取第一个 token(命令本身) char *token = strtok(input, " "); while (token != NULL && arg_count < MAX_ARGS - 1) { args[arg_count++] = token; // 将参数保存到数组 token = strtok(NULL, " "); // 提取下一个参数 } args[arg_count] = NULL; // 参数列表末尾设置为 NULL,符合 execvp 要求 // -------- 创建子进程 -------- pid_t pid = fork(); // 创建子进程 if (pid < 0) { // 创建失败,打印错误信息 perror("fork failed"); continue; // 回到循环继续处理下一个输入 } if (pid == 0) { // -------- 子进程 -------- // 使用 execvp 执行命令(搜索 PATH 环境变量) execvp(args[0], args); // 若 execvp 执行失败,则继续执行下面代码 perror("exec failed"); exit(EXIT_FAILURE); // 子进程异常退出 } else { // -------- 父进程 -------- // 等待子进程结束,防止出现僵尸进程 wait(NULL); } } // Shell 主循环结束,打印退出信息 printf("退出 minishell。\n"); return 0; }

得分 100
学习任务

胡汉三66 的学生作业:

#include #include #include #include // bzore() #include // close() #include #include #include #include // TCP客户端连接 // ./a.out ip port int main(int argc, const char *argv[]) { int sfd,ret; ssize_t sbytes = 0, rbytes = 0; char buffer[1024] = {0}; struct sockaddr_in svr_addr; if(argc != 3){ fprintf(stderr,"Usage : %s < ip > < port >.\n",argv[0]); exit(EXIT_FAILURE); } // 1.创建套接字 sfd = socket(AF_INET,SOCK_STREAM,0); if(sfd == -1){ perror("[ERROR] Failed to socket."); exit(EXIT_FAILURE); } printf("sfd = %d\n",sfd); // 2.建立连接 bzero(&svr_addr,sizeof(struct sockaddr_in)); // 指针指向空间初始化(清零) svr_addr.sin_family = AF_INET; // 协议族 svr_addr.sin_port = htons(atoi(argv[2])); // 端口 svr_addr.sin_addr.s_addr = inet_addr(argv[1]); // IP ret = connect(sfd,(const struct sockaddr *)&svr_addr,sizeof(struct sockaddr_in)); // 客户端 连接 服务器 if(ret == -1){ perror("[ERROR] Failed to connect."); exit(EXIT_FAILURE); } // 3.发送数据 (客户端-->服务器) strcpy(buffer,"Hello,server"); sbytes = send(sfd,buffer,strlen(buffer) + 1,0); // "+1" ---> "\0" if(ret == -1){ perror("[ERROR] Failed to send."); exit(EXIT_FAILURE); } // 4.接收数据 (服务器--->客户端) bzero(buffer,sizeof(buffer)); // 指针指向空间初始化(清零) rbytes = recv(sfd,buffer,sizeof(buffer),0); // "+1" ---> "\0" if(ret == -1){ perror("[ERROR] Failed to recv."); exit(EXIT_FAILURE); }else if(rbytes > 0){ printf("buffer : %s\n",buffer); }else if(rbytes == 0){ printf("The server has been shut down.\n"); } close(sfd); // 关闭 文件描述符 return 0; } 【图片】

得分 100
讨论题

慕九州9493288 的学生作业:

一、代码 seqstack.h #ifndef __SEQSTACK_H__ #define __SEQSTACK_H__ #include #include #include #define MAX 12 typedef char data_t; typedef struct { data_t buf[MAX]; int top; }seqstack_t; extern seqstack_t *create_empty_seqstack(); extern data_t push_seqstack(seqstack_t *s,data_t data); extern data_t pop_seqstack(seqstack_t *s); extern int is_empty_seqstack(seqstack_t *s); extern int is_full_seqstack(seqstack_t *s); extern data_t get_top_seqstack(seqstack_t *s); #endif seqstack.c #include "seqstack.h" seqstack_t *create_empty_seqstack() { seqstack_t *s = malloc(sizeof(seqstack_t)); if(s == NULL) { printf("malloc is fail!\n"); return NULL; } memset(s,0,sizeof(seqstack_t)); s->top = -1; return s; } data_t push_seqstack(seqstack_t *s,data_t data) { return s->buf[++s->top] = data; } data_t pop_seqstack(seqstack_t *s) { return s->buf[s->top--]; } int is_empty_seqstack(seqstack_t *s) { return s->top == -1 ? 1 : 0; } int is_full_seqstack(seqstack_t *s) { return s->top == MAX - 1 ? 1 : 0; } data_t get_top_seqstack(seqstack_t *s) { return s->buf[s->top]; } main.c #include "seqstack.h" int main() { int i = 0,ret = 0; seqstack_t *s = NULL; char ch[] = {'a','n','i','h','c',' ','e','v','o','l',' ','I'}; s = create_empty_seqstack(); while(!is_full_seqstack(s)) { push_seqstack(s,ch[i++]); } // printf("top : %c\n",get_top_seqstack(s)); printf("pop : %c",pop_seqstack(s)); while(!is_empty_seqstack(s)) { ret = pop_seqstack(s); printf("%c",ret); } printf("\n"); return 0; } 二、结果 【图片】

微信客服

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

帮助反馈 APP下载

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

公众号

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