> Oturum ilk açıldığında çalıştırılması istenen programa alternatif, yani "/bin/bash" yerine, başka bir programın çalıştırılması: >> İlk önce şu aşağıdaki programı derliyoruz. * Örnek 1, Our Bash Program (version 1) #include "stdio.h" #include "stdlib.h" #include "string.h" #include "unistd.h" #define MAX_CMD_LINE 4096 #define MAX_CMD_PARAMS 128 char parse_cmd_line(void); void dir_proc(void); void clear_proc(void); void pwd_proc(void); typedef struct tagCMD{ char* name; void (*proc)(void); } CMD; CMD g_cmds[] = { {"dir", dir_proc}, {"clear", clear_proc}, {"pwd", pwd_proc}, {NULL, NULL} }; char g_cmdline[MAX_CMD_LINE]; char* g_params[MAX_CMD_PARAMS]; int g_nparams; int main(void) { /* # INPUT # CSD>pwd CSD>ls CSD>dir */ /* # OUTPUT # /home/ahmopasa/Desktop/LearnLinux/Examples/wd bad command: ls dir command executing... */ char* str; int i; for (;;) { fprintf(stdout, "CSD>"); /* * Komut satırından girilenleri "g_cmdline" dizisine * kopyalıyoruz. */ if (fgets(g_cmdline, MAX_CMD_LINE, stdin) == NULL) continue; /* * "g_cmdline" dizisinin sonundaki "\n" karakterini * "\0" karakteriyle değiştiriyoruz. */ if ((str = strchr(g_cmdline, '\n')) != NULL) *str = '\0'; /* * Daha sonra "g_cmdline" dizisindekileri "g_params" * dizisine aktarıyoruz. Aktarılan her bir kelime için * "g_nparams" bir arttırılacaktır. */ parse_cmd_line(); /* * Eğer hiç kelime aktarılmamışsa, komut satırından bir şey * girilmediği manasındadır. */ if(g_nparams == 0) continue; if(!strcmp(g_params[0], "exit")) break; for(i = 0; g_cmds[i].name != NULL; ++i) if(!strcmp(g_params[0], g_cmds[i].name)) { g_cmds[i].proc(); break; } if(g_cmds[i].name == NULL) fprintf(stderr, "bad command: %s\n", g_params[0]); } return 0; } char parse_cmd_line(void) { char* str; g_nparams = 0; for(str = strtok(g_cmdline, " \t"); str != NULL; str = strtok(NULL, " \t")) { g_params[g_nparams++] = str; } } void dir_proc(void) { fprintf(stdout, "dir command executing...\n"); } void clear_proc(void) { system("clear"); } void pwd_proc(void) { if (g_nparams > 1) { fprintf(stdout, "pwd command must be used w/o an argument!\n"); return; } char cwd[4096]; getcwd(cwd, 4096); fprintf(stdout, "%s\n", cwd); } >> Daha sonra komut satırından ki prosesin o anki çalışma dizini yukarıdaki kodun derlenmiş halinin bulunduğu dizin olması lazım, aşağıdaki kodu çalıştırıyoruz; "sudo cp wd /bin/wd" Böylelikle yukarıdaki program "/bin/wd" dizini içerisine kopyalanmış oluyor. Sonrasında da "etc/passwd" isimli dosyayı açarak, yeni eklenen kullanıcının olduğu satırın yedinci bloğuna "/bin/wd" yazısını ekliyoruz. Böylelikle ilgili kullanıcı oturum açtığında bizim yazdığımız program çalıştırılacaktır.