hi guys..
i have this problem with using dub2()
i whant to semuliate the unix shell like "prog1 > file.out"
this code is for that but it dose not work![]()
i used linked list functions and i am sure that it is correct.
the parsing is working good ethier.
Code:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/wait.h> #include <errno.h> #include <fcntl.h> #include <unistd.h> #include "linklist.h" int read_cmd(); ptr list; int main() { read_cmd(); return 0; } int read_cmd() { char com[100]; int i = 0, j = 0, len; datatype buffer; pid_t pid, status; ptr f, o, s; static char *argv[] = { "ps", "f", NULL}; while(1) { printf("vshell>"); fflush(stdin); gets(com); len = strlen(com); if(!strcmp(com, "exit")) // if exit { delete_all(&list); // empty the list return 0; } i = 0; while(i < len) { j = 0; while((com[i] != ' ') && (com[i] != '\0')) { buffer.s[j] = com[i]; i++; j++; } buffer.s[j] = '\0'; insertlast(&list, buffer); i++; } pid = fork(); if( pid == 0 ) // child { printf("\nforked\n"); f = list; o = list->next; s = o->next; if(strcmp(o->el.s, "<") == 0) { close(0); dup2( open ( s->el.s,O_WRONLY) , 0 ) ; } else if(strcmp(o->el.s, ">") == 0) { printf("\n1\n"); // close(4); dup2(open(s->el.s, O_WRONLY), stdin); printf("\n2\n"); execve(f->el.s, argv, NULL); } printf("**3**"); exit(0); } else // parent { wait(&status); if(status != 0) printf("Error return code = %d\n", status); } delete_all(&list); // empty the list } delete_all(&list); // empty the list return 0; }
thanx ...



LinkBack URL
About LinkBacks



