execvp () не выводит правильно - PullRequest
0 голосов
/ 24 сентября 2018

Я пишу код для оболочки, но когда я пытаюсь запустить команду cat filename.c, она говорит:

cat: filename.c

: нет такого файла или каталога

, хотя та же команда выполняется вне оболочки.Для других команд, таких как lsmod, он ничего не печатает.

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LINE        80 /* 80 chars per line, per command */

int main(void)
{

    char *args[MAX_LINE/2 + 1]; /* command line (of 80) has max of 40 arguments */
    int should_run = 1; 
    int i, upper, j;
    char *w= (char *)malloc(80*sizeof(char)) ;
    char *buffer;
    size_t bufsize= 80;     

    while (should_run){   
        printf("osh> ");
        fflush(stdout);

        getline(&w, &bufsize , stdin);  
        buffer = strtok (w, " ");
        i=0;
        while (buffer)
        {
            args[i++] = buffer;
            buffer = strtok (NULL, " ");
        }
        char *ls_arg[i+1];

        for(j=0;j<i;j++)
        {
            ls_arg[j]=args[j];
        }
        ls_arg[j]=NULL;

        int pid;
        pid= fork();            
        if(!pid)//child process
        {
            execvp(ls_arg[0], ls_arg);
        }
        wait(5);
    }

    return 0;
}
...