#include "tcp-udp_commands.h" void *new_connection(void *args); int touch(char *path) { int fd; pthread_t thread; char *cadena2, *cadena3; char *protocolo, *sr_cl; fd_path *args; int n, lon; int nfichs; struct stat_fich fichs[1024]; int cont=1; args = (fd_path *)malloc(sizeof(fd_path)); cadena2 = (char*)malloc(sizeof(char)*128); cadena3 = (char*)malloc(sizeof(char)*128); sr_cl = (char*)malloc(sizeof(char)*10); protocolo = (char*)malloc(sizeof(char)*3); if (path==NULL) { printf("parametros invalidos\n"); return 0; } strcpy(cadena3,path); cadena2 = strtok(cadena3, "/"); if (cadena2==NULL) { printf("path incorrecto\n"); return 0; } strcpy(protocolo,cadena2); cadena2 = strtok(NULL, "/"); if (cadena2==NULL) { printf("path incorrecto\n"); return 0; } strcpy(sr_cl,cadena2); if ((strcmp(protocolo,"TCP")!=0)&&(strcmp(protocolo,"UDP")!=0)) { printf("path incorrecto\n"); return 0; } if ((strcmp(sr_cl,"cliente")!=0)&&(strcmp(sr_cl,"servidor")!=0)) { printf("path incorrecto\n"); return 0; } if (strcmp(sr_cl,"cliente")==0) /* por si hay varios clientes con el mismo path*/ { bzero((char *) fichs, sizeof(struct stat_fich)*1024); nfichs=read_dir("/",fichs); for(n=0;n<1024;n++) { if (fichs[n].file != NULL) { cadena2 = (char*)malloc(sizeof(char)*128); if (strchr(fichs[n].file,'@') != NULL) { lon=strcspn(fichs[n].file,"@"); strncat(cadena2,fichs[n].file,lon); } else strcpy(cadena2,fichs[n].file); if (strcmp(path,cadena2)==0) { cont++; } } } if (cont>1) { cadena2 = (char*)malloc(sizeof(char)*128); strcat(path,"@"); sprintf(cadena2,"%d",cont); strcat(path,cadena2); cont=0; } } fd = open(path,100,0); if (fd==-1) return -1; close(fd); return 0; } void *new_connection(void *args) { char *cadena, *cadena_esp; int nfd, bytesleidos; pthread_t thread; fd_path *a; cadena=(char*)malloc(sizeof(char)*128); cadena_esp=(char*)malloc(sizeof(char)*128); a=(fd_path *)args; bytesleidos=read(a->fd,cadena,sizeof(cadena)); if (bytesleidos!=-1) { printf("%s\n",cadena); } } int rm(char *path) { char *cadena2; char *cadena3; char *sr_cl; char *protocolo; cadena2 = (char*)malloc(sizeof(char)*128); cadena3 = (char*)malloc(sizeof(char)*128); sr_cl = (char*)malloc(sizeof(char)*10); protocolo = (char*)malloc(sizeof(char)*3); if (path==NULL) { printf("parametros invalidos\n"); return 0; } strcpy(cadena3,path); cadena2 = strtok(cadena3, "/"); if (cadena2==NULL) { printf("path incorrecto\n"); return 0; } strcpy(protocolo,cadena2); cadena2 = strtok(NULL, "/"); if (cadena2==NULL) { printf("path incorrecto\n"); return 0; } strcpy(sr_cl,cadena2); if ((strcmp(protocolo,"TCP")!=0)&&(strcmp(protocolo,"UDP")!=0)) { printf("path incorrecto\n"); return 0; } if ((strcmp(sr_cl,"cliente")!=0)&&(strcmp(sr_cl,"servidor")!=0)) { printf("path incorrecto\n"); return 0; } if (unlink(path)==-1) printf("error con el path\n"); return 0; } int cat(char *path) { int fd; int bytesleidos; char *cadena; char *cadena2; char *cadena3; char *sr_cl; char *protocolo; char *dir_serv; fd_set rfds; struct timeval tv; int valret; int lon_peer; struct sockaddr_in peer; fd_path *args; pthread_t thread; int status; cadena=(char*)malloc(sizeof(char)); cadena3=(char*)malloc(sizeof(char)*128); cadena2=(char*)malloc(sizeof(char)*128); sr_cl = (char*)malloc(sizeof(char)*10); protocolo = (char*)malloc(sizeof(char)*3); dir_serv = (char*)malloc(sizeof(char)*128); args = (fd_path *)malloc(sizeof(fd_path)); fd = open(path,0,644); if (fd==-1) { printf("path incorrecto\n"); return 0; } if (path==NULL) { printf("parametros invalidos\n"); return 0; } strcpy(cadena3,path); cadena2 = strtok(cadena3, "/"); if (cadena2==NULL) { printf("path incorrecto\n"); return 0; } strcpy(protocolo,cadena2); cadena2 = strtok(NULL, "/"); if (cadena2==NULL) { printf("path incorrecto\n"); return 0; } strcpy(sr_cl,cadena2); cadena2 = strtok(NULL, "/"); if (cadena2==NULL) { printf("path incorrecto\n"); return 0; } strcpy(dir_serv,cadena2); args->path = path; args->fd = fd; if ((strcmp(protocolo,"TCP")==0) && (strcmp(sr_cl,"servidor")==0) && (strchr(dir_serv,'@')==NULL)) { pthread_create(&thread,NULL,new_connection,args); pthread_join(thread,(void *)&status); } else { cadena[0]='f'; FD_ZERO(&rfds); FD_SET(fd, &rfds); tv.tv_sec = 0; tv.tv_usec = 0; valret = select(fd+1, &rfds, NULL, NULL, &tv); if (valret) { while(cadena[0] != '\0') { bytesleidos=read(fd,cadena,1); printf("%c",cadena[0]); } cadena[0]='\0'; printf("\n"); } } close(fd); return 0; } int cat_wr(char *path) { int fd, nbytes; int n=0; char *cadena; char *protocolo; char c; char *caracter; struct sockaddr_in peer; fd_set rfds; struct timeval tv; int valret; int lon_peer; cadena=(char*)malloc(sizeof(char)*5000); caracter=(char*)malloc(sizeof(char)); fd = open(path,1,644); if (fd==-1) { printf("path incorrecto\n"); return 0; } while((c=getchar())!=EOF) { cadena[n++]=c; } n=0; while (cadena[n] != '\0') { caracter[0]=cadena[n]; nbytes=write(fd,caracter,1); if (nbytes==-1) return 0; ++n; } printf("\n"); caracter[0]=cadena[n]; nbytes=write(fd,caracter,1); close(fd); return 0; } int ls(char *path) { int j=0; int nfiles; struct stat_fich fichs[1024]; bzero((char *) fichs, sizeof(struct stat_fich)*1024); if (path==NULL) { nfiles=read_dir("/",fichs); } else { nfiles=read_dir(path,fichs); } if (nfiles==-1) { printf("alguna clase de error al leer el directorio de comunicaciones\n"); return -1; } for(j=0;j<1024;j++) { if (fichs[j].file!=NULL) { printf("%s\n",fichs[j].file); } } return 0; }