Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto
Samsung rinnova la serie pieghevole di punta con Galaxy Z Fold8 Ultra: pannello interno da 8 pollici quasi senza piega, cerniera Flex Titanium, Snapdragon 8 Elite Gen 5 for Galaxy e batteria finalmente da 5.000 mAh. Prezzo italiano da 2.299 a 2.899 euro. Tra colorimetro, benchmark reali e giorni di uso quotidiano, ecco dove questo pieghevole convince e dove il nome Ultra fatica ancora a trovare piena giustificazione
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing"
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing"
La nuova Insta360 X6 introduce sensori Sony da 1/1.1" e un SoC Triple AI a 4nm. Analizziamo le riprese 8K, il primo Dolby Vision nativo a 10-bit nel settore sferico e l'innovativo flusso di lavoro diretto sulla futura versione 22 di DaVinci Resolve.
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli
Dopo due settimane trascorse al volante della Dacia Spring 2026 possiamo raccontarvi tutto, dalle novità di motore e batteria, fino ai consumi in tutti le situazioni, compresa l'autonomia reale ad alta velocità
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-08-2005, 15:42   #1
Corvo80
Member
 
Iscritto dal: Dec 2004
Città: Treviso e Udine
Messaggi: 258
[C e Linux] Come si fa?

Salve a tutti, premesso che sono solo alle prime armi con la programmazione in C mi chiedevo se poteste darmi una mano. Essenzialmente dovrei scrivere un semplice programmino che stampi sullo schermo un istogramma orizzontale del numero di processi per ogni utente, del tipo:

root: ******
mario: ***
antionio: ****
etc...

Sia chiaro: non voglio che mi facciate voi il programma, vorrei solo qualche dritta dato che sto navigando in alto mare. Vi ringrazio per qualunque consiglio possiate offrirmi.

Corvo80 è offline   Rispondi citando il messaggio o parte di esso
Old 22-08-2005, 16:01   #2
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
in queste cose io non sono molto esperto,però mi sembra una cosa simile al comando ps con le relative opzioni.Di sicuro c'è il sorgente a disposizione,potresti utilizzarlo come base per il tuo studio.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 22-08-2005, 16:03   #3
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Dai una occhiata in /proc, alle sottodirectory con un numero come nome. Ciascuna corrisponde a un processo, e il proprietario della directory è il proprietario del processo.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 22-08-2005, 16:09   #4
Corvo80
Member
 
Iscritto dal: Dec 2004
Città: Treviso e Udine
Messaggi: 258
Quote:
Originariamente inviato da RaouL_BennetH
in queste cose io non sono molto esperto,però mi sembra una cosa simile al comando ps con le relative opzioni.Di sicuro c'è il sorgente a disposizione,potresti utilizzarlo come base per il tuo studio.
Veramente contavo proprio di usare ps come system call all'interno del programma, solo che non mi pare ci siano abbastanza opzioni per quello che devo fare io...



Quote:
Originariamente inviato da ilsensine
Dai una occhiata in /proc, alle sottodirectory con un numero come nome. Ciascuna corrisponde a un processo, e il proprietario della directory è il proprietario del processo.
Grazie ma a questo punto è come usare il comando ps...
Corvo80 è offline   Rispondi citando il messaggio o parte di esso
Old 22-08-2005, 16:14   #5
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
ps non è una syscall, ma puoi invocarlo da programma e reindirizzarne l'output su un descrittore aperto dal programma. Stessa cosa puoi fare con top.
Poi però devi interpretare da programma l'output, che è stampato in un formato umanamente leggibile.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 22-08-2005, 16:28   #6
Corvo80
Member
 
Iscritto dal: Dec 2004
Città: Treviso e Udine
Messaggi: 258
Ok ho elaborato un'idea di algoritmo (in linguaggio ipotetico), ditemi se concettualmente può fungere:

