Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 30-12-2006, 19:55   #1
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
[C] Alcuni problemi riguardo la exec()

Ciao.

Sto creando una piccola shell in C. Ho alcuni problemi:

1 - Eseguendo la execvp ad esempio con ls, ho l'output di ls normalmente; se invece aggiungo un argomento ad esempio per eseguire ls -l non mi fa vedere l'output come dovrebbe essere con l'opzione -l ma me lo fa vedere come se non ci fosse tale opzione. E' come se ignorasse gli argomenti, non capisco perché.

2 - Nella gestione del segnale (fatta da me) di SIGQUIT quando premo la combinazione di tasti CTRL-\ mi scrive Quit (core dumped) ed esce dalla shell. E' normale come comportamento?

3 - Per quanto riguarda i comandi builtin della mia shell, ho creato un file txt con una lista di comandi interni (tipo alias, cd, pwd ecc.). Il problema è che qualsiasi comando faccia partire di questi, la execvp mi ritorna sempre con un errore dicendo "No such file or directory".

Ditemi se devo postarvi qualche pezzo di codice, perché è molto lungo. Grazie.
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 30-12-2006, 20:49   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Manugal
1 - Eseguendo la execvp ad esempio con ls, ho l'output di ls normalmente; se invece aggiungo un argomento ad esempio per eseguire ls -l non mi fa vedere l'output come dovrebbe essere con l'opzione -l ma me lo fa vedere come se non ci fosse tale opzione. E' come se ignorasse gli argomenti, non capisco perché.
Ecco un banale esempio (senza fork per cui sostituisce il processo e basta).
Codice:
#include <stdio.h>
#include <unistd.h>

int main (void)
{
    char *args[4];

    args[0] = "ls";
    args[1] = "-laA";
    args[2] = "/tmp";
    args[3] = NULL;

    execvp (args[0], args);  /* Lancia: ls -laA /tmp */

    return 0;
}
Quote:
Originariamente inviato da Manugal
3 - Per quanto riguarda i comandi builtin della mia shell, ho creato un file txt con una lista di comandi interni (tipo alias, cd, pwd ecc.). Il problema è che qualsiasi comando faccia partire di questi, la execvp mi ritorna sempre con un errore dicendo "No such file or directory".
Beh, certo è normale! Se sono comandi "built-in" vuol dire che non sono degli eseguibili esterni presenti in qualche punto del file-system!!

Quando la shell riceve un comando "built-in" dal prompt (o leggendo uno script), ad esempio il comando 'cd', non avvia nulla di esterno. Per il comando 'cd', esso fa nient'altro che chiamare la funzione di sistema int chdir(const char *path);, in modo da cambiare la directory corrente dentro il processo della shell.

Spero cioè di essermi spiegato: molti dei comandi built-in operano sullo stato interno della shell e spesso chiamano semplicemente delle funzioni di sistema. Così, se nella "tua" shell vuoi implementare in comando "pwd", quando lo ricevi (da prompt) devi fare semplicemente così: chiamare la funzione getcwd() e stampare il path ottenuto.
Nota: poi se vai a vedere la documentazione della bash, vedi che pwd ha 2 opzioni: -L e -P. Dipende se devi "replicare" fedelmente la bash oppure no, ma questo tocca a te decidere in base a cosa vuoi/devi fare.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 30-12-2006, 21:02   #3
Devil_Dante
Junior Member
 
Iscritto dal: Dec 2006
Messaggi: 4
Ciao manugal..per caso stai svolgendo questo progetto per l'esame di laboratorio di sistemi della sapienza a roma? perchè anche io devo svolgere lo stesso progetto proprio per questa materia!! Se possibile avrei bisogno di qualche consiglio a riguardo; sono a metà progetto ma ci sono dei punti poco chiari. Fammi sapere
Ciao a presto!
Devil_Dante è offline   Rispondi citando il messaggio o parte di esso
Old 30-12-2006, 21:10   #4
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Ah quindi per i comandi interni devo ogni volta chiamare la funzione appropriata? Questo significa che ogni comando ha la sua funzione (cioè fg ha la sua funzione, bg anche, echo anche ecc.) giusto? Saranno almeno una trentina i comandi builtin. Dove le trovo tutte le funzioni associate a ciascun comando?

Per quanto riguarda la prima domanda ad args[0] gli passo direttamente tutto il path del comando, mentre gli altri argomenti li passo tali e quali come mi hai fatto vedere tu. Ma lui si ostina a farmi vedere ls come se lo passassi senza ulteriori argomenti. Non capisco perché. Dimmi se ti serve qualche pezzo di codice.

Grazie.

P.S. Devil_Dante hai un PM
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 30-12-2006, 21:16   #5
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1453
Quote:
Originariamente inviato da Manugal
Ah quindi per i comandi interni devo ogni volta chiamare la funzione appropriata? Questo significa che ogni comando ha la sua funzione (cioè fg ha la sua funzione, bg anche, echo anche ecc.) giusto? Saranno almeno una trentina i comandi builtin. Dove le trovo tutte le funzioni associate a ciascun comando?

