PDA

View Full Version : Aiuto:Devo zippare dei file con un programma C


Marco2000
10-06-2003, 13:20
Sto lavornado con linux e ho bisogno di zippare tutti i file che si trovano in una cartella in un unico file zip.
Non potendo usare SYSTEM, come posso fare ?

Grazie!

maxithron
10-06-2003, 13:49
Scusa non ho capito.....

Devi fare un prog in C sotto Linux che ti zippi detti files o devi lanciare un comando da shell oppure devi creare uno script?

Marco2000
10-06-2003, 14:04
la seconda che hai detto

maxithron
10-06-2003, 14:11
portati nella cartella dove sono contenuti i file e scrivi:

tar -cvf nomearchivio.tar *.*

poi

gzip pippo.tar.gz

Marco2000
10-06-2003, 14:19
e se invece volessi fare io un programma in C che mi zippa?

maxithron
10-06-2003, 14:43
Ma non c'è ragione.....dato che ne esistono tantissimi!!

Marco2000
10-06-2003, 14:50
Il fatto è che devo fare un progetto per il corso di programmazione di sistema.... fin'ora non ho avuto problemi ma sono arrivato al punto in cui dice

"La risposta del
server sul pipe /tmp/serverclientpid consiste:
di un file .zip contenente tutti i messaggi ricevuti
dall?utente, i quali vengono eliminati dalla
directory del mserver. Il mclient provvede ad decomprimere
il file .zip, lasciando nella directory
corrente i messaggi richiesti. Per le operazioni di
compressione/decompressione si veda il manuale
dei programmi zip e unzip."

e poco più avanti:

"NON devono essere utilizzate le seguenti funzioni
o chiamate: printf() (la sprintf()
pu`o essere utilizzata); system(); funzioni
di libreria standard C per l?accesso ai file
(peraltro non viste a lezione) quali fopen(),
fread(), fwrite(), ecc."

e qui mi sono fermato...... :muro:

:mc:

maxithron
10-06-2003, 14:55
Ma visto che NON devono essere utilizzate le funzioni di libreria standard in C (se non ho capito male...) perchè vuoi usare C?

Scusami ancora ma non mi è ben chiara la situazione :confused:

maxithron
10-06-2003, 14:56
Mi rispondo da solo!!!!

Ho letto male il tuo post quindi puoi usare system() e le funzioni standard C. Sorry

cionci
10-06-2003, 15:35
Originally posted by "Marco2000"

system();
Usa allora fork ed exec ;)

Marco2000
10-06-2003, 17:18
Immaginavo di dover forkizzare ma non ero sicuro: quindi creo un figlio e gli faccio eseguire lo zip passandogli come argomenti i file da zippare, giusto ?

cionci
10-06-2003, 17:24
Sì...

Marco2000
10-06-2003, 17:52
grazie domani provo....

gokan
10-06-2003, 22:15
Originally posted by "Marco2000"

Sto lavornado con linux e ho bisogno di zippare tutti i file che si trovano in una cartella in un unico file zip.
Non potendo usare SYSTEM, come posso fare ?

Grazie!
[OT]
Grande Mr. Bad Guy
;)

Marco2000
11-06-2003, 10:43
:D :D :D

Marco2000
18-06-2003, 18:59
Sono riuscito a zippare i file ma ho ancora un problemino, i file sono contenuti in una cartella del tipo

/tmp/USERxxx

Quando unzippo l'archivio mi viene ricreata la struttura delle cartelle mentre io desiderei disizzipare i file nella cartella da me indicata e non voglio che mi venga creata la cartella tmp all'interno della quale si trova USERxxx, non so se mi sono spiegato....

kingv
19-06-2003, 18:31
dal manuale di unzip:


[-d exdir]
An optional directory to which to extract files.
-j junk paths.



sono le due opzioni che ti servono

Marco2000
19-06-2003, 18:52
Grazie, l'avevo scoperto dopo aver postato, comunque grazie lo stesso!!!
il problema ora è un altro (ma guarda un po' su che caz+++e mi blocco): Se da shell scrivo

[~] -> zip -j /tmp/USERxxx/mail /tmp/USERxxx/*

Mi crea un file mail.zip con dentro tutti i file contenuti in USERxxx(ed è quello che volgio) invece se nel codice scrivo:

if(pid == 0)
{
char *argomenti[]={"zip","-j",pathzip,pathfiles,NULL};
execvp("zip", argomenti);
}

(in pathzip e pathfiles ho le directory usate prima da shell) mi da questo errore:

"missing end signature -- probably not a zip file(did you remember to use binary mode when you transferred it?)
zip error:Zip file structure invalid (/tmp/USERxxx/mail.zip)

AIUTATEMI, VI PREGO !!!! :muro: