Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr sbarca ufficialmente in Italia con tre modelli elettrici premium, X, 7X e 001, distribuiti da Jameel Motors su una rete di 52 punti vendita già attivi. La Zeekr X parte da 39.900 euro, la 7X da 54.100: piattaforma a 800V, chip Snapdragon di ultima generazione, ricarica ultraveloce e un'autonomia dichiarata fino a 615 km WLTP. Le prime consegne sono previste a metà aprile
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-05-2010, 12:06   #1
esoni
Junior Member
 
Iscritto dal: May 2010
Messaggi: 21
[C] LETTURA FORMATTATA DA FILE

CIAO devo fare un esercizio per la mia università,
aprire il file /etc/passwd . Si tratta di un file di testo, in cui ogni riga contiene le informazioni di un utente, e i campi all'interno di una riga sono separati da ':'. Per esempio, la riga

operator:x:37:12:Operator:/var:/bin/sh

ha il seguente significato:

* operator è il nome di login dell'utente;(stringa)
* x rappresenta il campo password (sui sistemi del Centro di Calcolo sono in uso le shadow password, per cui la password non è visibile; (stringa ,se non visibile questo campo contiene x)
* 37 è l'ID numerico dell'utente;(int)
* 12 è l'ID numerico del gruppo a cui appartiene l'utente (a volte i due valori coincidono);(int)
* Operator è il nome in chiaro dell'utente;(stringa)
* /var è l'home directory dell'utente;(stringa
* /bin/sh è la shell di login (e di default) dell'utente. (stringa)
operator:x:37:12:Operator:/var:/bin/sh


Sui sistemi UNIX, le password degli utenti sono memorizzate nel file /etc/passwd.

Si scriva un programma C che legga il file /etc/passwd, spezzando opportunamente i campi, e stampi in output i nomi in chiaro (quinto campo) di tutti gli utenti che hanno /bin/false come shell di default (ultimo campo), indicando che questi utenti non possono in nessun caso connettersi al sistema (si tratta di utenti "virtuali").

È possibile affrontare l'esercizio in (almeno) due modi:

1. leggendo le righe del file con fgets(), e usando poi dei puntatori a carattere all'interno della stringa per identificare i campi, oppure
2. usando la funzione fscanf() con le specifiche di formato %[^...] e %* (si veda il manuale: man fscanf) per spezzare automaticamente le righe al momento della lettura e assegnare solo i campi di interesse.

-------------------------------------------------------------------------------------------------------------------------------------
SONO INTERESSATO ALLA VERSIONE CON FSCANF!!!
la mia difficoltà sta inanzitutto nello spezzare i campi di ogni riga e salvare il loro contenuto.
avevo pensato una cosa del genere

while(scan!=EOF)
{
scan=fscanf(stream, "%s\t%s\t%d\t%d\t%s\%s\t%s", sutente,x,&utente,&gruppo,operator,home,shell);
}
ma la soluzione è errata quindi vorrei sapere come far andare ogni volta ogni campo nella propria variabile grazie
esoni è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2010, 14:58   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
http://www.google.it/search?hl=it&sa...=&oq=&gs_rfai=

PS: nota che la soluzione ti era anche stata suggerita nel testo: con le specifiche di formato %[^...] e %*
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2010, 19:11   #3
esoni
Junior Member
 
Iscritto dal: May 2010
Messaggi: 21
se mi puoi chiarire con un esempio te ne sarei grato ;-)
esoni è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2010, 22:48   #4
esoni
Junior Member
 
Iscritto dal: May 2010
Messaggi: 21
seguendo l esempio ho fatto questa mia versione provando intanto se andava x la prima riga...ma stampa caratteri strani
FILE *stream;
char sutente[20];
char x[20];
int utente;
int gruppo;
char operator[20];
char home[20];
char shell[20];
int scan=0;
stream = fopen("/etc/passwd", "r");


if ((stream = fopen("/etc/passwd", "r")) == NULL)
{
printf("Non posso aprire il file %s", "/etc/passwd.txt");
exit(1);
}else

scan=fscanf(stream, "[^':'],[^':'],[^':'],[^':'],[^':'],[^':'],[^':']", sutente,x,&utente,&gruppo,operator,home,shell);
printf("%s %s %d %d %s %s %s", sutente, x,utente,gruppo,operator,home,shell);

che sbaglio?
esoni è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2010, 23:42   #5
esoni
Junior Member
 
Iscritto dal: May 2010
Messaggi: 21
SCUSATE AVEVO SBAGLIATO IL CODICE... HO AGGIUSTATO MA NON FUNZIONA =
#include <stdlib.h>
#include <malloc.h>
#include <ctype.h>
#include<string.h>
#include<stdio.h>
int main(){
FILE *stream;
char buf[200];
char sutente[20];
char x[20];
char ut[20];

int utente;
char gr[20];
int gruppo;
char operator[20];
char home[20];
char shell[20];
int scan;

stream = fopen("/etc/passwd", "r");
scan=fscanf(stream, "%[^':'],%[^':'],%[^':'],%[^':'],%[^':'],%[^':'],%s",sutente, x, ut,gr,operator,home,shell);
utente=atoi(ut);
gruppo=atoi(gr);
printf (" %s %s %s %s %s %s %s",sutente,x,ut,gr,operator,home,shell);



MI DOVREBBE STAMPARE LA 1 RIGA DEL FILE PSWD,USANDO IL CONTENUTO DELLE VARIABILI MA STAMPA COSE STRANE
esoni è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 08:03   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Che ci fa la virgola ? Il tuo delimitatore non è la virgola. Comunque di esempi ne trovavo se andavi a vedere nella ricerca che ti avevo linkato.

Ultima modifica di cionci : 06-05-2010 alle 08:05.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 08:35   #7
esoni
Junior Member
 
Iscritto dal: May 2010
Messaggi: 21
hai ragione ! risolto ,sostituito i : con la virgola...
un ultima cosa per fare il ciclo X LEGGERE ogni riga fino a fine file, come faccio ?



scan=fscanf(stream, "%[^':'],%[^':'],%[^':'],%[^':'],%[^':'],%[^':'],%s",sutente, x, ut,gr,operator,home,shell);

while(scan!=EOF)
{
scan=fscanf(stream, "%[^':']:%[^':']:%[^':']:%[^':']:%[^':']:%[^':']:%s",sutente, x, ut,gr,operator,home,shell);
//STAMPO ARG CHE MI INTERESSANO
}


INVECE MI STAMPA VALORI ALL INFINITO....STRANO XCHE HO TROVATO UN PROGRAMMA SIMILI E AVEVA LA MEDESIMA SOLUZIONE...CHE SBAGLIo?
esoni è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 08:49   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
c'è una funzione che si chiama feof()
Quella situazione l'hai trovata quando si va a leggere un carattere alla volta e non è questo il caso.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 09:33   #9
esoni
Junior Member
 
Iscritto dal: May 2010
Messaggi: 21
ho aggiustato con la feof() come mi hai dettio te ma continua a stampare in loop infiniti valori...
------
mio codice:VORREI STAMPARE DI OGNI RIGA DI PASSWD IL 5° E IL 7° CAMPO


int main(){
FILE *stream;
int result;
char t[20];
char u[20];
stream=fopen("/etc/passwd","r");
if ((stream = fopen("/etc/passwd", "r")) == NULL)
{
printf("Non posso aprire il file %s", "fo");
exit(1);
}


result = fscanf(stream,"%*[^':']:%*[^':']:%*[^':']:%*[^':']:%[^':']:%*[^':']:%s",t,u);
while(!feof(stream)) {

printf("%s %s",t,u);
result = fscanf(stream,"%*[^':']:%*[^':']:%*[^':']:%*[^':']:%[^':']:%*[^':']:%s",t,u);
}
fclose(stream);
}


HELP STO IMPAZZENDO
esoni è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
Le 10 migliori offerte Amazon di Pasqua:...
Nuove fotografie dagli astronauti di Art...
La toilette della capsula Orion Integrit...
GeForce NOW: ecco tutte le novità in arr...
Il Realme 16 5G debutta sul mercato glob...
HONOR svela tre nuovi tablet: il più int...
Tineco Floor One S9 Master: aspira e pul...
Vivo X300 Ultra, il lancio globale è ini...
Offerte robot aspirapolvere Amazon: ECOV...
L'AI genera codice in 8 minuti e i senio...
Ring Intercom Audio a 44,99€ su Amazon: ...
Apple iPhone 16 crolla a 689€: ecco perc...
Google Pixel 9 a 449,90€ con caricatore ...
Ecco la top 7 delle offerte Amazon, aggi...
Ex ingegnere ammette il sabotaggio: migl...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:01.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v