a.Shell-ul

Сделай свою wap-шпаргалку =) попробуй конструктор сайтов http://www.panweb.com/


Figura de mai jos aratг ciclul principal al shell-lui ?i demonstreazг execuюia asincronг, redirectarea ie?irii ?i conductele de tip pipe.
/* cite?te linia de comandг pвnг la "sfвr?itul fi?ierului" */
--^while (read(tdin, buffer, numchars))
{
/* analizeazг linia de comandг */
^if(/* linia de comandг conюine [and] */
^amper=1;
^else
^amper=0;
/* pentru comenzi ce nu aparюin limbajului de comandг shell */
^if(fork()==0)
{
/* redirectare a I/O */
^if(/* redorectare ie/ire */
{
^fd=creat(newfile, fmask);
^close (stdout);
^dup(fd);
^close(fd);
^/* stdout este acum redirectat */
}
^if(/* cerere de redirectare cгtre o conductг */
{
^pipe(fildes);
^if(fork()==0)
{
/* prima componentг a liniei de comandг */
^close(stdout);
^dup(fildes[1]);
^close(fildes[1]);
^close(fildes[0]);
/* stdout este redirectat acum cгtre o conductг */ , /* procesul fiu executг comanda */
^execlp(command1, command2, 0);
}
/* a doua componentг a liniei de comandг */]
^close(stdin);
^close(fildes[0]);
^close(fildes[1]);
/* intrarea standard este acum o conductг */
}
^execv(command2, command2, 0);
}
/* pгrintele continuг de aici...
* a?teapг terminarea fiului dacг este nevoie*/
^if(amper==0)
^redit=wait([and]status);
Shell-ul cite?te o linie de la intrarea sa standard ?i o interpreteazг dupг un set fixat de reguli. Descriptorii de intrare ?i ie?ire standard ai fi?ierelor pentru shell-ul login sunt uzual terminalul pe care utilizatorul оi folose?te a?a cum se va vedea оn capitolul 10. Dacг shell-ul recunoa?te ?irul de intrare ca o comandг internг (de exemplu, comenzile cd, for, while ?i altele), se executг comanda intern dar fгrг a mai crea procese; altfel, presupune comanda ca fiind numele unui fi?ier executabil.