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

作业社区

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

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

浪潮君 的学生作业:

#include // 引入标准输入输出头文件,用于 printf、fprintf 等函数 #include // 引入标准库头文件,用于 atoi() 等函数 #include // 引入网络字节序转换相关函数头文件,如 inet_aton, htons, ntohs 等 int main(int argc, char *argv[]) { // 判断命令行参数数量是否正确,应为程序名 + IP + 端口,共 3 个参数 if (argc != 3) { fprintf(stderr, "Usage: %s \n", argv[0]); // 使用说明 return 1; // 参数错误,返回非0表示程序失败 } // 1. IP 字符串转为网络字节序的 struct in_addr 结构体 struct in_addr ip_addr; // 用于存储网络字节序格式的 IPv4 地址 if (!inet_aton(argv[1], &ip_addr)) { // 将字符串 IP 转换为网络字节序存入 ip_addr fprintf(stderr, "Invalid IP address\n"); // 转换失败,提示错误 return 1; } // 2. 字符串端口转数字(atoi)并转换为网络字节序(htons) uint16_t port_net = htons(atoi(argv[2])); // 字符串转为整数,然后转换为大端格式 // 3. 输出网络字节序(原始格式,不适合人直接阅读) printf("Network Byte Order:\n"); printf(" IP: 0x%x\n", ip_addr.s_addr); // IP 输出为16进制的大端整数 printf(" Port: %u\n", port_net); // 端口以整数形式输出(实际是大端格式) // 4. 转回主机字节序并输出可读格式 printf("Host Byte Order:\n"); printf(" IP: %s\n", inet_ntoa(ip_addr)); // 将 IP 地址结构体转换为可读的字符串 printf(" Port: %u\n", ntohs(port_net)); // 将端口号从网络字节序还原为主机字节序 return 0; // 正常退出 }

得分 100
学习任务

Linkus 的学生作业:

#include #include #include #include #include static int number = 0;//共享变量 static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t cond = PTHREAD_COND_INITIALIZER; void *thread_handler(void *arg) { int cnt = atoi((char *)arg); int i,tmp; for(i = 0;i < cnt;i++){ pthread_mutex_lock(&mtx); printf("线程 [%ld] 生产一个产品,产品数量为:%d\n",pthread_self(),++number); pthread_mutex_unlock(&mtx); pthread_cond_signal(&cond); // 唤醒消费者线程 } pthread_exit((void *)0); } int main(int argc,char *argv[]) { pthread_t tid; int i; int err; int total_of_produce = 0;//总的生产产品的数量 int total_of_consume = 0;//总的消费产品的数量 bool done = false; for (i = 1;i < argc;i++){ total_of_produce += atoi(argv[i]); // 生产数量的总和 err = pthread_create(&tid,NULL,thread_handler,(void *)argv[i]); if (err != 0){ perror("[ERROR] pthread_create(): "); exit(EXIT_FAILURE); } } for (;;){ pthread_mutex_lock(&mtx); while(number == 0) // 当产品数量为 0时,让线程阻塞,并释放锁,这里一般设置循环,防止没有重新获取到锁 pthread_cond_wait(&cond,&mtx); while(number > 0){ total_of_consume++; // 消费产品总数 printf("消费一个产品,产品数量为:%d\n",--number); done = total_of_consume >= total_of_produce; // 判断消费者数量与产品数量 } pthread_mutex_unlock(&mtx); // 消费者消费完成之后,释放锁 if (done) break; }

微信客服

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

帮助反馈 APP下载

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

公众号

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