📄 cli_max.c
字号:
#include <stdio.h>#include <sys/types.h>#include <unistd.h>#include <sys/ipc.h>#include <sys/msg.h>#include "mymsg.h"int open_attach(char *,int);int door_call(int ,char *);int call_result(int);int door_msg_id=-1;message *rcv_msg, *snd_msg;int rcv_len, snd_len;int main(int argc,char **argv){ int fd; char snd_str[2*MAXSIZE], chrtmp[20];; if (argc != 4) { error_quit("*****usage: client <client_pathname> <string1> <string2>*****"); exit (1); } if ( strlen(argv[2]) > 20 || strlen(argv[3]) > 20) { error_quit("*****input is too long,try again(<=20******"); exit (1); } fd = open_attach(argv[1],'1'); strcpy(chrtmp,argv[2]); strcat(chrtmp,"+"); strcpy(snd_str,chrtmp); strcat(snd_str,argv[3]); snd_str[strlen(snd_str)+1] ='\0'; door_call(fd,snd_str); call_result(fd); exit (0);}int open_attach(char *pathname,int def){ int door_id; door_id = ftok(pathname,def); door_msg_id = msgget(door_id,0); if (door_msg_id == -1) { error_quit("!!! get door error!!!\n"); exit (1); } return (door_msg_id);}int door_call(int fd,char *ptr){ int ret; int size; size = 2*sizeof(long) + strlen(ptr) +1; snd_msg=(message *)malloc(size); snd_msg->m_type = CLIENT_INPUT; snd_msg->process_id = getpid(); strncpy(snd_msg->m_buf,ptr,strlen(ptr)); snd_len = sizeof(long) + strlen(snd_msg->m_buf); if ((ret = msgsnd(fd,snd_msg,snd_len,0)) < 0) { error_quit("send message to server "); exit (1); } printf("<<<send a request to server----%s>>>\n",ptr); free(snd_msg); return (0);}int call_result(int fd){ int len; long type; rcv_msg =(message *)malloc(MAXSIZE+2*sizeof(long)); type = getpid(); if ((len = msgrcv(fd,rcv_msg,sizeof(rcv_msg)-sizeof(long),type,0)) < 0) { error_quit("!!!receive result error!!!\n "); exit (1); } printf("<<<the result from server is %s>>>\n",rcv_msg->m_buf); free(rcv_msg); return (0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -