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

作业社区

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

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

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

tcpsocket.h #ifndef __TCP_SOCKET_H_ #define __TCP_SOCKET_H_ #include #include #include #include #include #include #include #include //创建并初始化tcp服务器socket extern int create_tcp_server_socket(const char *ip,unsigned short port); extern int wait_for_connect(int sfd,struct sockaddr_in *cli_addr); extern void show_tcp_network_address(struct sockaddr_in *sockaddr); extern ssize_t tcp_send_pack(int sockfd,const void *buf,size_t len); extern ssize_t tcp_recv_pack(int sockfd,void *buf,size_t len); #endif tcpsocket.c #include "tcpsocket.h" #include "debug.h" #define BACKLOG 10 int create_tcp_server_socket(const char *ip,unsigned short port) { int ret,sfd; struct sockaddr_in svr_addr; //创建套接字 sfd = socket(AF_INET,SOCK_STREAM,0); if(sfd == -1) { DEBUG_INFO("[ERROR] :%s",strerror(errno)); return -1; } bzero(&svr_addr,sizeof(svr_addr)); svr_addr.sin_family = AF_INET; svr_addr.sin_port = htons(port); svr_addr.sin_addr.s_addr = inet_addr(ip); //绑定ip地址于端口号 ret = bind(sfd,(const struct sockaddr *)&svr_addr,sizeof(svr_addr)); if(ret == -1) { DEBUG_INFO("[ERROR] :%s",strerror(errno)); return -1; } //建立监听队列,并设置监听套接字为监听状态 ret = listen(sfd,BACKLOG); if(ret == -1) { DEBUG_INFO("[ERROR] :%s",strerror(errno)); return -1; } return sfd; } int wait_for_connect(int sfd,struct sockaddr_in *cli_addr) { int cfd; socklen_t len = sizeof(struct sockaddr_in); cfd = accept(sfd,(struct sockaddr *)cli_addr,&len); if(cfd == -1) { DEBUG_INFO("[ERROR]:%s",strerror(errno)); return -1; } return cfd; } void show_tcp_network_address(struct sockaddr_in *sockaddr) { printf("ip: %s\n",inet_ntoa(sockaddr->sin_addr)); printf("port: %d\n",ntohs(sockaddr->sin_port)); } ssize_t tcp_send_pack(int sockfd,const void *buf,size_t len) { return send(sockfd,buf,0); } ssize_t tcp_recv_pack(int sockfd,void *buf,size_t len) { return recv(sockfd,buf,len,0); }

得分 100
学习任务

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

tcpsocket.h #ifndef __TCP_SOCKET_H_ #define __TCP_SOCKET_H_ #include #include #include #include #include #include #include #include //创建并初始化tcp服务器socket extern int create_tcp_server_socket(const char *ip,unsigned short port); extern int wait_for_connect(int sfd,struct sockaddr_in *cli_addr); #endif tcpsocket.c #ifndef __TCP_SOCKET_H_ #define __TCP_SOCKET_H_ #include #include #include #include #include #include #include #include //创建并初始化tcp服务器socket extern int create_tcp_server_socket(const char *ip,unsigned short port); extern int wait_for_connect(int sfd,struct sockaddr_in *cli_addr); #endif root@yangzheng-HP-Laptop-14s-dp0xxx:/class/week15/workspace/A07ftp/A01tcpsocket# cat tcpsocket.c #include "tcpsocket.h" #include "debug.h" #define BACKLOG 10 int create_tcp_server_socket(const char *ip,unsigned short port) { int ret,sfd; struct sockaddr_in svr_addr; //创建套接字 sfd = socket(AF_INET,SOCK_STREAM,0); if(sfd == -1) { DEBUG_INFO("[ERROR] :%s",strerror(errno)); return -1; } bzero(&svr_addr,sizeof(svr_addr)); svr_addr.sin_family = AF_INET; svr_addr.sin_port = htons(port); svr_addr.sin_addr.s_addr = inet_addr(ip); //绑定ip地址于端口号 ret = bind(sfd,(const struct sockaddr *)&svr_addr,sizeof(svr_addr)); if(ret == -1) { DEBUG_INFO("[ERROR] :%s",strerror(errno)); return -1; } //建立监听队列,并设置监听套接字为监听状态 ret = listen(sfd,BACKLOG); if(ret == -1) { DEBUG_INFO("[ERROR] :%s",strerror(errno)); return -1; } return sfd; } int wait_for_connect(int sfd,struct sockaddr_in *cli_addr) { int cfd; socklen_t len = sizeof(struct sockaddr_in); cfd = accept(sfd,(struct sockaddr *)cli_addr,&len); if(cfd == -1) { DEBUG_INFO("[ERROR]:%s",strerror(errno)); return -1; } return cfd; }

