pisanie w

Potrzebujesz pomocy z C, C++, perl, python, itp.
ironcurtain
Posty: 1
Rejestracja: 14 marca 2009, 19:30
Lokalizacja: RLA\WB\EPI

pisanie własnej powłoki

Post autor: ironcurtain »

Napisałem swoją powłokę:

Kod: Zaznacz cały

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>


int main(void) {
    FILE *fp;
    char t[100];
while(1)
{
    /* Sekwencja otwierajaca plik w trybie do zapisu */
    if((fp=fopen("test", "w")) == NULL) {
        printf("Cannot open file.\n");
        exit(1);
    }

    printf("Enter a string and a number: ");
    fscanf(stdin, "%s", &t); /* Wczytujemy z klawiatury */


system(t);



}
    return 0;
}
Program się kompiluje i wykonuje ale tylko jeden raz. Po wpisaniu polecenia wykonywane jest ono ale wyskakuje błąd:

Kod: Zaznacz cały

Naruszenie ochrony pamięci
i program się zamyka.
Druga sprawa dotyczy tego aby dopisać kod, który spowoduje że wpisane polecenie będzie wykonywane w tle. Nie wiem jak się do tego zabrać. Prosiłbym o jakieś wskazówki.
jedi1
Posty: 46
Rejestracja: 08 maja 2007, 17:08
Lokalizacja: Gdynia

Post autor: jedi1 »

Tekst zczytuj poleceniem fgets, bo fscanf reaguje na białe znaki inne niż nowa linia.

Programów nie włączaj poleceniem system, ponieważ jest to wywołanie powłoki systemowej. Wołanie system("ls") skutkuje wywołaniem bash ls.

W systemach Uniksowych włączanie innych programów z twojego odbywa się za pomocą pary funkcji fork/exec. Więcej informacji na temat jak używać funkcji systemowych możesz znaleźć np. w książkach pana Stevensa http://www.kohala.com/start/.

Poczytaj też o deskryptorach plików.

No i jeszcze wielokrotnie otwierasz plik w pętli. Jeśli taki był twój zamiar to dodaj jeszcze fclose.

Jeszcze może ci się przydać biblioteka readline.
ODPOWIEDZ