|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Oct 2005
Messaggi: 20
|
[C++]Shell Linux
Ciao a tutti...vorrei proporre il mio problema all'attenzione di qlkuno....
Sto realizzando una shell e ho riscontrato un problema sulla gestione dinamica della stringa in ingresso....cioè data la stringa ls -f come faccio a mettere ls in argc e -l in argv??? posto il codice: #include <string.h> #include <sys/types.h> #include <sys/wait.h> #include <stdio.h> #include <stdlib.h> #include <iostream.h> using namespace std; int main() { char* argc; char* argv[20]; const int i=0; while(!i){ cout<<"\nNASA :>"; cin.getline(argc,50); if(!strcmp(argc,"exit"));return 0; else{ argv[0]= argc; argv[1]= NULL; pid_t pid= fork(); if (pid > 0) { cout<<"\nIo sono il padre"<<endl; int stato; waitpid(pid,&stato,0); cout<<""; } if (pid == 0) {cout<<"\nEccomi\n"<<endl; execvp(argc,argv); exit(0);} else if (pid == -1) {cout<<"\nErrore"<<endl; exit(-1);};}} return 0; } Spero ke qlkuno possa aiutarmi nell'implemantazione grazie mille..... |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 357
|
Codice:
int main() {
char* argc;
char* argv[20];
Questo è corretto Codice:
int main(int argc, char **argv) Il parametro 0 è il nome del programma, il file con cui lo chiami Il primo parametro è argv[1], e così via Codice:
const int i=0;
while(!i){
se vuoi un ciclo infinito ti basta: while(true) oppure for(; ecc... Codice:
if(!strcmp(argc,"exit"));return 0;
else{
argv[0]= argc;
argv[1]= NULL;
|
|
|
|
|
|
#3 | |||
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Ueilah! di nuovo tu ?
Vedi che t'ho mandato un pvt 2 ore fa ... avevo tempo per aiutarti per l'altro problema. Comunque oltre alle correzioni che t'ha giá detto Andlea aggiungo: c'é un problema quando passi una stringa ad un eseguibile e la stringa contiene un "-" perché l'eseguibile lo interpreta come un parametro (almeno su unix/linux) per esempio se ho un file di nome "-pluto" e su unix scrivo: Quote:
Quote:
Quote:
Ciao
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|||
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
T'ho fatto il programmino.
L'ho testato con: ./prova ls -ltr e funge Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
int main( int argc, char **argv )
{
char *arglist[1024]; /* LISTA PARAMETRI PER IL CHILD */
pid_t pid; /* PER LA fork() */
int i,
parm = 0;
for ( i = 1; i < argc; i++ ) /* CREO LA LISTA PARAMETRI */
arglist[parm++] = argv[i];
arglist[parm] = NULL; /* CHIUDO LA LISTA PARAMETRI */
pid = fork(); /* CLONO */
if (pid > 0)
{
puts( "\nIo sono il padre\n" );
}
else if (pid == 0)
{
puts( "\nEccomi\n" );
execvp(arglist[0], arglist); /* TRASFORMO IL CLIENT IN arglist */
}
else if (pid == -1)
{
puts( "\nErrore\n" );
exit(-1);
};
return 0;
}
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Ma questo .... non è affatto un problema. Come una applicazione gestisca/interpreti gli argomenti .... sono capperi suoi.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Oct 2005
Messaggi: 20
|
Si ma in tutto questo cm la faccio la gestione dinamica della stringa in ingresso??
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:09.



