得分 100
讨论题

万物皆流2026 的学生作业:

** linklist.h ** #ifndef _LINKLIST_H_ #define _LINKLIST_H_ #include #include #include typedef int datatype_t; typedef struct node { datatype_t data; struct node* next; } linknode_t; extern linknode_t* create_empty_linklist(); extern void insert_data_linklist(linknode_t* head,datatype_t data); extern void print_data_linklist(linknode_t* head); extern int is_empty_linklist(linknode_t* head); extern int delete_data_linklist(linknode_t* head,datatype_t data); #endif ** linklist.c #include "linklist.h" linknode_t* create_empty_linklist() { linknode_t* head=NULL; head=(linknode_t*)malloc(sizeof(linknode_t)); if (NULL==head) { printf("malloc is fail\n"); return NULL; } memset(head,0,sizeof(linknode_t)); head->next=NULL; return head; } void insert_order_linklist(linknode_t* head,datatype_t data) { linknode_t* temp=NULL; temp=(linknode_t*)malloc(sizeof(linknode_t)); temp->data=data; linknode_t* p=head; while(p->next!=NULL&&datanext->data)) { p=p->next; } temp->next=p->next; p->next=temp; return; } int is_empty_linklist(linknode_t* head) { return head->next==NULL?1:0; } int delete_data_linklist(linknode_t* head,datatype_t data) { linknode_t* p=NULL; linknode_t* q=NULL; int flag=0; if (is_empty_linklist(linknode_t* head)) { printf("当前链表为空!\n"); return -1; } p=head; while(p->next!=NULL) { if(p->next->data==data) { q=p->next; p->next=q->next; free(q); flag=1; } esle { p=p->next; } } if (flag==0) { printf("当前链表中无要删除的目标数据%d\n",data); return -2; } else { printf("delete data is successful!\n“); } return 0; } void print_data_linklist(linknode_t* head) { linknode* p=head; while (p->next!=NULL) { printf("%d ",p->next->data); p=p->next; } printf("\n"); return; } main.c #include "linklist.h" int main() { linknode_t* head=NULL; datatype_t data; int i=0; int n=0; int e=0; head=create_empty_linklist(); printf("请输入数据的个数:\n"); scanf("%d",&n); printf("请输入%d个数据:\n",n); for(i=0;i

得分 100
学习任务

慕九州9493288 的学生作业:

