|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Registered User
Iscritto dal: Aug 2004
Messaggi: 51
|
systemcall unix
Salve sto facendo un progettino per la sincronizzazione dei processi, ma non so come aquisire i parametri dalla shell.
Mi sipego meglio, questo è il programmino: #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <sys/wait.h> void fatal(char *s) { perror (s); exit (1); } main() { pid_t pid; pid=getpid(); printf("Chiamata a fork...\n"); pid=fork(); if (pid==0) { printf("###cp file1 file2\n"); execl("/bin/cp","cp","file1","file2",(char*)0); } if(pid>0) { wait((int*)0); pid=fork(); if(pid==0){ printf("###sort file2 -o file3\n"); execl("/bin/sort","sort","file2","-o","file3",(char*)0); } else if (pid>0){ wait((int*)0); printf("###cat file3\n"); execl("/bin/cat","cat","file3",(char*)0); } } } adesso il prblema e che file1 file2 file3 vorrei passarli come paramteri dalla shell come posso fare?? grazie Ultima modifica di dosseg : 23-02-2006 alle 12:06. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
int main(int argc, char **argv) dove argc è il numero dei parametri che l'utente ha passato, più uno. I parametri li trovi nell'array argv[]; il primo elemento (argv[0]) è la riga di comando utilizzata per invocare il programma, esclusi i parametri; da argv[1] ad argv[argc-1] trovi i parametri effettivi. Varie note: - usa i tag [code] quando posti il codice! - la fork può fallire - la exec può fallire - sostituisci (foo *) 0 con NULL -- decisamente più leggibile - se devi semplicemente eseguire un programma e attendere subito che termina, utilizza la system().
__________________
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 |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
int main (int argc, char *argv[])
{ ... } chiami il programma come : ./nomeprogramma file1 file2 file3 e durante l'esecuzione ti trovi "file1" in argv[1] , "file2" in argv[2] e "file3" in argv[3] . Con "argc" puoi assicurarti che vengano passati tutti parametri necessari (nel tuo caso dei 3 file devi assicurarti che sia uguale a 4 perchè in argv[0] ci sta il nome del programma che viene passato anche lui come parametro). CIao
__________________
GPU Compiler Engineer |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:21.



















