title: Using chdir to change working directory in c
body: <p>I'm fairly new to C,and seem to have hit a wall. Am I passing this argument to change working directory whenever someone types in cd directory correctly? If I don't include a directory, it defaults to reporting the present working directory, but I can't seem to get the directory to change when given an argument.</p>
  
  <pre><code>#include &lt;string.h&gt;
  #include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;unistd.h&gt;
  
  #define MAX_BUFFER 1024                        // max line buffer
  #define MAX_ARGS 64                            // max # args
  #define SEPARATORS " \t\n"                     // token sparators
  
  extern char **environ;
  /*******************************************************************/
  
  int main (int argc, char ** argv)
  {
  char linebuf[MAX_BUFFER];                  // line buffer
  char cmndbuf[MAX_BUFFER];                  // command buffer
  char * args[MAX_ARGS];                     // pointers to arg strings
  char ** arg;                               // working pointer thru args
  char * prompt = "==&gt;" ;                    // shell prompt
  
  // keep reading input until "quit" command or eof of redirected input 
  
  while (!feof(stdin)) { 
  
  // get command line from input
  
  
      fputs (prompt, stdout);                // write prompt
      fflush(stdout);
      if (fgets(linebuf, MAX_BUFFER, stdin )) { // read a line
  
  // tokenize the input into args array
  
          arg = args;
          *arg++ = strtok(linebuf,SEPARATORS);   // tokenize input
          while ((*arg++ = strtok(NULL,SEPARATORS)));
                                             // last entry will be NULL 
  
          if (args[0]) {                     // if there's anything there
  
              cmndbuf[0] = 0;                // set zero-length command string
  
  // check for internal/external command 
  
              if (!strcmp(args[0],"clr")) {  // "clr" command
                  strcpy(cmndbuf, "clear");
              } else
              if (!strcmp(args[0],"cd"))
              {
                  int ret;
                  if (!args[1])
                      strcpy(cmndbuf, "pwd");
                  ret = chdir(args[1]);
                  strcpy(cmndbuf, "pwd");
  
  
              }else
              if (!strcmp(args[0],"dir")) {  // "dir" command
                  strcpy(cmndbuf, "ls -al ");
                  if (!args[1])
                      args[1] = ".";         // if no arg set current directory
                  strcat(cmndbuf, args[1]);
              } else
              if (!strcmp(args[0],"environ")) { // "environ" command
                  char ** envstr = environ;
                  while (*envstr) {            // print out environment
                      printf("%s\n",*envstr);
                      envstr++;
                  }                            // (no entry in cmndbuf)
              } else
              if (!strcmp(args[0],"quit")) {   // "quit" command
                  break;
              } else {                         // pass command on to OS shell
                  int i = 1;
                  strcpy(cmndbuf, args[0]);
                  while (args[i]) {
                      strcat(cmndbuf, " ");
                      strcat(cmndbuf, args[i++]);
                  }
              }
  
  // pass any command onto OS
  
              if (cmndbuf[0])
                  system(cmndbuf);
          }
      }
  }
  return 0; 
  }
  </code></pre>
  
  <p>Thanks.</p>