Quiere saber el ESSID de la red inalámbrica a través de C++ en UBUNTU
⏰ 4 minutos de lectura
He escrito el siguiente programa para obtener el ESSID de la red inalámbrica a la que está conectado actualmente mi escritorio, pero me está dando errores. ¿Alguien puede ayudarme a corregir los errores? Código:
Está probando el código de retorno de ioctl(2) incorrectamente. ioctl(2) devuelve -1 en caso de error, no verdadero (distinto de cero). Dado que no se devuelve un error, el valor en errno no está definido y es engañoso.
Editar: con ese código incorrecto fuera del camino, está esto:
id = new char(IW_ESSID_MAX_SIZE+1);
Quizás quisiste decir:
id = new char[IW_ESSID_MAX_SIZE+1];
El primero asignó un solo carácter y establece su valor en IW_ESSID_MAX_SIZE+1. Este último asigna una matriz de tamaño IW_ESSID_MAX_SIZE+1.
Con ese cambio me funciona el código y no da error para el ioctl.
Aunque tienes razón e incluso intenté lo que dijiste, pero el valor devuelto es -1 por ioctl egif (ioctl(sockfd, SIOCGIWESSID, &wreq) == -1) { fprintf(stderr, “Obtener ESSID ioctl falló \n”) ; fprintf(stderr, “errno = %d \n”, errno); fprintf(stderr, “Descripción del error: %s\n”,strerror(errno)); printf(“ESSID es %s\n”, wreq.u.essid.pointer);
– Alan
9 de mayo de 2011 a las 13:35
@Alan: He editado tu pregunta. Por favor, dime si todavía está mal.
– camh
9 de mayo de 2011 a las 13:36
Intenta configurar wreq.u.essid.length al valor correcto.
Para aclarar, wreq.u. conjunto de memoria a cero. essid.length es por lo tanto 0. El errno 7 es un poco engañoso, pero básicamente “su espacio reservado indicado no es lo suficientemente largo para contener el valor”.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información