10/01/2022, 12:25
(Questo messaggio è stato modificato l'ultima volta il: 10/01/2022, 14:29 da al3.)
Salve a tutti, ho bisogno di una mano.
Sto sviluppando un software in C (con interfaccia grafica) per il mio raspberry (con raspbian) e volevo implementare questa funzione. Vorrei avere una pagina nella quale posso effettuare uno scan delle reti wifi (ho un dongle inserito nel Pi). Lo scan viene effettuato (al momento) con una pipe:
Come potete vedere lancio il comando iwlist wlan0 scan | grep ESSID e salvo l'output in un file di testo "scanout.txt"
Così nel file di testo ho una lista di ESSID (anche se un po' disordinata)
Successivamente voglio far vedere gli ESSID all'utente, L'utente quindi ne seleziona uno (quindi a questo punto il mio programma deve tenersi in memoria l'essid selezionato) e poi inserisce la password (il programma si tiene in memoria la pw)
Arrivati quindi a questo punto, lancio il comando che deve far collegare la macchina alla rete.
Io ho fatto così:
Ho appena creato una stringa con all'interno il contenuto del file wpa_supplicant.conf
E ora la vado a copiare con una pipe nella path giusta
Arrivati a questo punto faccio riavviare la macchina.
Questo è il metodo che ho usato ed è "funzionante". Lo metto tra virgolette perchè a quanto pare non sempre funziona e non riesco a capire che problema ci sia.
Siccome non sono molto pratico con il Raspberry chiedo a voi, sto facendo qualcosa di strano?
C'è un modo più semplice di fare tutto ciò?
grazie mille in anticipo
Sto sviluppando un software in C (con interfaccia grafica) per il mio raspberry (con raspbian) e volevo implementare questa funzione. Vorrei avere una pagina nella quale posso effettuare uno scan delle reti wifi (ho un dongle inserito nel Pi). Lo scan viene effettuato (al momento) con una pipe:
Codice:
FILE *pf;
char cmd[100];
sprintf(cmd, "iwlist wlan0 scan | grep ESSID > /home/pi/Desktop/scanout.txt"); // creo il comando
pf=popen(cmd,"r"); // lancio il comando
if (!pf)
return -1;
int pclose(FILE *pf);
Come potete vedere lancio il comando iwlist wlan0 scan | grep ESSID e salvo l'output in un file di testo "scanout.txt"
Così nel file di testo ho una lista di ESSID (anche se un po' disordinata)
Successivamente voglio far vedere gli ESSID all'utente, L'utente quindi ne seleziona uno (quindi a questo punto il mio programma deve tenersi in memoria l'essid selezionato) e poi inserisce la password (il programma si tiene in memoria la pw)
Arrivati quindi a questo punto, lancio il comando che deve far collegare la macchina alla rete.
Io ho fatto così:
Codice:
sprintf(internet,"ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev\n update_config=1\n country=IT\n network={\n ssid=\"%s\"\n psk=\"%s\"\n}\0",ssid,psk);
Ho appena creato una stringa con all'interno il contenuto del file wpa_supplicant.conf
E ora la vado a copiare con una pipe nella path giusta
Codice:
FILE *fp;
fp=fopen("/etc/wpa_supplicant/wpa_supplicant.conf","w");
if (fp==0) return;
fwrite(&internet,sizeof(internet),1,fp);
fclose(fp);
Arrivati a questo punto faccio riavviare la macchina.
Questo è il metodo che ho usato ed è "funzionante". Lo metto tra virgolette perchè a quanto pare non sempre funziona e non riesco a capire che problema ci sia.
Siccome non sono molto pratico con il Raspberry chiedo a voi, sto facendo qualcosa di strano?
C'è un modo più semplice di fare tutto ciò?
grazie mille in anticipo