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

作业社区

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

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

枝wenz_fpJNR0 的学生作业:

#ifndef __SEM_HANDLE_H__ #define __SEM_HANDLE_H__ #include #include #include #include #include #include #include #include #include #define SEM_PRO_ID 0//进程的ID #define SEM_PATH "."//当前目录 //信号量集的初始化值 /* 创建信号量集合 @param nsems : 信号量的数量 @param values : 信号量的值 @return : 成功 : 0 失败 : -1 */ typedef union semun{ int val; unsigned short *array; }semunion; extern void error_handle(char *msg);//错误处理函数 extern int sem_create(int nsems,unsigned short values[]); //创建信号量集合 extern int sem_p(int semid,int semnum);// 占用资源 extern int sem_v(int semid,int semnum);// 释放资源 extern int sem_del(int semid); // 删除信号量集合 extern char *gettime(void);//获取当前时间 #endif #include "sem_handle.h" //错误处理函数 void error_handle(char *msg) { perror(msg); exit(EXIT_FAILURE); } //获取当前时间 char *gettime(void) { static char buf[64]; // static 保证返回后有效 time_t now; struct tm *tm_now; time(&now); // 获取当前时间戳 tm_now = localtime(&now); // 转成本地时间 // 格式化:年-月-日 时:分:秒 strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", tm_now); return buf; } //创建信号量集合 int sem_create(int nsems,unsigned short values[]) { int semid,ret; key_t key; semunion semun; //获取信号量集的键值 key = ftok(SEM_PATH,SEM_PRO_ID); if(key == -1) { error_handle("[ERROR] ftok(): "); } //创建信号量集 semid = semget(key,nsems,IPC_CREAT|0666); if(semid == -1) { error_handle("[ERROR] semget(): "); } semun.array = values; ret = semctl(semid,0,SETALL,semun);//设置信号量集的初始值 if(ret == -1) { perror("[ERROR] semctl(): "); return -1; } return semid; } //信号量P操作 int sem_p(int semid,int semnum) { struct sembuf sops; sops.sem_num = semnum; sops.sem_op = -1; sops.sem_flg = 0;//自动释放 return semop(semid,&sops,1); } //信号量V操作 int sem_v(int semid,int semnum) { struct sembuf sops; sops.sem_num = semnum; sops.sem_op = 1; sops.sem_flg = 0;//自动释放 return semop(semid,&sops,1); } //删除信号量集 int sem_del(int semid) { return semctl(semid,0,IPC_RMID,0); } #include "sem_handle.h" int main(int argc, char const *argv[]) { pid_t cpid;//子进程的ID int semid;//信号量集的ID key_t key;//信号量集的键值 char *time;//当前时间 unsigned short value[3]={1,0,0};//信号量集的初始值 semid = sem_create(3,value); if(semid == -1) { return -1; } cpid = fork();//创建子进程 if(cpid == -1) { error_handle("fork"); } else if(cpid == 0) { //child process for(int i=1; i error_handle("sem_v2 fail"); } } exit(EXIT_SUCCESS); }else if(cpid > 0) { //parent process for(int i=1; i error_handle("sem_v1 fail"); } if(sem_p(semid, 2) == -1) { // 添加错误检查,等子进程结束,打印 > error_handle("sem_p2 fail"); } printf(">\n"); fflush(stdout);//刷新缓冲区,确保立即打印 if(sem_v(semid, 0) == -1) { // 添加错误检查,唤醒子进程打印 < error_handle("sem_v0 fail"); } } wait(NULL); sem_del(semid); printf("信号量集删除成功\n"); exit(EXIT_SUCCESS); } return 0; }

得分 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_data_linklist(linknode_t* head,datatype_t data); extern void insert_data_linklist(linknode_t* head,datatype_t data); extern void reverse_data_linklist(linknode_t* head); extern void clean_up_linklist(linknode_t* head); extern void print_data_linklist(linknode_t* head); #endif ** linklsit.c ** #include "linklist.h" //创建新空链表 linknode_t* create_data_linklist (linknode_t* head,datatype_t data) { linknode_t* head=NULL; head=(linknode_t*)malloc(sizeof(linknode_t)); if (NULL==head) { printf("链表申请失败!\n"); return NULL; } memset(head,0,sizeof(linknode_t)); head->next=NULL; return head; } //向空链表中插入数据 void insert_data_linklist (linknode_t* head,datatype_t data) { linknode_t* temp=NULL; linknode_t* p=head; temp=(linknode_t*)malloc(sizeof(linknode_t)); if (NULL==temp) { printf("节点申请失败!\n"); return; } temp->data=data; while(p->next!=NULL) { p=p->next; } temp->next=p->next; p->next=temp; return; } //将链表置为逆序 void reverse_data_linklist (linknode_t* head) { linknode_t* p=NULL; linknode_t* q=NULL; p=head->next-next; head->next-next=NULL; while (p!=NULL) { q=p->next; p->next=head->next; head->next=p; p=q; } return; } //清除链表 void clean_up_linklist (linknode_t* head) { linknode_t* p=head; linknode_t* q=NULL; while (p!=NULL) { q=p->next; free(p); p=q; } head->next=NULL; //包括头节点在内的节点都被清除了,重置头指针为NULL return; } //打印链表 void print_data_linklist (linknode_t* head) { linknode_t* p=head; while (p->next!=NULL) { printf("%d ",p->next->data); p=p->next; } printf("\n"); } ** main.c ** #include "linklist.h" int main() { linknode_t* head=NULL; datatype_t data; int i=0; int n=0; head=create_data_linklist (head,data); printf("请输入需要数据的个数:\n"); scanf("%d",&n); printf("请输入%d个数据\n",n); for (i=0;i

得分 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

微信客服

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

帮助反馈 APP下载

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

公众号

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