Per quanto riguarda la prima domanda ad args[0] gli passo direttamente tutto il path del comando, mentre gli altri argomenti li passo tali e quali come mi hai fatto vedere tu. Ma lui si ostina a farmi vedere ls come se lo passassi senza ulteriori argomenti. Non capisco perché. Dimmi se ti serve qualche pezzo di codice.

Grazie.

P.S. Devil_Dante hai un PM
controlla bene che non fai cosi
execve("ls","-l"), ma bisogna fare come andbin giustamente ti mostra
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 31-12-2006, 11:47   #6
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Guarda controllando con il debugger gdb vedo proprio che gli passa ls e poi -l seguito da NULL. Non capisco perché non mi interpreta il -l.
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 31-12-2006, 15:06   #7
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Finalmente ci sono riuscito. Grazie mille a tutti.
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 31-12-2006, 16:25   #8
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1453
Quote:
Originariamente inviato da Manugal
Finalmente ci sono riuscito. Grazie mille a tutti.
ps.
Regola fondamentale, quando si risolve un problema va detto anche come lo si è risolto, per due motivi :
1) Altri potrebbero avere lo stesso tuo problema, cercando trovano pure la soluzione
2) Per curiosità di chi ti ha aiutato, per vedere se ha beccato il problema

Buon anno
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 01-01-2007, 13:47   #9
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Ok. Praticamente ho risolto chiamando execvp("ls", "ls -l",NULL); cioè vale a dire che "ls -l" è un argomento unico e così lo riesce ad interpretare correttamente.

Ciao e buon anno.
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 01-01-2007, 15:57   #10
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Manugal
Ok. Praticamente ho risolto chiamando execvp("ls", "ls -l",NULL);
Assolutamente sbagliato!! execvp ha il seguente prototipo:

int execvp(const char *file, char *const argv[]);

Il secondo parametro deve essere un array di puntatori a char, non un puntatore a char!!! E il compilatore dovrebbe pure arrabbiarsi.

Se vuoi proprio passare direttamente i parametri nella chiamata, potresti al massimo usare la funzione execlp (nota la 'l' invece della 'v'). Il mio esempio che ho postato prima lo potrei riscrivere con execlp così:

execlp ("ls", "ls", "-laA", "/tmp", NULL);

Ma ripeto, usare execvp come hai appena detto tu, è sbagliato.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 02-01-2007, 15:42   #11
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Scusa io gli passo un array di puntatori a char (cioè args che è la variabile che ho creato appositamente). Faccio una chiamata così execvp(name,args); (con name che è essenzialmente "ls") solamente che args[0]="ls -l" e args[1]=NULL. Non gli passo infatti un puntatore a char. Se invece args[0]="ls", args[1]="-l" e args[2]=NULL allora così non funziona.
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 02-01-2007, 15:57   #12
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Manugal
Scusa io gli passo un array di puntatori a char
Ah ... volevo dire! Dal tuo precedente post si capiva tutta un'altra cosa ....

Quote:
Originariamente inviato da Manugal
(cioè args che è la variabile che ho creato appositamente). Faccio una chiamata così execvp(name,args); (con name che è essenzialmente "ls") solamente che args[0]="ls -l" e args[1]=NULL.
Così è sbagliato e infatti non dovrebbe funzionare (a me non funziona)

Quote:
Originariamente inviato da Manugal
Se invece args[0]="ls", args[1]="-l" e args[2]=NULL allora così non funziona.
No, così è corretto e dovrebbe funzionare (e a me funziona).


Ti costa molto verificare che:
Codice:
char *args[2];
args[0] = "ls -l";
args[1] = NULL;
execvp ("ls", args);
così non funziona


e che invece:
Codice:
char *args[3];
args[0] = "ls";
args[1] = "-l";
args[2] = NULL;
execvp ("ls", args);
così funziona.

?
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 02-01-2007, 16:05   #13
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Boh strano. Adesso l'ho provato su un sorgente nuovo e funziona come dici tu . Però a me sul programma che sto facendo funziona. Forse mi sono sbagliato a dirti che gli passo gli argomenti in quel modo, mentre in realtà li passo con il tuo sistema. Perché se funziona e fa quello che deve fare è corretto no?
Manugal è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Dal MIT una nuova batteria per auto elet...
Adam Mosseri parla di IA su Instagram: l...
Suonerie personalizzate e Tone Store: il...
LG UltraGear evo: svelati i monitor gami...
Nelle offerte Amazon del nuovo anno ci s...
Meta Quest 3 da 512 GB torna a 469€ con ...
Steam a inizio 2026: i giochi più vendut...
Auto sempre al top: compressore Xiaomi, ...
In Francia si ragiona sul ban dei social...
Tesla Model Y è l'auto più...
Il caricatore definitivo, ok anche coi M...
Amazon Haul rilancia: sconti automatici ...
Upgrade PC a prezzi ribassati: Amazon sc...
Nel mirino dell'Europa ci sono caminetti...
2 portatili super su Amazon: quello con ...
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: 12:21.


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