Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-08-2005, 16: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, 17: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, 17: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, 17: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, 17: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, 17: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, 17: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, 17: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, 11: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, 11: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, 12: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, 12: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, 12: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, 13: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, 15: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, 15: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, 16: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, 16: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 16:28.
fantoibed è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2005, 16: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, 17: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 HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
Qualcomm potrebbe utilizzare una tecnolo...
Starfield per Nintendo Switch 2 potrebbe...
Un MacBook Pro a -300€, i MacBook Air M4...
Amazon abbassa i prezzi sugli iPhone: sc...
Amazon, ancora sconti sugli smartphone A...
iPhone Air 2 'riciclerà' alcuni c...
Offerta Amazon da non perdere: lo speake...
Nioh 3 debutta alla grande su Steam: pri...
Al centro della Via Lattea ci potrebbe e...
Elon Musk ora guarda alla Luna: SpaceX p...
La Cina ha lanciato nuovamente lo spazio...
Blue Origin potrebbe realizzare il lande...
Artemis II: il prossimo Wet Dress Rehear...
Il nuovo HONOR 600 sta arrivando e avr&a...
La crisi delle memorie non coinvolger&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: 11:46.


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