0

I am trying to use low level IO (Read) to read in standard input for a command. After getting that command I try to pass it into execvp so that it can carry out the command but it is not working. I think the problem is I am not sure how to pass it into execvp properly. It worked before with command line arguments but I cant get standard input working.

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <string.h>


int main(int argc, char* argv[])
{

    int r;
    char b1[4096];
    char command[4096];


    r = read(STDIN_FILENO, b1, 4096);
    memcpy(command, b1, r);
    command[r] = '\0';

//printf("%s\n", command);

    char* progname = command;

    //char* progname = argv[1];
    pid_t pid;

    


        if ((pid = fork()) < 0) perror("fork");

        else if (pid == 0) { // child process

            if (execvp(progname, argv + 1) == -1) {
                perror("execvp");
                return EXIT_FAILURE;
            } // if
        } // if 


    else {
        fprintf(stderr, "Please specify the name of the program to exec as a command line argument\n");
        return EXIT_FAILURE;
    } // if





} // main

0 Answers0