i trying redirect output ls file, in shell created in c. type in:
ls > junk and out is:
ls: cannot access >: no such file or directory then if use ctrl-d exit shell prints results of ls command screen before exiting. tried use print statements figure out happening , no print statements printed after:
dup2(f, stdout_fileno); tried dup2(f, 1); code:
pid = fork(); if(pid == 0) { // arguments execvp null terminated array for(i = 0; <= count; i++) { if(i == count) { args[i] = (char *)malloc(2 * sizeof(char)); args[i] = '\0'; } else { str = strlen(string[i]); args[i] = malloc(str); strcpy(args[i], string[i]); } } if(count == 1) { } else if(strcmp(string[(numargs + 1)], ">") == 0) //numargs number of arguments typed in user { // printed out string[numargs+2] previously, , says junk int f = open(string[(numargs + 2)], o_wronly | o_creat | o_trunc, s_irusr | s_iwusr | s_irgrp | s_iroth); if(f < 0) { printf("unable open output file\n"); status = 1; } else { fflush(stdout); dup2(f, stdout_fileno); close(f); } } j = execvp(string[0], args); // first element of string array first thing user enters command ls in case the file called junk gets created, gets placed in junk. have been struggling while figuring out why redirection won't work appreciated. thanks.
you cannot use execvp parse shell commands.
the redirection (>) character understood shell (e.g., bash, sh, ksh) , execvp executes command pass directly. not try , interpret arguments , create file redirections, etc.
if want need use system call. see system(3)
similarly, other special shell characters (pipe, *, ?, &, etc) won't work.
Comments
Post a Comment