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

作业社区

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

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

枝wenz_fpJNR0 的学生作业:

//探测用户是否已经输入,如果用户在3秒内没有输入则提示超时一次,如果超时三次程序自动结束。 #include #include #include #include #include #include static int timeout_count = 0; // 静态变量,记录已超时次数,整个文件可见 static int input_received = 0; // 标志位:1表示用户已输入,0表示未输入 void error_handle(char *msg) { perror(msg); exit(EXIT_FAILURE); } void do_alarm(int signum) { if(input_received == 0) { timeout_count++;//超时次数加1 printf("\n[超时 %d/3] 未检测到输入!\n", timeout_count); if(timeout_count >= 3) { printf("\n[超时 3/3] 未检测到输入,程序自动结束!\n"); exit(EXIT_FAILURE); } alarm(3);//设置3秒的闹钟 } // 处理闹钟信号 fprintf(stdout, "%s闹钟信号被触发\n", strsignal(signum)); } int main(int argc, char const *argv[]) { char buf[1024];//用于存储用户输入的缓冲区 __sighandler_t sigret=signal(SIGALRM, do_alarm);//注册信号处理函数do_alarm if(sigret==SIG_ERR) { error_handle("[ERROR] signal(): 注册失败!\n"); } while(1) { input_received = 0;//重置标志位 alarm(3);//设置3秒的闹钟 // 等待用户输入 printf("请输入: ");//提示用户输入 if(fgets(buf, sizeof(buf), stdin) != NULL)//读取用户输入 { input_received = 1;//设置标志位为1 alarm(0);//取消闹钟 } buf[strlen(buf)-1] = '\0';//移除换行符 printf("您输入的内容是: %s\n", buf);//打印用户输入的内容 if(strcmp(buf, "quit") == 0)//如果用户输入quit,则退出循环 { exit(EXIT_SUCCESS); } } return 0; }

得分 100
学习任务

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

1.理解 tcp 粘包的原因:tcp优化机制和超过1500个字节 #include #include #include #include #include #include #include #include #define BACKLOG 10 int main(int argc,char *argv[]) { if(argc!=3) { fprintf(stderr,"usage : %s < ip > < port >.\n",argv[0]); exit(EXIT_FAILURE); } int sfd,ret,cfd; ssize_t rbytes = 0,sbytes = 0; char buffer[1024] = {0}; struct sockaddr_in svr_addr,cli_addr; socklen_t len = sizeof(struct sockaddr_in); sfd = socket(AF_INET,SOCK_STREAM,0); if(sfd == -1) { perror("[ERROR] socket():"); exit(EXIT_FAILURE); } //初始化服务端地址结构对象 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 = bind(sfd,(const struct sockaddr *)&svr_addr,sizeof(struct sockaddr_in)); if(ret == -1) { perror("[ERROR] bind():"); exit(EXIT_FAILURE); } ret = listen(sfd,BACKLOG); if(ret == -1) { perror("[ERROR] Failed to listen."); close(sfd); exit(EXIT_FAILURE); } printf("服务端启动成功,等待客户端连接....\n"); //接收客户端连接 cfd = accept(sfd,(struct sockaddr *)&cli_addr,&len); if(cfd == -1) { perror("[ERROR] Failed to accept."); close(sfd); exit(EXIT_FAILURE); } printf("ip : %s port :%d\n",inet_ntoa(cli_addr.sin_addr),ntohs(cli_addr.sin_port)); for(;;) { memset(buffer,0,sizeof(buffer)); //接收客户端消息 rbytes = recv(cfd,buffer,sizeof(buffer),0); if(rbytes == -1) { perror("[ERROR] Failed to recv."); close(cfd); close(sfd); exit(EXIT_FAILURE); }else if (rbytes>0) { printf("buffer :%s\n",buffer); }else if (rbytes == 0) { printf("客户端已断开连接"); break; } sleep(1); } //关闭套接字 close(cfd); close(sfd); return 0; } #include #include #include #include #include #include #include #include #define BACKLOG 10 int main(int argc,char *argv[]) { if(argc!=3) { fprintf(stderr,"usage : %s < ip > < port >.\n",argv[0]); exit(EXIT_FAILURE); } int sfd,ret,cfd; ssize_t rbytes = 0,sbytes = 0; char buffer[1024] = {0}; struct sockaddr_in svr_addr,cli_addr; socklen_t len = sizeof(struct sockaddr_in); sfd = socket(AF_INET,SOCK_STREAM,0); if(sfd == -1) { perror("[ERROR] socket():"); exit(EXIT_FAILURE); } //初始化服务端地址结构对象 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 = bind(sfd,(const struct sockaddr *)&svr_addr,sizeof(struct sockaddr_in)); if(ret == -1) { perror("[ERROR] bind():"); exit(EXIT_FAILURE); } ret = listen(sfd,BACKLOG); if(ret == -1) { perror("[ERROR] Failed to listen."); close(sfd); exit(EXIT_FAILURE); } printf("服务端启动成功,等待客户端连接....\n"); //接收客户端连接 cfd = accept(sfd,(struct sockaddr *)&cli_addr,&len); if(cfd == -1) { perror("[ERROR] Failed to accept."); close(sfd); exit(EXIT_FAILURE); } printf("ip : %s port :%d\n",inet_ntoa(cli_addr.sin_addr),ntohs(cli_addr.sin_port)); for(;;) { memset(buffer,0,sizeof(buffer)); //接收客户端消息 rbytes = recv(cfd,buffer,sizeof(buffer),0); if(rbytes == -1) { perror("[ERROR] Failed to recv."); close(cfd); close(sfd); exit(EXIT_FAILURE); }else if (rbytes>0) { //发回给客户端 sbytes = send(cfd,buffer,strlen(buffer),0); if(sbytes == -1) { perror("[ERROR] Failed to recv."); close(cfd); close(sfd); exit(EXIT_FAILURE); } }else if (rbytes == 0) { printf("客户端已断开连接"); break; } printf("客户端发来:%s",buffer); //回显给客户端 sbytes = send(cfd,buffer,strlen(buffer),0); if(sbytes == -1) { perror("[ERROR] send():"); close(cfd); close(sfd); exit(EXIT_FAILURE); } //收到quit 退出本次连接 if(strcmp(buffer,"quit\n") == 0) { printf("客户端请求退出,服务端结束本次连接\n"); break; } } //关闭套接字 close(cfd); close(sfd); return 0; }

