服务端server.c
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include "config.h"
#include <sys/stat.h>
#include <fcntl.h>
int option_cmd(char *cmd)
{
if ( ! (strcmp("ls",cmd)) )
return LS;
if ( ! (strcmp("pwd",cmd)) )
return PWD;
if ( ! (strcmp("quit",cmd)) )
return QUIT;
if ( strstr(cmd,"cd") != NULL )
return CD;
if ( strstr(cmd,"get") != NULL )
return GET;
if ( strstr(cmd,"put") != NULL )
return PUT;
}
char *GetDir(char *dircmd)
{
char *p;
p = strtok(dircmd," ");
p = strtok(NULL," ");
return p;
}
void message_handle(struct Message msg,int fd)
{
char cmdbuf[1024] = {
0};
char *file = NULL;
int file_fd;
printf("Come from Client cmd is : %s\n",msg.data);
int cmd = option_cmd(msg.data);
switch(cmd)
{
case LS:
case PWD:
msg.type = 0;
FILE *p = popen(msg.data,"r");
fread(msg.data,sizeof(msg.data),1,p);
write(fd,&msg,sizeof(msg));
break;
case QUIT:
printf("The Client die out!\n");
printf("-------------------------\n");
exit(-1);
case CD:
msg.type = 1;
char *dir = GetDir(msg.data);
printf("The dir is : %s\n",dir);
chdir(dir);
break;
case PUT:
file_fd = open(GetDir(msg.data),O_CREAT|O_RDWR,0666);
write