Portál AbcLinuxu, 10. května 2024 12:02


Dotaz: Vlastni shell

28.5.2005 22:54 Akzirk
Vlastni shell
Přečteno: 144×
Odpovědět | Admin
Zdarek lidi, predem se priznavam, ze se trapim s jednou zapoctovou ulohou. :-( Za ukol je napsat jednoduchy shell, ktery umi rouru a presmerovani do souboru. S tema rourama uz to bez problemu slape, vsechno se zavira (eventuelne ceka) na spravny okamzik a podobne. Myslel jsem si, ze rozsireni o vystup do souboru nebude nijak slozity. Proste misto pipy otevru soubor a bude to. Nejak tahle : if (data[i-1].smeruj==2) { // smeruj to do souboru fd[i-1][1] = open(data[i].command, O_CREAT | O_WRONLY ); } else { pipe (fd[i-1]); } ... Ale neni to to prave. Bud to tak jednoduse nejde, nebo delam nekde chybu nebo fakt nevim... Dik za vhodne popichnuti :-) Filip
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

28.5.2005 23:59 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Vlastni shell
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zaleží na tom, co děláš předtím, a co potom... Ale tohle funguje (výstup ls se zapíše do souboru stdout):
int
main(void)
{
    int fd;

    fd = open("stdout", O_CREAT | O_WRONLY);
    if (fork()) {
        dup2(fd, 1);
        execl("/bin/ls", "ls", NULL);
    }
    else
        puts("Ble ble");

    return 0;
}
tak si to přeber. V tvém kódu mi tedy přijde podezřelé, že se výstupní soubor jmenuje data[i].command, ale to může být jen divné jméno proměnné.
29.5.2005 11:28 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Vlastni shell
Večer se mi to nějak nezdálo, ale řekl jsem si, že už je možná moc pozdě. Ale je ráno a pořád mi připadá trochu divné, že se ten execl volá v procesu rodiče. Spíš by tam asi mělo být if (!fork())
29.5.2005 14:35 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Vlastni shell
Jo, určitě, díky za opravu. I když na demonstraci toho, že se proces forkne, jeden z forknutých dup2()ne na deskriptor 1 nějaký otevřený soubor a něco spustí, je to vlastně jedno.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.