tokenaizer tokenaizer - 1 year ago 97
Linux Question

creating ls command in c

I'm trying to create ls command. First, the code is not working if I enter "ls", it's working only when I enter the full path. Second, it's not looping after the exevcp(). why?
Thanks.

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

int main(void){

char *line;
char *args[32];

memset(args, 0, sizeof(args));
while (1){
line = (char*)malloc(1024);
printf("$ ");
fgets(line,1024,stdin);
args[0] = strtok(line, " ");
args[1] = strtok(NULL, " ");

execvp(args[0], args);
perror("execvp");
}
}

Answer Source

It's not looping since execve() never returns. Also, this seems to be a very strange way to implement ls: you should try to open a directory and read its contents (the list of files), not run another command, I would expect.

Look into the opendir() and readdir() functions, that's one way of actually implementing ls.

And, also, please don't cast the return value of malloc() in C.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download