一、代码 #include #include #include #include #include #include #include #include #define MSG_SIZE 64 #define MSG_TYPE_100 100 #define MSG_TYPE_200 200 #define MSG_PATHNAME "." #define MSG_PROJ_ID 66 // 创建消息结构体 struct msgbuf { long mtype; /* message type, must be > 0 */ char mtext[MSG_SIZE]; /* message data */ }; int main() { key_t key; int msgid; // 1. 创建key key = ftok(MSG_PATHNAME, MSG_PROJ_ID); if (key == -1) { perror("[ERROR]ftok(): "); exit(EXIT_FAILURE); } // 2. 创建消息队列 msgid = msgget(key, IPC_CREAT | 0666); if (msgid == -1) { perror("[ERROR]msgget(): "); exit(EXIT_FAILURE); } // 创建子进程 A(收100) pid_t cpid_a = fork(); if (cpid_a == -1) { // 创建失败 perror("[ERROR]fork(): "); exit(EXIT_FAILURE); } else if (cpid_a == 0) { // 创建成功 struct msgbuf msg; ssize_t ret; while (1) { ret = msgrcv(msgid, (void *) &msg, sizeof(msg.mtext), MSG_TYPE_100, 0); if (ret == -1) { perror("[ERROR]fork A: "); exit(EXIT_FAILURE); } printf("[子进程A] 收到消息:%s\n", msg.mtext); // 收到 quit 就退出 if (strcmp(msg.mtext, "quit") == 0) { exit(EXIT_SUCCESS); } } } // 创建子进程 B(收200) pid_t cpid_b = fork(); if (cpid_b == -1) { // 创建失败 perror("[ERROR]fork(): "); exit(EXIT_FAILURE); } else if (cpid_b == 0) { // 创建成功 struct msgbuf msg; ssize_t ret; while (1) { ret = msgrcv(msgid, (void *) &msg, sizeof(msg.mtext), MSG_TYPE_200, 0); if (ret == -1) { perror("[ERROR]fork B: "); exit(EXIT_FAILURE); } printf("[子进程B] 收到消息:%s\n", msg.mtext); // 收到 quit 就退出 if (strcmp(msg.mtext, "quit") == 0) { exit(EXIT_SUCCESS); } } } // 父进程:发送消息 char buf[MSG_SIZE]; struct msgbuf msg; ssize_t ret; while (1) { fgets(buf, MSG_SIZE, stdin); buf[strcspn(buf, "\n")] = 0; // 去掉换行符 // 输入 quit,发送退出消息 if (strcmp(buf, "quit") == 0) { // 发给A msg.mtype = MSG_TYPE_100; strcpy(msg.mtext, buf); ret = msgsnd(msgid, (void *) &msg, strlen(msg.mtext) + 1, 0); if (ret == -1) { perror("[ERROR]msgsnd() A: "); exit(EXIT_FAILURE); } printf("[父进程] 发给A:%s\n", msg.mtext); // 发给B msg.mtype = MSG_TYPE_200; strcpy(msg.mtext, buf); ret = msgsnd(msgid, (void *) &msg, strlen(msg.mtext) + 1, 0); if (ret == -1) { perror("[ERROR]msgsnd() B: "); exit(EXIT_FAILURE); } printf("[父进程] 发给B:%s\n", msg.mtext); break; } // 正常消息:发给A(100) msg.mtype = MSG_TYPE_100; strcpy(msg.mtext, buf); ret = msgsnd(msgid, (void *) &msg, strlen(msg.mtext) + 1, 0); if (ret == -1) { perror("[ERROR]msgsnd() A: "); exit(EXIT_FAILURE); } printf("[父进程] 发给A:%s\n", msg.mtext); // 正常消息:发给B(200) msg.mtype = MSG_TYPE_200; strcpy(msg.mtext, buf); ret = msgsnd(msgid, (void *) &msg, strlen(msg.mtext) + 1, 0); if (ret == -1) { perror("[ERROR]msgsnd() B: "); exit(EXIT_FAILURE); } printf("[父进程] 发给B:%s\n", msg.mtext); } // 等待子进程退出 waitpid(cpid_a, NULL, 0); waitpid(cpid_b, NULL, 0); // 删除消息队列 ret = msgctl(msgid, IPC_RMID, NULL); if (ret == -1) { perror("[ERROR]msgctl(): "); exit(EXIT_FAILURE); } printf("[父进程] 删除消息队列成功\n"); return EXIT_SUCCESS; } 二、结果 linux@DESKTOP-4M60T5C:~/homework/2026/0318$ gcc hw_fcipc.c linux@DESKTOP-4M60T5C:~/homework/2026/0318$ ./a.out hello world [父进程] 发给A:hello world [父进程] 发给B:hello world [子进程A] 收到消息:hello world [子进程B] 收到消息:hello world quit [父进程] 发给A:quit [子进程A] 收到消息:quit [父进程] 发给B:quit [子进程B] 收到消息:quit [父进程] 删除消息队列成功 linux@DESKTOP-4M60T5C:~/homework/2026/0318$

微信客服

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

帮助反馈 APP下载

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

公众号

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