Hi,

I'm trying to make this code works but with no luck so far, I have two problems
1. I'm reading from a file lines and then executing them but the last line goes into an infinite loop
2. Another problem is I don't think I'm using "wait" properly as it giving some random junk after the first line is executed.

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

#define COMM_LEN 128
#define MAX_ARGS 100

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

    char Command[COMM_LEN];
    int pid, status;
    char *Command_AR[MAX_ARGS];
    int counter;
    FILE *fp;

    if(argc!=2)
      {
          perror("Invalid command");
          exit(0);
      }

     if((fp=fopen(argv[1],"r"))==NULL)
      {
          perror("Error Opening File");  
      }


    fgets(Command,COMM_LEN,fp);
    Command[strlen(Command)-1] = '\0';
    while (strcmp(Command,"\0")) {
        if ((pid = fork()) == -1) {
            perror("fork");
            exit(-1);
        }
        if (pid == 0) {
            counter = 0;
            Command_AR[counter] = strtok(Command," ");
            while (Command_AR[counter++] != NULL) {
                Command_AR[counter] = strtok(NULL," ");
            }
            execvp(Command_AR[0],Command_AR);
            perror("exec");
            exit(-1);
        }

         else {
              fgets(Command,COMM_LEN,fp);
              Command[strlen(Command)-1] = '\0';
             }
           while(wait(&status)!=pid)
         {
           /*do nothing*/;
         }
      }
    return(0);
}

while (strcmp(Command,"\0" )) When would ever occur that a string is made of string[0] = '\0'; and string[1] = '\0';? That's what "\0" is; a string of 2 bytes.

Strcmp:          if:
Returns value    Explanation
-------------    -----------
less than 0     str1 is less than str2
equal to 0      str1 is equal to str2
greater than 0  str1 is greater than str2

Since the result of strcmp(Command, "\0") will never be 0 or ( strings are the same ); we must conclude that it will always be less or greater than 0 value, allowing while to loop forever.

Thank you for your reply,

I tried changing it to '\0' but it's giving me a bus error, how can it be fixed? I'm trying to make the program stop once it has read and executed the line in the file

This article has been dead for over six months. Start a new discussion instead.