得分 100
学习任务

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

tcp_echo_server.c #include #include #include #include #include #include #include #include #define BACKLOG 10 int main(int argc,char *argv[]) { if(argc!=3) { fprintf(stderr,"usage : %s < ip > < port >.\n",argv[0]); exit(EXIT_FAILURE); } int sfd,ret,cfd; ssize_t rbytes = 0,sbytes = 0; char buffer[1024] = {0}; struct sockaddr_in svr_addr,cli_addr; socklen_t len = sizeof(struct sockaddr_in); sfd = socket(AF_INET,SOCK_STREAM,0); if(sfd == -1) { perror("[ERROR] socket():"); exit(EXIT_FAILURE); } //初始化服务端地址结构对象 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 = bind(sfd,(const struct sockaddr *)&svr_addr,sizeof(struct sockaddr_in)); if(ret == -1) { perror("[ERROR] bind():"); exit(EXIT_FAILURE); } ret = listen(sfd,BACKLOG); if(ret == -1) { perror("[ERROR] Failed to listen."); close(sfd); exit(EXIT_FAILURE); } printf("服务端启动成功,等待客户端连接....\n"); //接收客户端连接 cfd = accept(sfd,(struct sockaddr *)&cli_addr,&len); if(cfd == -1) { perror("[ERROR] Failed to accept."); close(sfd); exit(EXIT_FAILURE); } printf("ip : %s port :%d\n",inet_ntoa(cli_addr.sin_addr),ntohs(cli_addr.sin_port)); for(;;) { memset(buffer,0,sizeof(buffer)); //接收客户端消息 rbytes = recv(cfd,buffer,sizeof(buffer),0); if(rbytes == -1) { perror("[ERROR] Failed to recv."); close(cfd); close(sfd); exit(EXIT_FAILURE); }else if (rbytes>0) { //发回给客户端 sbytes = send(cfd,buffer,strlen(buffer),0); if(sbytes == -1) { perror("[ERROR] Failed to recv."); close(cfd); close(sfd); exit(EXIT_FAILURE); } }else if (rbytes == 0) { printf("客户端已断开连接"); break; } printf("客户端发来:%s",buffer); //回显给客户端 sbytes = send(cfd,buffer,strlen(buffer),0); if(sbytes == -1) { perror("[ERROR] send():"); close(cfd); close(sfd); exit(EXIT_FAILURE); } //收到quit 退出本次连接 if(strcmp(buffer,"quit\n") == 0) { printf("客户端请求退出,服务端结束本次连接\n"); break; } } //关闭套接字 close(cfd); close(sfd); return 0; } tcp_client.c #include #include #include #include #include #include #include #include int main(int argc,char *argv[]) { int sfd,ret; ssize_t sbytes = 0,rbytes = 0; char sbuffer[1024] = {0}; char rbuffer[1024] = {0}; struct sockaddr_in svr_addr; char buffer[1024] = {0}; if(argc != 3) { fprintf(stderr,"Usage : %s < ip > < port >.\n",argv[0]); return -1; } //创建套接字 sfd = socket(AF_INET,SOCK_STREAM,0); if(sfd == -1) { perror("[ERROR] socket():"); exit(EXIT_FAILURE); } printf("sfd = %d\n",sfd); //初始化服务器地址结构体 bzero(&svr_addr,sizeof(svr_addr)); svr_addr.sin_family = AF_INET; svr_addr.sin_port = htons(atoi(argv[2])); svr_addr.sin_addr.s_addr = inet_addr(argv[1]); //连接服务器 ret = connect(sfd,(const struct sockaddr *)&svr_addr,sizeof(svr_addr)); if(ret == -1) { perror("[ERROR] connect()"); close(sfd); exit(EXIT_FAILURE); } printf("已连接服务器\n"); while(1) { memset(sbuffer,0,sizeof(sbuffer)); memset(rbuffer,0,sizeof(rbuffer)); printf("请输入要发送的信息:"); if(fgets(sbuffer,sizeof(sbuffer),stdin) == NULL) { break; } //连同'\0'也发过去 strlen 当前字符串实际长度 sbytes = send(sfd,sbuffer,strlen(sbuffer)+1,0); if(sbytes == -1) { perror("[ERROR] send():"); close(sfd); exit(EXIT_FAILURE); } //接收服务端回显 rbytes = recv(sfd,rbuffer,sizeof(rbuffer),0); if(rbytes == -1) { perror("[ERROR] recv()"); close(sfd); exit(EXIT_FAILURE); }else if(rbytes == 0) { printf("服务端已端开连接\n"); break; } printf("服务端回显:%s",rbuffer); //输入quit后退出客户端 if(strcmp(sbuffer,"quit\n") == 0) { printf("客户端退出\n"); break; } } close(sfd); return 0; }