1) Stampa il risultato di ps a file1 (con tutte le opzioni necessarie)
2) Pulisci file1 in modo da lasciare solo gli username (1 riga per ogni processo)
3) Considera il primo user
4) Richiamo a comando shell "grep" per sapere quante volte esso compare nel file, ovvero quanti processi ci sono per quell'user.
5) Append a file2 del tipo: "tizio: *********** " tramite ciclo for e a capo.
6) Cancella le prime righe su file1 (quelle dell'user precedentemente trovato)
7) Se file1 non è vuoto torna a punto 3) [ovviamente parliamo di programmazione strutturata quindi questa schifezza verrà tradotta in un ciclo while... ^_^]
8) Stampa a schermo file2
Corvo80 è offline   Rispondi citando il messaggio o parte di esso
Old 22-08-2005, 16:49   #7
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da Corvo80
1) Stampa il risultato di ps a file1 (con tutte le opzioni necessarie)
Ci sono metodi MOLTO più eleganti di insozzare il file system con file temporanei
Quote:
4) Richiamo a comando shell "grep" per sapere quante volte esso compare nel file, ovvero quanti processi ci sono per quell'user.
Se intendi usare grep e magari anche sed o altro per fare il "lavoro sporco", puoi anche considerare l'uso di un linguaggio di script (perl, bash, ecc.) senza scomodare un linguaggio compilato...
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 22-08-2005, 16:52   #8
Corvo80
Member
 
Iscritto dal: Dec 2004
Città: Treviso e Udine
Messaggi: 258
Quote:
Originariamente inviato da ilsensine
Ci sono metodi MOLTO più eleganti di insozzare il file system con file temporanei
Ecco, ad esempio? Cmq contavo di farlo cancellare al termine della computazione...

Quote:
Originariamente inviato da ilsensine
Se intendi usare grep e magari anche sed o altro per fare il "lavoro sporco", puoi anche considerare l'uso di un linguaggio di script (perl, bash, ecc.) senza scomodare un linguaggio compilato...
Eh... purtroppo devo farlo in C. Cmq per il resto dovrebbe funzionare, no?
Corvo80 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2005, 10:45   #9
Corvo80
Member
 
Iscritto dal: Dec 2004
Città: Treviso e Udine
Messaggi: 258
Ok ho fatto. Il programma è funzionante anche se un po'sporco... Ora però dovrei apportare una modifica:

dovrei fare in modo che esso accetti come argomento un nome utente particolare e, in questo caso, stampare una stringa del tipo:

"utente tizio n processi"

Ovviamente devo fare riferimento ad argc per sapere se ci sono argomenti e ad argv[1] per leggere il primo, il problema è che non riesco a comparare la stringa contenuta in argv[1] con l'array di caratteri che leggo dal file...

Qualche idea?
Corvo80 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2005, 10:55   #10
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
ps uxU pippo
Restituisce solo i processi dell'utente pippo
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2005, 11:30   #11
Corvo80
Member
 
Iscritto dal: Dec 2004
Città: Treviso e Udine
Messaggi: 258
Quote:
Originariamente inviato da ilsensine
ps uxU pippo
Restituisce solo i processi dell'utente pippo
Ok ma il problema è lo stesso: come faccio a passare allo script il nome "pippo" che il programma c deve leggere dall'argomento argv[1]?

Corvo80 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2005, 11:33   #12
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Formatti con snprintf la stringa da passare alla chiamata system/exec.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2005, 11:46   #13
Corvo80
Member
 
Iscritto dal: Dec 2004
Città: Treviso e Udine
Messaggi: 258
Grazie, credo fosse la risposta che cercavo. Ora purtroppo devo uscire ma questo pomeriggio provo.

PS Devo includere qualche libreria particolare?
Corvo80 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2005, 12:27   #14
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da Corvo80

PS Devo includere qualche libreria particolare?
Ovvio

Codice:
#include <ilsensine.h>
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2005, 14:30   #15
Corvo80
Member
 
Iscritto dal: Dec 2004
Città: Treviso e Udine
Messaggi: 258
Ok grazie ancora.

Qualcuno mi spiega la sintassi di snprintf e sprintf? (n° e tipo di argomenti, come si usa, etc...) purtroppo non ho un manuale di C, ho provato a cercare in Internet ma non ho trovato...

