hola, estoy implementando un código para la creación de una minishell en ubuntu, cuando al hacer 'make' en la terminal de ubuntu me aparecen estos warnings:
gcc -Wall -g -c -o msh.o msh.c
msh.c: In function 'num1':
msh.c:95:17: warning: 'argvv' is used uninitialized in this function
msh.c:129:7: warning: 'bg' may be used uninitialized in this function
msh.c: In function 'num2':
msh.c:152:27: warning: 'argvv' may be used uninitialized in this function
msh.c:164:4: warning: 'bg' is used uninitialized in this function
msh.c: In function 'num3':
msh.c:184:27: warning: 'argvv' may be used uninitialized in this function
msh.c:212:4: warning: 'bg' is used uninitialized in this function
msh.c: In function 'numa':
msh.c:227:2: warning: 'num_commands' is used uninitialized in this function
msh.c:238:29: warning: 'argvv' may be used uninitialized in this function
msh.c:270:4: warning: 'bg' is used uninitialized in this function
gcc -Wall -g -o msh parser.o scanner.o y.o msh.o
ESTE ES EL CÓDIGO IMPLEMENTADO:
/*-
* msh.c
*
* Minishell C source
* Show how to use "obtain_order" input interface function
*
* THIS FILE IS TO BE MODIFIED
*/
#include <stdlib.h> /* Gestión de memoria dinámica, control de procesos y otros */
#include <stddef.h> /* Se defienen algunos tipos especiales */
#include <stdio.h> /* Entrada/Salida */
#include <sys/types.h> /* Contiene construcciones que facilitan la obtención de información sobre los atrinbutos de los archivos */
#include <unistd.h> /* Se define una función */
#include <sys/wait.h> /* Define constantes para el uso de 'waitpid()' */
#include <fcntl.h> /* Manipula el descriptor de fichero */
#include <dirent.h> /* Incluye definiciones para directorios de entrada */
#include <string.h> /* Contiene definicion de macros, constantes y tipos de utilidad para trabajar con cadenas de caracteres */
extern int obtain_order(); /* See parser.y for description */
void myls(char*);
void mycd(char*);
int num1();
int num2();
int num3();
int numa();
void myls(char * dir){
if(dir==NULL){
char *punt=".";
dir=punt;
}
DIR *d;
d=opendir(dir); /*Se encarga de abrir el directorio */
struct dirent * fich;
while((fich=readdir(d))!=NULL){ /*Se encarga de leer todos los elementos del directorio*/
printf("%s\n",fich -> d_name);
}
closedir(d); /* Una vez leido todo cierra el directorio */
}
void mycd(char * dir){
chdir(dir); /* Cambia de directorio */
char *path;
char p[1024];
path=p;
path=getcwd(path,sizeof(p)); /* Indica el directorio en el que nos encontramos */
printf("%s\n", path); /* Imprime por pantalla el directorio en el que nos encontramos*/
}
int main(void){
char ***argvv;
int num_commands;
char *filev[3];
int bg;
int ret;
setbuf(stdout, NULL); /* Unbuffered */
setbuf(stdin, NULL);
while (1){
fprintf(stderr, "%s", "msh> "); /* Prompt */
ret = obtain_order(&argvv, filev, &bg);
if (ret == 0) break; /* EOF */
if (ret == -1) continue; /* Syntax error */
num_commands = ret - 1; /* Line */
switch(num_commands){
case 0:
continue; /* Empty line */
break;
case 1:
num1();
break;
case 2:
num2();
break;
case 3:
num3();
break;
default:
numa();
break;
}
}
return 0;
}
int num1(){
char ***argvv;
char *filev[3];
int bg;
int k;
int pid;
if(strcmp(argvv[0][0], "mycd")==0){ /* Comparamos para ver si son iguales */
mycd(argvv[0][1]);
}
else{
pid=fork();
switch(pid){ /* Creacion proceso hijo */
case 0:
/*mandatos redirecciones simples*/
if(filev[0]!=NULL){ /* Apuntara al nombre del fichero a utilizar en la redireccion de entrada en caso de que exista o NULL si no hay ninguna */
int in=open(filev[0], O_RDONLY);
close(STDIN_FILENO);
dup(in);
close(in);
}
if(filev[1]!=NULL){ /* Apuntara al nombre del fichero a utilizar en la redireccion de salida en caso de que exista o NULL si no hay ninguna */
int out=open(filev[1],O_CREAT|O_TRUNC| O_WRONLY,0777);
close(STDOUT_FILENO);
dup(out);
close(out);
}
if(filev[2]!=NULL){ /* Apuntara al nombre del fichero a utilizar en la redireccion de salida de error en caso de que exista o NULL si no hay ninguna */
int out=open(filev[2],O_CREAT|O_TRUNC| O_WRONLY,0777);
close(STDERR_FILENO);
dup(out);
close(out);
}
if(strcmp(argvv
gcc -Wall -g -c -o msh.o msh.c
msh.c: In function 'num1':
msh.c:95:17: warning: 'argvv' is used uninitialized in this function
msh.c:129:7: warning: 'bg' may be used uninitialized in this function
msh.c: In function 'num2':
msh.c:152:27: warning: 'argvv' may be used uninitialized in this function
msh.c:164:4: warning: 'bg' is used uninitialized in this function
msh.c: In function 'num3':
msh.c:184:27: warning: 'argvv' may be used uninitialized in this function
msh.c:212:4: warning: 'bg' is used uninitialized in this function
msh.c: In function 'numa':
msh.c:227:2: warning: 'num_commands' is used uninitialized in this function
msh.c:238:29: warning: 'argvv' may be used uninitialized in this function
msh.c:270:4: warning: 'bg' is used uninitialized in this function
gcc -Wall -g -o msh parser.o scanner.o y.o msh.o
ESTE ES EL CÓDIGO IMPLEMENTADO:
/*-
* msh.c
*
* Minishell C source
* Show how to use "obtain_order" input interface function
*
* THIS FILE IS TO BE MODIFIED
*/
#include <stdlib.h> /* Gestión de memoria dinámica, control de procesos y otros */
#include <stddef.h> /* Se defienen algunos tipos especiales */
#include <stdio.h> /* Entrada/Salida */
#include <sys/types.h> /* Contiene construcciones que facilitan la obtención de información sobre los atrinbutos de los archivos */
#include <unistd.h> /* Se define una función */
#include <sys/wait.h> /* Define constantes para el uso de 'waitpid()' */
#include <fcntl.h> /* Manipula el descriptor de fichero */
#include <dirent.h> /* Incluye definiciones para directorios de entrada */
#include <string.h> /* Contiene definicion de macros, constantes y tipos de utilidad para trabajar con cadenas de caracteres */
extern int obtain_order(); /* See parser.y for description */
void myls(char*);
void mycd(char*);
int num1();
int num2();
int num3();
int numa();
void myls(char * dir){
if(dir==NULL){
char *punt=".";
dir=punt;
}
DIR *d;
d=opendir(dir); /*Se encarga de abrir el directorio */
struct dirent * fich;
while((fich=readdir(d))!=NULL){ /*Se encarga de leer todos los elementos del directorio*/
printf("%s\n",fich -> d_name);
}
closedir(d); /* Una vez leido todo cierra el directorio */
}
void mycd(char * dir){
chdir(dir); /* Cambia de directorio */
char *path;
char p[1024];
path=p;
path=getcwd(path,sizeof(p)); /* Indica el directorio en el que nos encontramos */
printf("%s\n", path); /* Imprime por pantalla el directorio en el que nos encontramos*/
}
int main(void){
char ***argvv;
int num_commands;
char *filev[3];
int bg;
int ret;
setbuf(stdout, NULL); /* Unbuffered */
setbuf(stdin, NULL);
while (1){
fprintf(stderr, "%s", "msh> "); /* Prompt */
ret = obtain_order(&argvv, filev, &bg);
if (ret == 0) break; /* EOF */
if (ret == -1) continue; /* Syntax error */
num_commands = ret - 1; /* Line */
switch(num_commands){
case 0:
continue; /* Empty line */
break;
case 1:
num1();
break;
case 2:
num2();
break;
case 3:
num3();
break;
default:
numa();
break;
}
}
return 0;
}
int num1(){
char ***argvv;
char *filev[3];
int bg;
int k;
int pid;
if(strcmp(argvv[0][0], "mycd")==0){ /* Comparamos para ver si son iguales */
mycd(argvv[0][1]);
}
else{
pid=fork();
switch(pid){ /* Creacion proceso hijo */
case 0:
/*mandatos redirecciones simples*/
if(filev[0]!=NULL){ /* Apuntara al nombre del fichero a utilizar en la redireccion de entrada en caso de que exista o NULL si no hay ninguna */
int in=open(filev[0], O_RDONLY);
close(STDIN_FILENO);
dup(in);
close(in);
}
if(filev[1]!=NULL){ /* Apuntara al nombre del fichero a utilizar en la redireccion de salida en caso de que exista o NULL si no hay ninguna */
int out=open(filev[1],O_CREAT|O_TRUNC| O_WRONLY,0777);
close(STDOUT_FILENO);
dup(out);
close(out);
}
if(filev[2]!=NULL){ /* Apuntara al nombre del fichero a utilizar en la redireccion de salida de error en caso de que exista o NULL si no hay ninguna */
int out=open(filev[2],O_CREAT|O_TRUNC| O_WRONLY,0777);
close(STDERR_FILENO);
dup(out);
close(out);
}
if(strcmp(argvv
- , "myls")==0){
myls(argvv[0][1]);
exit(0);
}
execvp(argvv[0][0],argvv[0]);
break;
/* Mandato en background*/
default:
if(bg==0){
wait(&k);
}
break;
}
}
return 0;
}
int num2(){
char ***argvv;
int bg;
int k;
int pid1, pid2;
int tb;
int fd[2];
tb=pipe(fd);
pid1=fork();
if(pid1==0){
close(fd[0]);
close(STDOUT_FILENO);
dup(fd[1]);
close(fd[1]);
execvp(argvv[0][0],argvv[0]);
}
pid2=fork();
if(pid2==0){
close(fd[1]);
close(STDIN_FILENO);
dup(fd[0]);
close(fd[0]);
execvp(argvv[1][0],argvv[1]);
}
close(fd[0]);
close(fd[1]);
if(bg==0){
wait(&k);
wait(&k);
}
return 0;
}
int num3(){
char ***argvv;
int bg;
int k;
int pid1, pid2, pid3;
int tb, tb1;
int fd1[2];
tb1=pipe(fd1);
pid1=fork();
if(pid1==0){
close (fd1[0]);
close(STDOUT_FILENO);
dup(fd1[1]);
close(fd1[1]);
execvp(argvv[0][0],argvv[0]);
}
int fd2[2];
tb=pipe(fd2);
pid2=fork();
if (pid2==0){
close(fd1[1]);
close(fd2[0]);
close(STDOUT_FILENO);
dup(fd2[1]);
close(STDIN_FILENO);
dup(fd1[0]);
close(fd2[1]);
close(fd1[0]);
execvp(argvv[1][0],argvv[1]);
}
close(fd1[0]);
close(fd1[1]);
pid3=fork();
if(pid3==0){
close(fd2[1]);
close(STDIN_FILENO);
dup(fd2[0]);
close(fd2[0]);
execvp(argvv[2][0],argvv[2]);
}
close(fd2[0]);
close(fd2[1]);
if(bg==0){
wait(&k);
wait(&k);
wait(&k);
}
return 0;
}
int numa(){
char ***argvv;
int num_commands;
int bg;
int k;
int tb, tb2;
int i;
int fd[num_commands][2];
int pid[num_commands];
for(i=0;i<num_commands;i++){
if(i==0){
tb=pipe(fd[0]);
pid=fork();
if(pid==0){
close(fd- );
close(STDOUT_FILENO);
dup(fd[1]);
close(fd[1]);
execvp(argvv- ,argvv);
}
}
else if(i<num_commands-1){
tb2=pipe(fd);
close(fd[i-1][1]);
pid=fork();
if(pid==0){
close(fd- );
close(STDOUT_FILENO);
dup(fd[1]);
close(fd[1]);
close(STDIN_FILENO);
dup(fd[i-1][0]);
close(fd[i-1][0]);
execvp(argvv- ,argvv);
}
close(fd[i-1][0]);/*cerrar canal entrada tuberia del padre*/
}
else{
pid=fork();
if(pid==0){
close(fd[i-1][1]);
close(STDIN_FILENO);
dup(fd[i-1][0]);
close(fd[i-1][0]);
execvp(argvv- , argvv);
}
close(fd[i-1][0]);
close(fd[i-1][1]);
}
}
if(bg==0){
for(i=0;i<num_commands;i++){
wait(&k);
}
}
return 0;
}
- , argvv);
- ,argvv);
- );
- ,argvv);
- );