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 27-12-2011, 11:43   #1
Eddie1985
Senior Member
 
Iscritto dal: Oct 2004
Messaggi: 304
[C] Problema exec + tar

Salve a tutti
dunque ciò che voglio fare è semplice: in un programma C che gira su un sistema Unix-like voglio creare un archivio compresso con il contenuto di una directory (contenuto variabile, che non so a priori).

Ora dal terminale ho visto che basta fare (supponiamo di essere già dentro la directory):
tar -czf nome_archivio *

Pertanto, nel mio programma, dopo la fork faccio:
Codice:
execlp ("tar", "tar", "--exclude", nome_archivio_ext, "-cvzf", nome_archivio_ext, "*", NULL);
Risultato: non funziona e mi dà il seguente errore:
tar: *: funzione "stat" non riuscita: File o directory non esistente
tar: Uscita con stato di fallimento in base agli errori precedenti


Ora provando e riprovando, ho notato che scrivendo:
Codice:
execlp ("tar", "tar", "--exclude", nome_archivio_ext, "-cvzf", nome_archivio_ext, ".", NULL);
tutto funziona perfettamente (notare: ho messo il . anzichè l'*).
Però in questo modo, quando apro l'archivio compresso vi è una cartella . , dentro la quale ci sono i giusto file.
Qualcuno sa dirmi per quale motivo non funziona con l'* ???
Eddie1985 è offline   Rispondi citando il messaggio o parte di esso
Old 27-12-2011, 12:05   #2
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
con la system non riesci a lanciare quel comando??
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 27-12-2011, 12:33   #3
Eddie1985
Senior Member
 
Iscritto dal: Oct 2004
Messaggi: 304
Quote:
Originariamente inviato da tecno789 Guarda i messaggi
con la system non riesci a lanciare quel comando??
si con la system risolvo, però volevo capire perchè non va in questo modo.
Eddie1985 è offline   Rispondi citando il messaggio o parte di esso
Old 27-12-2011, 12:34   #4
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
Quote:
Originariamente inviato da Eddie1985 Guarda i messaggi
si con la system risolvo, però volevo capire perchè non va in questo modo.
ah ok sorry, comunque ci ho provato anche io ma non mi funziona, mi dispiace non so come aiutarti, aspettiamo la risposta di qualcun altro..

__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 27-12-2011, 13:10   #5
Gimli[2BV!2B]
Senior Member
 
L'Avatar di Gimli[2BV!2B]
 
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
Da man bash
Codice:
Pathname Expansion
       After word splitting, unless the -f option has  been  set,  bash  scans
       each  word  for the characters *, ?, and [.  If one of these characters
       appears, then the word is regarded as a pattern, and replaced  with  an
       alphabetically  sorted  list of file names matching the pattern.
Vale a dire che Bash (ma anche le altre shell) si occupa di espandere questi caratteri speciali con le liste di file a cui corrispondono, passando poi la lista al comando invocato.

Con system funziona perché viene invocata una shell per eseguire il comando (/bin/sh -c COMANDO), quindi viene correttamente eseguito il pathname expansion prima del lancio del comando con i parametri espansi.
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...)
Gimli[2BV!2B] è offline   Rispondi citando il messaggio o parte di esso
Old 27-12-2011, 13:12   #6
Eddie1985
Senior Member
 
Iscritto dal: Oct 2004
Messaggi: 304
Quote:
Originariamente inviato da Gimli[2BV!2B] Guarda i messaggi
Da man bash
Codice:
Pathname Expansion
       After word splitting, unless the -f option has  been  set,  bash  scans
       each  word  for the characters *, ?, and [.  If one of these characters
       appears, then the word is regarded as a pattern, and replaced  with  an
       alphabetically  sorted  list of file names matching the pattern.
Vale a dire che Bash (ma anche le altre shell) si occupa di espandere questi caratteri speciali con le liste di file a cui corrispondono, passando poi la lista al comando invocato.

Con system funziona perché viene invocata una shell per eseguire il comando (/bin/sh -c COMANDO), quindi viene correttamente eseguito il pathname expansion prima del lancio del comando con i parametri espansi.

paura, non lo sapevo :P
Ma quindi non c'è soluzione? (cioè oltre ad usare la system). Oppure ci devo mettere un carattere di escape?
Eddie1985 è offline   Rispondi citando il messaggio o parte di esso
Old 27-12-2011, 13:37   #7
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
che stile, non lo sapevo neanche io...
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 27-12-2011, 13:42   #8
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Quote:
Originariamente inviato da Eddie1985 Guarda i messaggi
paura, non lo sapevo :P
Ma quindi non c'è soluzione? (cioè oltre ad usare la system). Oppure ci devo mettere un carattere di escape?
no, nemmeno con l'escape risolvi, perchè exec non invoca nessuna shell e il pathname non viene espanso

l'unico modo è la system, oppure si può ovviamente usare una libreria per la compressione
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 27-12-2011, 14:18   #9
Gimli[2BV!2B]
Senior Member
 
L'Avatar di Gimli[2BV!2B]
 
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
Niente escape, come scritto da pabloski o si usa system o si deve fare prima una lista completa dei file che si desidera passare al comando.

Ottenere una lista completa del contenuto del primo livello di una directory in C/C++ liscio non è una cosa immediata, anche se non esageratamente complicato.
Esempio C che non mi sembra malaccio.
Esempi C++.

Il passaggio successivo, come già accennato, potrebbe essere l'utilizzo della lib.
Questo approccio da un controllo assoluto del processo di compressione, permettendo di fare test specifici sui singoli file da comprimere, dando la possibilità, se necessario, di pre-elaborarli/post-elaborarli singolarmente, ecc...
Questo ha naturalmente il costo di una discreta quantità di righe di codice in più da scrivere e la necessità di familiarizzare con l'api della libreria (tieni conto che una volta che se ne comprende la logica questa sarà molto simile in molte altre librerie di compressione, salvo nomi di funzioni differenti e qualche parametro qua e là).
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...)
Gimli[2BV!2B] è offline   Rispondi citando il messaggio o parte di esso
Old 27-12-2011, 20:03   #10
Eddie1985
Senior Member
 
Iscritto dal: Oct 2004
Messaggi: 304
Grazie a tutti per le risposte. Penso che utilizzerò la system, perchè mi sembra la cosa più semplice da fare.
Ah una piccola domanda: la system funziona con FreeBSD? (il mio programma deve girare su FreeBSD)
Eddie1985 è offline   Rispondi citando il messaggio o parte di esso
Old 27-12-2011, 21:47   #11
Gimli[2BV!2B]
Senior Member
 
L'Avatar di Gimli[2BV!2B]
 
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
Tutti i sistemi conformi allo standard POSIX.1-2001 devono provvedere un'interfaccia ad una shell invocabile.
FreeBSD (come GNU/Linux) non è completamente conforme a questo standard, ma ho visto che all'interno della sua BSD libc la funzione system è definita come nello standard e, stando ai commenti ed allo storico del csv, c'è almeno dal 1988.
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...)
Gimli[2BV!2B] è 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 ...
Un gruppo di ladri ha usato Google Maps ...
Apple non si fida di Samsung per la real...
Windows 11: un nuovo driver nativo mette...
Vi hanno regalato buoni Amazon? Intanto ...
Via acari, polvere e sporco da materassi...
Cuffie Beats in super offerta su Amazon,...
Xbox Cloud Gaming arriva su Amazon Fire ...
Un blackout a San Francisco manda in til...
Windows 11 è diventato più...
Apple cambia strategia a causa della cri...
007 First Light: uscita rimandata di due...
Samsung Galaxy A37 e A57: il comparto fo...
DAZN lancia la sua offerta di Natale: My...
Gigabyte fa marcia indietro? Sparito il ...
Alcuni rivenditori giapponesi bloccano l...
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: 23:50.


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