Corvo80 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2005, 14:41   #16
fantoibed
Senior Member
 
L'Avatar di fantoibed
 
Iscritto dal: May 2003
Città: Trieste, Pordenone
Messaggi: 920
Quote:
Originariamente inviato da Corvo80
Qualcuno mi spiega la sintassi di snprintf e sprintf? (n° e tipo di argomenti, come si usa, etc...) purtroppo non ho un manuale di C, ho provato a cercare in Internet ma non ho trovato...
http://www.die.net/doc/linux/man/man3/snprintf.3.html

Tra sprintf e snprintf ti consiglio sempre la seconda.

PS: Occhio ai buffer overflow!
__________________
buy here
fantoibed è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2005, 15:11   #17
Corvo80
Member
 
Iscritto dal: Dec 2004
Città: Treviso e Udine
Messaggi: 258
Come al solito siete stati gentilissimi.

Ora la prova del nove...

Se ho capito bene, per far si' che la stringa contenuta in argv[1] sia formattata e reperibile dovro- scrivere:

sprintf(argomento, argv[1]);

essendo argomento un puntatore a caratteri, giusto?
Corvo80 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2005, 15:21   #18
fantoibed
Senior Member
 
L'Avatar di fantoibed
 
Iscritto dal: May 2003
Città: Trieste, Pordenone
Messaggi: 920
Manca il formato.

sprintf(argomento, formato, variabile);

sprintf(argomento, "%s", argv[1]);

Ovviamente argomento dovrà contenere abbastanza spazio, sia che l'allocazione sia stata fatta staticamente che dinamicamente.

Se hai bisogno di un maggiore controllo sugli argomenti passati da linea di comando, ti consiglio di guardare anche getopt():

http://www.die.net/doc/linux/man/man3/getopt.3.html
__________________
buy here

Ultima modifica di fantoibed : 24-08-2005 alle 15:28.
fantoibed è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2005, 15:49   #19
Corvo80
Member
 
Iscritto dal: Dec 2004
Città: Treviso e Udine
Messaggi: 258
segmentation fault

Corvo80 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2005, 16:05   #20
Corvo80
Member
 
Iscritto dal: Dec 2004
Città: Treviso e Udine
Messaggi: 258
Ok mi sembra di impazzire: ho risolto il problema della segmentation fault ma ora ho un altro problema:

ho lanciato il programma con argomento knoppix:

a.out knoppix

ora, fila tutto liscio come l'olio fino a...

if (argomento == outp)
{
...
}


ma il risultato della condizione e' false

questo non ha senso, ho anche provato a far stampare i valori di argomento e outp prima del check e sono identici! Come mai?!!!

Corvo80 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto Recensione Samsung Galaxy Z Fold8 Ultra: il pieg...
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing" Insta360 X6: Dolby Vision, 8K e montaggio "...
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli Due settimane con Dacia Spring 2026: novit&agrav...
AORUS GeForce RTX 5080 INFINITY WOOD 16G: una scheda video diversa dalle altre AORUS GeForce RTX 5080 INFINITY WOOD 16G: una sc...
Hyundai Ioniq 9: dopo due settimane di test non avremmo voluto restituirla Hyundai Ioniq 9: dopo due settimane di test non ...
Vogliono costruire un monumento per Elon...
Ring Intercom Audio crolla a 39,99€ su A...
La Francia blocca il divieto dei social ...
Trump citato in giudizio: chiesto lo sto...
PEC obbligatoria per revisione e passagg...
Il ripulitore di watermark Claude da 4.5...
Xiaomi 17 Ultra scambia il Sole per la L...
È arrivata la migliore e-bike Eng...
Apple Mac mini M4, ecco perché conviene ...
Robot aspirapolvere in offerta su Amazon...
Il nuovo pick-up elettrico di Ford &egra...
Google Pixel 11 arriva su Amazon: preord...
Mega sconti su attrezzi a batteria e rob...
Google Search dà per morto Sam Al...
Il noleggio delle GPU NVIDIA si quota in...
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:42.


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