#include #include #include #include #include #include #include #define MCL 512 //max command (with arguments) length int main(void) { char prikaz[MCL]; char *args[MCL/2+1]; unsigned int i,j,a,isarg; pid_t pid; printf("exit - ukončení programu\n"); do { printf("# "); if(!fgets(prikaz,MCL-1,stdin)) break; if(!strcmp("exit\n",prikaz)) break; /************ parsovani prikazu a argumentu prikazu ************/ a = 0; j = strlen(prikaz); isarg = 0; for(i = 0; i < j; i++) { if(isspace(prikaz[i])) { if(isarg) { prikaz[i] = '\0'; a++; isarg = 0; } } else { if(!isarg) { isarg = 1; args[a] = prikaz+i; } } } args[a] = NULL; /********* spusteni procesu a cekani na jeho ukonceni ***********/ if(args[0] != NULL) { if(pid = fork()) { if(pid > 0) { i= 1; waitpid(pid,&i,0); if(WEXITSTATUS(i)) printf("Program failed!\n"); } } else { execvp(args[0],args); printf("Exec failed!\n"); exit(1); } } /*****************************************************************/ } while (1); printf("Nashledanou!\n"); return 0; }