user2100364
user2100364

Reputation: 87

command prompt program: how to allow user to enter unix commands?

I'm having trouble writing a C program that displays a command prompt (no problem here) which allows the user to enter unix commands & then displays the results. I've tried many things but I only started programming a year ago and haven't gone anywhere besides displaying the command prompt; I need help on how to accept unix commands + display their results.

My only constraint is that instead of the user providing an absolute path, I need my program to search the directories specified in the path environment variable and find the location of the command's executable. I don't understand how to do this either but searching online has told me this would be best using "getenv() to access the OS PATH variable and prefix the user-supplied command appropriately". Can anyone help me out here? Thanks for your assistance in advance.

Upvotes: 2

Views: 1060

Answers (1)

Mr_Spock
Mr_Spock

Reputation: 3835

Try popen(), which can be found here in the manpages.

Check this out:

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

void write_netstat(FILE * stream)
{
          FILE * outfile;
          outfile = fopen("output.txt","w");
          char line[128];

          if(!ferror(stream))
          {
                    while(fgets(line, sizeof(line), stream) != NULL)
                    {
                              fputs(line, outfile);
                              printf("%s", line);
                    }
                    fclose(outfile);
          }
          else
          {
                    fprintf(stderr, "Output to stream failed.n");
                    exit(EXIT_FAILURE);
          }
}

int main(void)
{
          FILE * output;
          output = popen("netstat", "r");

          if(!output)
          {
                    fprintf(stderr, "incorrect params or too many files.n");
                    return EXIT_FAILURE;
          }

          write_netstat(output);

          if(pclose(output) != 0)
          {
                    fprintf(stderr, "Could not run 'netstat' or other error.n");
          }
          return EXIT_SUCCESS;
}

This prints a netstat to a file. You can do this for all commands. It uses popen(). I wrote it because I needed a log of a netstat.

Upvotes: 2

Related Questions