Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Implementar Shell en C++ (redirecciones y tuberias) para poder ejecutarlas

Estas en el tema de Implementar Shell en C++ (redirecciones y tuberias) para poder ejecutarlas en el foro de C/C++ en Foros del Web. Holaaaa soy estudiante de informatica y necesito ayuda para implementar las redirecciones y tuberias en una shell. Mi problema es que esty en primero de ...
  #1 (permalink)  
Antiguo 15/12/2012, 19:30
Avatar de yasi92  
Fecha de Ingreso: agosto-2011
Mensajes: 2
Antigüedad: 12 años, 8 meses
Puntos: 0
Pregunta Implementar Shell en C++ (redirecciones y tuberias) para poder ejecutarlas

Holaaaa soy estudiante de informatica y necesito ayuda para implementar las redirecciones y tuberias en una shell. Mi problema es que esty en primero de carrera y desconozco el c++ para realizar esta practica de 2 año. Agradeceria mucho si alguien pudiera echarmee una mano...-.-". Son cosas sencillas pero con mis conocimientos me es imposible sacarlo.Gracias de antemano. Mi correo es [email protected].
  #2 (permalink)  
Antiguo 15/12/2012, 20:41
Avatar de iblancasa  
Fecha de Ingreso: diciembre-2012
Ubicación: España
Mensajes: 143
Antigüedad: 11 años, 4 meses
Puntos: 16
Respuesta: Implementar Shell en C++ (redirecciones y tuberias) para poder ejecutarla

Explica mejor que qué es lo que quieres hacer... y comienza a trabajar un código. Te podremos intentar ayudar, pero no te vamos a hacer los deberes.
Un saludo.
  #3 (permalink)  
Antiguo 15/12/2012, 21:37
Avatar de yasi92  
Fecha de Ingreso: agosto-2011
Mensajes: 2
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Implementar Shell en C++ (redirecciones y tuberias) para poder ejecutarla

No no buso eso, solo busco ayuda.... a ver empiezo...la idea es que estoy creando una mini shell, ya me ejeuta los comandos basicos y ahora tengo que implementarle en primer lugar las redirecciones, esta seria mi estructura actual:

bool defaultCommandCallback(const std::string& command,
cli::ShellArguments const& arguments)
{
using namespace cli::prettyprint;
int status1;
while (waitpid(-1, NULL, WNOHANG) > 0);
pid_t cpid = fork();

//hijo
if (cpid==0) {

if (!arguments.arguments.empty()){

char** argv=cli::utility::stdVectorStringToArgV(arguments .arguments);
execvp(argv[0],argv);

//error
std::cout << "Se ha producido un error al invocar el comando";
exit(-1);
}
//padre
}else if (cpid > 0) {
if (arguments.terminator==cli::ShellArguments::NORMAL ){
waitpid(cpid, &status1, 0);
}
}else{
std::cout << "Se ha producido un error al invocar el comando";

}
return false;
}
-------------------------------------------------------------------------------------------
ahora segun tengo entendido, dentro de el hijo deberia añadir algo mas o menos asi:
Aunque nose como generar el bucle for que me revise la salida del comando a ver si se trata de una redirección:

if (iter->type==StdioRedirection::TRUNCATED_INPUT){
int fd= open (iter -> argument.c.str(), O_RDONLY);
if (fd>=0){
dup2(fd,0);
close(fd);}
else{
std::cout << "Ha habido un error al tratar de abrir el archivo";}
}

if (iter->type==StdioRedirection::TRUNCATED_OUTPUT){
int fd= open (iter -> argument.c.str(), O_CREATE | O_TRUNC| O_RDWR , S_IWUSR| S_IRUSR| S_IRGRP |S_IWGRP | S_IXGRP | S_IROTH);
if (fd>=0){
dup2(fd,0);
close(fd);}
else{
std::cout << "Ha habido un error al tratar de abrir el archivo";}
}

if (iter->type==StdioRedirection::APPENDED_OUTPUT){
int fd= open (iter -> argument.c.str(), O_CREAT | O_APPEND | O_RDWR , S_IWUSR| S_IRUSR| S_IRGRP |S_IWGRP | S_IXGRP | S_IROTH );
if (fd>=0){
dup2(fd,0);
close(fd);}
else{std::cout << "Ha habido un error al tratar de abrir el archivo";}

}

Etiquetas: implementar, poder, shell
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:21.