Пример #1
0
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);
}
Пример #2
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);
}