My goal is to write a C program that is like a basic shell for Linux. I have everything working except changing working directories. I have tried the system()
f
Your chdir
call is failing with -1
return value.
Please try to print the errno
like this:
errno = 0;
chdir(token);
if ( errno != 0 ) {
printf( "Error changing dir: %s\n", strerror( errno ) );
}
Keith is correct: \n
at the end is killing you.
You can do following to get rid of it:
char *ptr = cmdStr;
<snip>
else if( strncmp("cd", cmdStr, 2) == 0 )
{
strsep(&ptr, " "); /* skip "cd" */
char *chr = strsep(&ptr, "\n"); /* skip "\n" */
errno = 0;
chdir(chr);
if ( errno != 0 )
printf( "Error changing dir: %s\n", strerror( errno ) );
}
</snip>
fgets()
leaves the trailing '\n'
character in cmdstr
.
If you type cd foo
, you'll call chdir("foo\n")
rather than chdir("foo")
.