|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 104
|
[C unix] exec
Ciao a tutti,
potrei sapere come fare per implementare con una funzione della famiglia exec questo comando di shell? sort -g > temp.txt dal momento che Codice:
execlp("sort","sort","-g",">","temp.txt",0);
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
> temp.txt ridirige stdout sul file e a questo ci pensa la shell non il comando sort. Per simulare questa cosa puoi prima aprire con fopen il file temp.txt e poi sostituirlo a stdout usando dup2, poi lanci la execlp.
|
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Dec 2006
Messaggi: 104
|
Quote:
---sostituirlo a stdout usando dup2---nn ho capito come eseguire la execlp("sort","sort","-g",0); ? |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Esatto.
Supponendo che temp_file sia il puntatore allo stream per temp.txt puoi usare dup2 in questo modo. Codice:
dup2(fileno(temp_file), fileno(stdout)); |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Ricorda che va fatto nel figlio che viene forkato e che andrà ad eseguire la exec*().
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#6 | |
|
Member
Iscritto dal: Dec 2006
Messaggi: 104
|
Quote:
In function ‘main’: es1_1710.c:63: warning: passing argument 1 of ‘fileno’ makes pointer from integer without a cast |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Perché stai usando un intero come descrittore ottenuto dalla open() e non un descrittore ottenuto dalla fopen(): una delle due fileno() è superflua.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 104
|
quindi volendo usare open lo posso fare cmq?
io faccio... Codice:
int temp_file;
if(pid3==0)//è uno dei figli nel programma
{
temp_file=fopen("temp.txt",O_RDWR, O_CREAT | O_TRUNC,0766);
dup2(fileno(temp_file),fileno(stdout)); //non è corretto perchè non uso fopen
execlp("sort","sort","-g",(char*)0);
perror("sort");
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Certo che puoi farlo, ma non come mi hai scritto ora: chiami fopen() con i parametri della open() e assegnando il valore ad un int...
Per il resto sì, basta che non usi fileno() su temp_file.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#10 | |
|
Member
Iscritto dal: Dec 2006
Messaggi: 104
|
Quote:
Codice:
int temp_file;
if(pid3==0)//è uno dei figli nel programma
{
temp_file=open("temp.txt",O_RDWR, O_CREAT | O_TRUNC,0766);
dup2(temp_file,fileno(stdout));
execlp("sort","sort","-g",(char*)0);
perror("sort");
Ultima modifica di stella_650 : 01-07-2008 alle 18:39. |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Sì, dovrebbe andare bene così. Ma perché (char*)0 e non NULL?
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 104
|
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 104
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:45.




















