2

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.

1

1 Answer 1

2

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.

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you! I ended up using popen

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.