Exemplo n.º 1
0
int main()
{
    init_LCD();
    init_Relay();
    init_Switch();
    init_Buzzer();
    init_LCD();
    init_PWM();

    sei();

    while(1)
    {

        stop();

        int ile_petli = 0; //wartosc zadana przez uzytkownika
        int dlugosc = 0;
        int wait = TAK;

        wyswietl_LCD("Start -> OK");
        _delay_ms(200);

        wait = TAK;
        while(wait)
            if(bit_is_clear(PIN_SWITCH, SWITCH_OK)) wait = NIE;

        dlugosc = get_distance();

        ile_petli = ilosc_petli();

        wykonaj(ile_petli, dlugosc);
        _delay_ms(200);
    }

}
Exemplo n.º 2
0
int wykonaj_polecenie(char **polecenie, int n, int k, char **argv){
        
    int tlo = 0;
    char **i = calloc(sizeof(char*), 128);
    char **start;    
    char dopisz = 0;
    char *wyjscie = NULL;
    char *wejscie = NULL;
    int fd_we, fd_wy; // deskeyptory WE/WY
    char *tmp;
    
    start = i;
    
    ustaw_zmienna(*polecenie);
    
    tmp = strtok(*polecenie, " ");
    while(tmp!=NULL){
        zamien_argumenty(argv,&tmp);        
        (*i) = calloc(sizeof(char), strlen(tmp));
        strcpy(*i++, tmp);
        tmp = strtok(NULL," ");
    }
    
    i = start;
    
    if(strcmp(*i,"exit") == 0){
        exit(0);
    } else if(strcmp(*i,"fg") == 0){
        pid = atoi(*++i);
        signal(SIGTSTP, przekaz_sygnal);            
        moje_fg(&pid, jobs, N);
        return 0;
    } else if(strcmp(*i, "jobs") == 0){
        wypisz_jobs(jobs, N);
        return 0;
    } else if(strcmp(*i, "unset") == 0){
        if(*++i){
            //printf("NAZWA ZMIENNEJ: |%s|",*i);
            unsetenv(*i);
            return 0;
        }
    } 
    
    while (*i) {
        if(strcmp(*i,">")==0){
            wyjscie = *++i;
            czysc_polecenie((i-1));
            i--;
        } else if(strcmp(*i,">>")==0){
            dopisz = 1;
            wyjscie = *++i;
            czysc_polecenie((i-1));            
            i--;
        } else if(strcmp(*i++,"<")==0){
            wejscie = *i++;
            czysc_polecenie((i-2));
            i-=2;
        }        
    }
   
    if(strcmp(*--i,"&")==0){
        *i = NULL;
        free(*i);
        tlo = 1;
    }
    
    i = start;
    int fg_pid;
    
        
    if ((fg_pid=fork())==0){
        domyslne_sygnaly();
        signal(SIGTSTP, SIG_DFL);
            if(k > 0){
                dup2(fd[k-1][0], 0);
                close(fd[k-1][1]);
            }
            if(n>1){
                dup2(fd[k][1], 1);
                close(fd[k][0]);
            }
        if(wyjscie){
            close(1);
            switch (dopisz){
                case 0:
                    fd_wy = open(wyjscie, O_WRONLY | O_CREAT, 0644);
                    break;
                case 1:
                    fd_wy = open(wyjscie, O_WRONLY | O_CREAT | O_APPEND, 0644);
                    break;                    
            }            
        }
        if(wejscie){
            fd_we = open(wejscie, O_RDONLY, 0644);
            dup2(fd_we,0);
        }
        
        if(!tlo){
            signal(SIGTSTP, SIG_DFL);
            wykonaj(i);
        }
        else{
            int pid_tlo;
            int status;
            pid_tlo = fork();
            if(pid_tlo == 0){
                signal(SIGINT, SIG_IGN);
                wykonaj(i);                
            }
            else{
                signal(SIGCLD, SIG_DFL);
                signal(SIGINT, SIG_IGN);
                waitpid(pid_tlo, &status, 0);
                printf("PID: %d | STATUS ZAKOŃCZENIA: %d\n", pid_tlo, status); 
                exit(0);
            }
        }
    }
    else{
        if(k>0){
            close(fd[k-1][0]);
        }
        if(n>1){
            close(fd[k][1]);
        }
    }
    free(i);
    return fg_pid;
}