得分 100
学习任务

枝wenz_fpJNR0 的学生作业:

#include #include #include #include #include #include // 错误处理函数 void error_handle(char *msg) { perror(msg); exit(EXIT_FAILURE); } // 信号处理函数 void signal_handler(int signum) { fprintf(stdout, "子进程2: 收到信号%s\n", strsignal(signum));//打印子进程2收到的信号名称 } int main(int argc, char const *argv[]) { pid_t cpid; // 注册信号处理函数signal_handler if(signal(SIGUSR2, signal_handler) == SIG_ERR) { error_handle("[ERROR] signal(): 子进程2失败!\n"); } // 创建子进程1 cpid=fork(); if(cpid==-1) { error_handle("[ERROR] fork(): 子进程1失败!\n"); }else if(cpid==0) { //子进程1 fprintf(stdout, "子进程1: %d正在运行...\n", getpid());//打印子进程1的pid pause();//暂停子进程1,等待父进程发送信号 exit(EXIT_SUCCESS); }else if (cpid > 0) { //父进程 sleep(1);//等待1秒 fprintf(stdout, "父进程: %d向子进程1发送信号\n", getpid());//打印父进程的pid kill(cpid, SIGUSR1);//向子进程1发送信号SIGUSR1 // 等待子进程1结束 wait(NULL);//等待子进程1结束 fprintf(stdout, "父进程: %d子进程1结束\n", getpid());//打印父进程的pid // 创建子进程2 cpid=fork(); if(cpid==-1) { error_handle("[ERROR] fork(): 子进程2失败!\n"); } else if(cpid==0) { //子进程2 fprintf(stdout, "子进程2: %d正在运行...\n", getpid());//打印子进程2的pid pause();//暂停子进程2,等待父进程发送信号 exit(EXIT_SUCCESS); } else if (cpid > 0) { //父进程 sleep(1);//等待1秒 fprintf(stdout, "父进程: %d向子进程2发送信号\n", getpid());//打印父进程的pid kill(cpid, SIGUSR2);//向子进程2发送信号SIGUSR2 // 等待子进程2结束 wait(NULL);//等待子进程2结束 fprintf(stdout, "父进程: %d子进程2结束\n", getpid());//打印父进程的pid // 退出父进程 fprintf(stdout, "父进程: %d退出\n", getpid());//打印父进程的pid exit(EXIT_SUCCESS); } } return 0; }

得分 100
学习任务

枝wenz_fpJNR0 的学生作业:

#include #include #include #include #include #include int main(int argc, char const *argv[]) { pid_t cpid; cpid=fork(); if(cpid == -1){ perror("[ERROR] fork()"); exit(EXIT_FAILURE); }else if(cpid == 0){ // 子进程 fprintf(stdout,"子进程ID1: %d 正在运行.\n", getpid());//打印子进程ID raise(SIGSTOP);//发送SIGSTOP信号,使子进程暂停 fprintf(stdout,"子进程ID1: %d 已暂停.\n", getpid());//打印子进程ID exit(EXIT_SUCCESS); }else if (cpid > 0) { int ret; sleep(1);//等待1秒,确保子进程先暂停 printf("父进程发送 SIGKILL 给子进程1 (PID: %d)\n", cpid); ret=kill(cpid,SIGKILL);//发送SIGKILL信号,使子进程终止 if (ret == 0) { printf("子进程1 (PID: %d) 已被终止.\n", cpid); } else { perror("kill 子进程1 失败"); } waitpid(cpid, NULL, 0);//等待子进程结束 // 创建子进程2 cpid = fork(); if(cpid == -1){ perror("[ERROR] fork()"); exit(EXIT_FAILURE); }else if(cpid == 0){ // 子进程2 fprintf(stdout,"子进程2 ID: %d 正在运行.\n", getpid());//打印子进程2 ID raise(SIGSTOP);//发送SIGSTOP信号,使子进程2暂停 fprintf(stdout,"子进程2 ID: %d 已暂停.\n", getpid());//打印子进程2 ID exit(EXIT_SUCCESS); }else if (cpid > 0) { // 父进程 sleep(1);//等待1秒,确保子进程2先暂停 printf("父进程发送 SIGKILL 给子进程2 (PID: %d)\n", cpid); ret = kill(cpid, SIGKILL);//发送SIGKILL信号,使子进程2终止 if (ret == 0) { printf("子进程2 (PID: %d) 已被终止.\n", cpid); } else { perror("kill 子进程2 失败"); } waitpid(cpid, NULL, 0);//等待子进程2结束 fprintf(stdout,"父进程 ID: %d 退出.\n", getpid());//打印父进程 ID exit(EXIT_SUCCESS); } } return 0; }

得分 100
学习任务

枝wenz_fpJNR0 的学生作业:

#include #include #include #include #include #include #include #include #define FIFO_NAME "./fifo" void error_exit(char *msg) { perror(msg); exit(EXIT_FAILURE); } int main(int argc, char const *argv[]) { int r_fd; int ret; int rbyte; char read_buf[64]; ret=access(FIFO_NAME, F_OK);//检查FIFO_NAME是否存在 if(ret == -1) { mkfifo(FIFO_NAME, 0633);//创建FIFO_NAME } r_fd = open(FIFO_NAME, O_RDONLY);//打开FIFO_NAME if(r_fd == -1) { error_exit("[ERROR] open() :"); } // 从FIFO_NAME读取数据 rbyte=read(r_fd, read_buf, sizeof(read_buf)); if(rbyte > 0)//如果读取到数据 { read_buf[rbyte] = '\0';//添加结束符 printf("current time: %s\n", read_buf); } close(r_fd);//关闭FIFO_NAME return 0; } #include #include #include #include #include #include #include #include #define FIFO_NAME "./fifo" void error_exit(char *msg) { perror(msg); exit(EXIT_FAILURE); } // 获取当前时间的字符串表示,格式为YYYY-MM-DD HH:MM:SS` void get_current_time_str(char *time_str, size_t size) { time_t t = time(NULL); struct tm *tm = localtime(&t); char temp_buf[32]; // 格式化时间(一定够长) strftime(temp_buf, sizeof(temp_buf), "%Y-%m-%d %H:%M:%S", tm); // 安全复制,自动截断 + 强制补结束符 snprintf(time_str, size, "%s", temp_buf); } int main(int argc, char const *argv[]) { int fd; char time_str[64]; int ret; int wbyte; ret=access(FIFO_NAME, F_OK);//检查FIFO_NAME是否存在 if(ret == -1) { mkfifo(FIFO_NAME, 0633);//创建FIFO_NAME } fd = open(FIFO_NAME, O_WRONLY);//打开FIFO_NAME if(fd == -1) { error_exit("[ERROR] open() :"); } // 向FIFO_NAME写入当前时间 get_current_time_str(time_str, sizeof(time_str)); // 写入当前时间 wbyte=write(fd,time_str, strlen(time_str));//写入当前时间 if(wbyte == -1) { error_exit("[ERROR] write() :"); } close(fd);//关闭FIFO_NAME return 0; }

微信客服

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

帮助反馈 APP下载

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

公众号

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