Mam następujęce zadanie z systemów operacyjnych i stanąłem w miejscu:
Napisać program my_shell. Ma on umożliwić użytkownikowi uruchamianie programów, udostępniając mu wiersz poleceń oraz obsługiwać jeden operator potoku | i jeden operator przekierowania: > (dla ułatwienia zakładamy, że operator przekierowania może dotyczyć tylko ostatniego polecenia). Ponadto powinien potrafić obsługiwać skrytpy, czyli polecenie cat script_file | ./my_shell powinno spowodować wykonanie skryptu script_file przez program my_shell. Dodać do programu my_shell możliwość uruchamiania procesów (a właściwie zadań) w tle (& na końcu linii.
Jak na razie napisałem następujecy kod:
#include
#include
#include
# define buf_size 256
int main(int argc, char *argv[])
{
int pid;
int p[2];
int pol1[2];
int pol2[2];
char status[buf_size];
if(pipe(p)==0){
pid=fork();
if (pid>0){
printf("Wykonuje się proces macierzysty\n");
wait(&status);
}
else{
printf("Wykonuje się proces potomny\n");
p[1]=open(pol2[0],O_WRONLY|O_CREAT|O_APPEND, 0666);
dup2(p[1],1);
close(p[1]);
execvp(pol1[0],pol1);
}
}
}