Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
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


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
La Camera USA presenta il conto: i data ...
Non solo EV, ma anche IA: Panasonic inau...
iPhone Duo, il debutto del pieghevole di...
Atlas 960E SuperPoD, la risposta di Huaw...
IA militare e nucleare: esperti USA e ci...
Dieci mini-reattori nucleari in Europa d...
CONTROL Resonant su PC: Path Tracing, Ra...
ColorOS 17 arriva su circa 90 dispositiv...
GTA VI, il multiplayer potrebbe debuttar...
Aggiornamento KB5002914 rompe Excel: ecc...
Processo Huawei a Brooklyn: l'FBI mostra...
WhatsApp introduce nuovi temi per le cha...
NVIDIA, Google e Emerald AI uniscono le ...
iPhone 18 Pro Max, il test sulla vapor c...
Fine estate in giardino: le proposte sco...
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: 00:25.


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