Torna indietro   Hardware Upgrade Forum > Software > Programmazione

OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
Abbiamo partecipato all'OVHcloud Summit 2025, conferenza annuale in cui l'azienda francese presenta le sue ultime novità. Abbiamo parlato di cloud pubblico e privato, d'intelligenza artificiale, di computer quantistici e di sovranità. Che forse, però, dovremmo chiamare solo "sicurezza"
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a
Abbiamo potuto mettere le mani in anteprima sul nuovo monitor MSI dedicato ai giocatori: un mostro che adotta un pannello QD-OLED da 26,5 pollici con risoluzione 2560 x 1440 pixel, frequenza di aggiornamento fino a 500 Hz e tempo di risposta di 0,03 ms GtG
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI aggiorna la sua linea di droni ultraleggeri con Neo 2, un quadricottero da 160 grammi che mantiene la compattezza del predecessore ma introduce una stabilizzazione meccanica a due assi, sensori omnidirezionali e un sistema LiDAR
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-05-2010, 13: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, 15: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, 20: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, 23: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 06-05-2010, 00: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, 09: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 09:05.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 09: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, 09: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, 10: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


OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro DJI Neo 2 in prova: il drone da 160 grammi guada...
L'IA "seria" di Appian è diversa: inserita nei processi e rispetta dati e persone L'IA "seria" di Appian è divers...
Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Il produttore tedesco di videocamere per...
La missione Transporter-15 di SpaceX ha ...
Il lancio del razzo spaziale riutilizzab...
Google integra la AI Mode anche in Cerch...
Apple Maps e Ads sono Gatekeeper? L'Euro...
Il nuovo pieghevole Huawei Mate X7 &egr...
L'app Apple Podcasts si comporta in modo...
Una copia fisica di Fortnite è st...
Motorola prepara il suo primo smartphone...
Hisense in forte ribasso: il 75 pollici ...
Galaxy S27 Ultra potrebbe utilizzare la ...
Ultimi 2 giorni: ecco le offerte Amazon ...
Maxi sconti su wallbox e cavi per la ric...
Tutti gli sconti più forti sugli ...
Il prossimo smartphone di OnePlus avr&ag...
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: 05:38.


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