int main(int argc, char const *argv[]) { char buff[BUFF_SIZE], debug; const char *programa, *host; int port, s, file, readed; if (argc == 4) { debug = 0; programa = argv[1]; host = argv[2]; port = atoi(argv[3]); } else if (argc == 5 && strcmp(argv[1], "-d")==0) { debug = 1; programa = argv[2]; host = argv[3]; port = atoi(argv[4]); } else { fprintf(stderr,"Uso: %s [-d] programa host port\n", argv[0]); exit(EXIT_FAILURE); } if ((s = j_socket()) == -1) { perror("Error de Socket"); exit(1); } if (j_connect(s, host, port) == -1) { perror("Error de Conexion"); exit(1); } if(!(file = open(programa,O_RDONLY,0))) { perror("Error del Archivo"); exit(1); } while ((readed = read(file, buff, BUFF_SIZE))>0) write(s,buff,readed); buff[0]=EOF; write(s,buff,1); startWish(s,debug); close(s); waitWish(); exit(0); }
/* instrucciones posibles: (getDisps), (disp_id opc val) */ main(int argc, char *argv[]) { /* Validaciones */ /* 1: validar cantidad de argumentos */ checkError(!( ((argc>1)&&(strcmp(argv[1],"getDisps")==0)) || (argc>=4) ), "Faltan argumentos"); if ((argc > 4) && (CVERBOSE)){ printf("Exceso de argumentos. Se ignorarán los argumentos extra\n"); } /* 2: validar valores */ /* 2.0: validar si es petición de nombres de dispositivos */ char getDisps=0; if (strcmp(argv[1],"getDisps")==0) getDisps=1; /* 2.1: validar número de dispositivo */ int disp_id, param_index; char *value; if (!getDisps){ disp_id=(int)strtol(argv[1],NULL,10); checkError((errno==EINVAL)||(errno==ERANGE), "Id de dispositivo inválida"); checkError(disp_id>=NDISP, "No existe el dispositivo"); /* 2.2: validar parámetro a configurar */ char *param=argv[2]; param_index=isParam(param); printf("param_index es %d\n",param_index); checkError((param_index==-1),"Opción inválida"); /* 2.3: validar valor del parametro */ value=argv[3]; checkError(isValue(value, param_index)==0, "Valor inválido para el parámetro"); /* Pasó las validaciones. A partir de ahora, todos los datos son totalmente limpios */ } int s; int cnt, n; char input[BUF_SIZE]; char output[BUF_SIZE]; int port=1818; /* Concatenar parámetros en un string entendible por el raspberry */ if (getDisps) sprintf(input, "getDisps"); else sprintf(input, "%d-%d-%s", disp_id, param_index, value); s = j_socket(); checkError(j_connect(s, "localhost", port) < 0, "Servidor no responde"); //write(a,b,c) escribe hasta c bytes en el fd a, lo que está en el buffer b. Retorna cantidad de bytes escritos. int cuantos = write(s, input, strlen(input) +1); if (CVERBOSE) printf("%d bytes enviados al servidor\n", cuantos); //read(a,b,c) lee desde a, hasta c bytes y los guarda en buffer b. Retorna cantidad de bytes leidos, hasta EOF (0, '\0'). cnt=read(s, output, BUF_SIZE); if (CVERBOSE) printf("Respuesta del server: "); if (strcmp(output,"OK")==0) printf("OK\n"); else printf("%s\n",output); if (CVERBOSE) printf("%d bytes leidos del servidor\n",cnt); close(s); }