Bash - sprawdzanie, czy określony klawisz jest naciśnięty.

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
artur.sc
Sędziwy Jeż
Sędziwy Jeż
Posty: 63
Rejestracja: 09 kwie 2010, 14:18
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: Bash - sprawdzanie, czy określony klawisz jest naciśnięty.

Post autor: artur.sc »

> Może zdradzisz nam dokładnie co to za projekt i dlaczego wymaga sprawdzania czy d jest wciśnięte czy nie
Nie, nie chcę zdradzać wszystkich szczegółów. To co opisałem tutaj jest zupełnie wystarczające. To jak skrypt będzie reagował na naciśnięcia różnych klawiszy nie ma tutaj żadnego znaczenia. Może rozpocząć odtwarzać moją ulubioną mp3-kę lub wysłać e-maila do cioci Krysi, co tam komu pasuje....

> dlaczego rozwiązanie z klawiszami funkcyjnymi, które zaproponowałem ci nie pasuje.
To rozwiązanie nie pasuje z dwóch powodów:
Pierwszy - jest nieeleganckie.
Załóżmy - wysyłam mój skrypt kumplowi i co.... ? Pisze mu - weź sobie poprzypisuj cośtam do klawiszy funkcyjnych ? No bez jaj :-)
Drugi - Gdybym miał pod kilkoma klawiszami Fx różne skrypty, to przeniesienie wyniku jakiejś operacji z jednego skryptu do drugiego byłoby kłopotliwe (tego problemu nie ma gdy uruchamiam jeden skrypt).

EDIT:
rack pisze:Stary, a odpowiedziałeś sobie gdzie ty chcesz sprawdzać, który klawisz został wciśnięty?

Wiesz, który proces chcesz śledzić, które stdin sprawdzać ???
Nie rozumiem Twojego pytania.
W określonym miejscu w programie, cyklicznie, ma być sprawdzane czy klawisz jest w danej chwili naciśnięty. Nic nie wiem o żadnym stdin, nie rozumiem o jakim procesie piszesz.
Awatar użytkownika
grzemach
Sędziwy Jeż
Sędziwy Jeż
Posty: 97
Rejestracja: 05 wrz 2007, 21:42
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Bash - sprawdzanie, czy określony klawisz jest naciśnięty.

Post autor: grzemach »

kolego co to za aplikacja i czemu dokładnie tak ma działać? Analizowałeś w jaki sposób będzie można pracować na komputerze gdy ta aplikacja jest uruchomiona? Przecież, aby cokolwiek napisać będzie to tragedia. Jednak pewnie chcesz zrobić komuś psikusa i po kliknięciu na jakiś klawisz uruchomić kasowanie katalogu domowego, cóż każdy ma prawo coś takiego napisać. Jednak jak wspomnieli koledzy w bashu tego bardzo się nie da.

A jeśli bardzo Ci zależy jak to zrobić, musisz poszukać, podpowiem abyś szukał kodu c/c++ dla "key loggera". Na jego podstawie możesz zrobić to co chcesz. Z poziomu aplikacji masz możliwość uruchomić skrypt basha.

Jeśli nie znajdziesz, to jako moduł jądra taka aplikacja jest możliwa do napisania na 100% bo znajomy pisał na zajęciach. Będziesz musiał załadować ją do jądra przez aktywator - da się zrobić, ale nie wiem czy sam będzie mógł się usunąć - pewnie na to też będzie jakiś posób, przykładowo uruchomienie skryptu w bashu który uruchomi odpowiednią komendę.
Awatar użytkownika
Dwimenor
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1260
Rejestracja: 18 mar 2008, 16:14
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Architektura: x86_64

Odp: Bash - sprawdzanie, czy określony klawisz jest naciśnięty.

Post autor: Dwimenor »

artur.sc pisze: Pierwszy - jest nieeleganckie.
Wg mnie jest bardzo eleganckie. Jeden skrypt, żadnego kompilowania, martwienia się o inną architekturę systemu etc.
Drugi - Gdybym miał pod kilkoma klawiszami Fx różne skrypty, to przeniesienie wyniku jakiejś operacji z jednego skryptu do drugiego byłoby kłopotliwe (tego problemu nie ma gdy uruchamiam jeden skrypt).
Zaprezentowałem sposób w jaki to osiągnąć jednym skryptem. Skrypt przyjmuje jako pierwszy argument i na tej podstawie uruchamia dane polecenie a następnie odsyła je w tło i kończy swoje działanie. Odpowiedni parametr killuje wszystko.
Wymiana informacji pomiędzy kolejnymi odpaleniem: zapisujesz sobie do /tmp w plikach.
Załóżmy - wysyłam mój skrypt kumplowi i co.... ? Pisze mu - weź sobie poprzypisuj cośtam do klawiszy funkcyjnych ? No bez jaj
xbindkeys na przykład. mógłbyś pokombinować.


uważam, że dalsza dyskusja nie ma sensu, póki ktoś się nie zlituje i nie napisze takiego programu, albo autor sam poczyta trochę. W pygame nie wygląda to na trudne.
Poniższe zdanie jest fałszywe.
Powyższe zdanie jest prawdziwe.
artur.sc
Sędziwy Jeż
Sędziwy Jeż
Posty: 63
Rejestracja: 09 kwie 2010, 14:18
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: Bash - sprawdzanie, czy określony klawisz jest naciśnięty.

Post autor: artur.sc »

> Analizowałeś w jaki sposób będzie można pracować na komputerze gdy ta aplikacja jest
> uruchomiona? Przecież, aby cokolwiek napisać będzie to tragedia.
A kto mówi o tym że w czasie działania skryptu cokolwiek innego będzie robione ?
Napisałem wyraźnie, że będzie uruchamiany max na kilka minut i w tym czasie klawiatura komputera ma służyć TYLKO do sterowania skryptem.

> Jednak pewnie chcesz zrobić komuś psikusa i po kliknięciu na jakiś klawisz uruchomić
> kasowanie katalogu domowego, cóż każdy ma prawo coś takiego napisać. Jednak jak
> wspomnieli koledzy w bashu tego bardzo się nie da.
Chyba się zapędziłeś.... Nic takiego nie zamierzam pisać, ani robić żadnych "psikusów".

Ja chce się poprostu dowiedzieć jak można sprawdzić stan klawisza na klawiaturze, tak poprostu - to chcę wiedzieć. Teraz to już chcę to wiedzieć "dla zasady". Nie wiedziałem jak to jest rozwiązane w Linuksie, myślałem że "wyciągnięcie" takiej informacji z systemu będzie w miare proste. Dzięki za odpowiedzi ale proszę, dajcie już spokój z analizowaniem całego skryptu, roztrząsaniem tego na ile będzie wydajny i czy praca na komputerze będzie wygodna gdy będzie uruchomiony...
Pozdrawiam

EDIT:
> Wg mnie jest bardzo eleganckie. Jeden skrypt, żadnego kompilowania, martwienia się o
> inną architekturę systemu etc.
Nadal pozostaję przy swoim zdaniu - to jest nieeleganckie ponieważ wymaga ingerencji w OS. Ja nie chce na stałe mieć pod F5 jakichś skryptów. Ja chce aby F5 spełniało określoną funckję tylko wtedy gdy uruchomię skrypt.

> Wymiana informacji pomiędzy kolejnymi odpaleniem: zapisujesz sobie do /tmp w
> plikach.
Czyli aby z jednej zmiennej skorzystać w innym miejscu to musiałaby jeszcze zostać zapisana na dysk ? To napewno nie jest ani eleganckie ani wydajne :-)
Awatar użytkownika
grzemach
Sędziwy Jeż
Sędziwy Jeż
Posty: 97
Rejestracja: 05 wrz 2007, 21:42
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Bash - sprawdzanie, czy określony klawisz jest naciśnięty.

Post autor: grzemach »

Więc po co ona ma działać w tle? Jak będzie uruchamiana na kilka minut, może być to zwykły terminal i z niego sczytywane znaki.
Awatar użytkownika
Dwimenor
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1260
Rejestracja: 18 mar 2008, 16:14
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Architektura: x86_64

Odp: Bash - sprawdzanie, czy określony klawisz jest naciśnięty.

Post autor: Dwimenor »

grzemach pisze:Więc po co ona ma działać w tle? Jak będzie uruchamiana na kilka minut, może być to zwykły terminal i z niego sczytywane znaki.
No wiesz, program "do odzyskiwania haseł do Tibii" powinien jednak działać w tle.
HIHIHI
Poniższe zdanie jest fałszywe.
Powyższe zdanie jest prawdziwe.
artur.sc
Sędziwy Jeż
Sędziwy Jeż
Posty: 63
Rejestracja: 09 kwie 2010, 14:18
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: Bash - sprawdzanie, czy określony klawisz jest naciśnięty.

Post autor: artur.sc »

grzemach pisze:Więc po co ona ma działać w tle? Jak będzie uruchamiana na kilka minut, może być to zwykły terminal i z niego sczytywane znaki.
No następny.... Ludzie, opanujcie się :-)
A możesz sobie wyobrazić skrypt, który ma wykonywać operacje na kilku różnych oknach ?
Wtedy nie może być to zwykły terminal, bo nie będzie on przez cały czas aktywnym oknem.
Awatar użytkownika
borzole
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 127
Rejestracja: 10 sie 2010, 11:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Bash - sprawdzanie, czy określony klawisz jest naciśnięty.

Post autor: borzole »

Prawdę mówiąc też kiedyś nad tym się zastanawiałem i nic nie znalazłem. Teraz tak zupełnie mnie olśniło, że to jest b. proste. Potrzebujesz stworzyć skrypt działający jako coś ala klient-serwer. Jedna część robi swoje w tle (serwer/demon whatever), a druga nasłuchuje klawiatury w pętli po prostu przez:

Kod: Zaznacz cały

read -sn 1 KEY
Teraz kwestia komunikacji jest na dwa sposoby: mkpipe/trap

o rozwiązaniu z pipe przeczytasz tu: http://www.linuxjournal.com/content/usi ... fifos-bash a przy trap wykorzystaj sygnały powyżej 35 (man 7 signal)

taki przykładzik:
uruchom w jednej konsoli to: https://code.google.com/p/borzole/sourc ... _server.sh
a w drugiej to https://code.google.com/p/borzole/sourc ... _client.sh
Złożyć w jeden skrypt, serwer wysłać w tło (&), a klient łapie klawiaturę.
artur.sc
Sędziwy Jeż
Sędziwy Jeż
Posty: 63
Rejestracja: 09 kwie 2010, 14:18
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: Bash - sprawdzanie, czy określony klawisz jest naciśnięty.

Post autor: artur.sc »

> Prawdę mówiąc też kiedyś nad tym się zastanawiałem i nic nie znalazłem.
Dziękuję że to napisałeś. Mam wrażenie że część osób nie próbuje rozwiązać postawionego problemu, tylko usiłuje mnie przekonać iż źle zabieram się do pisania skryptu.

> Potrzebujesz stworzyć skrypt działający jako coś ala klient-serwer. Jedna część robi
> swoje w tle (serwer/demon whatever), a druga nasłuchuje klawiatury w pętli po prostu
> przez: read -sn 1 KEY
Opisane przez Ciebie rozwiązanie rzeczywiście powinno zadziałać, ale jest jedno "ale".
Ja potrzebuję, aby skrypt w czasie pracy przełączał się między oknami, tzn. terminal nasłuchujący klawiaturę nie może być aktywnym oknem = wracamy do punktu wyjścia....
Z tych informacji które się tutaj pojawiły wydaje mi się, że jedynym rozwiązaniem jest analiza
/dev/input/by-path/*kbd
Do tego pewnie trzeba napisać program w jakimś sensowniejszym języku niż bash, jednak problem jest w tym, że nie mam pojęcia skąd wziąć specyfikację informacji, które się tam pojawiają.
Awatar użytkownika
borzole
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 127
Rejestracja: 10 sie 2010, 11:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: Bash - sprawdzanie, czy określony klawisz jest naciśnięty.

Post autor: borzole »

Kod: Zaznacz cały

sudo cat /dev/input/by-path/*kbd |xxd 
naciśnij kilka razy spację i z tej totalnej sieczki wyciągnij powtarzający się wzór, żeby wiedzieć jaki ciąg oznacza spację :)
Pytanie tylko, czy to ma sens, tzn. czy wzór rzeczywiście się powtarza dla danego klawisza i czy jest to ten sam wzór nie zależnie od sprzętu. Przydała by się dokumentacja.
man hier -> man mknod -> ...pewnie skończy się na jakimś kodzie źródłowym :)
http://code.google.com/p/logkeys/source ... logkeys.cc
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: Bash - sprawdzanie, czy określony klawisz jest naciśnięty.

Post autor: beluosus »

Pomijając wszelkie kwestie związane z użytecznością tego co chcesz uzyskać - przechodzę do meritum. Czytanie zdarzeń klawiatury, fragment mojego keyloggera w C. Najistotniejsze dla Ciebie masz w switchu, mam nadzieję, że kody klawiszy sam dasz radę uzyskać. Mała uwaga, jest to dla systemu 32 bitowego, dla 64 bit trzeba wprowadzić małe modyfikacje (których u siebie jeszcze nie testowałem więc je stąd usunąłem). Dla 32b pierwsze 8 bajtów jest przeznaczone na czas, a w 64b 16 bajtów (a właściwie 4/8 bajty na sekundy i 4/8 bajty na mikrosekundy) .

Kod: Zaznacz cały

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

#define RBYTES 24 /* max length of single event from keyboard file*/

int kbd; /* keyboard dev file descriptor */

void main_loop();

int main(void) /*(int argc, char **argv)*/
{
    /* open input keyboard device file */
    if ((kbd = open("/dev/input/event0", O_RDONLY)) < 0)
    {
        perror("Failed to open input device");
        exit(1);
    }
    main_loop();
    close(kbd);
    return 0;
}

void main_loop()
{
    double time     = 0;
    double time2    = 0;
    int quit        = 0;
    int interval;

    /* main loop, read data from input file */
    while (!quit)
    {
        unsigned i;
        char buf[RBYTES];

        read(kbd, buf, RBYTES);

        for (i = 8; i < (unsigned) 16; ++i)
            printf("%2u ", (unsigned char) buf[i]);
        printf("\t");

        time = (*((unsigned *) buf) + *((unsigned *) (buf + 4)) / 1000000.0) * 1000;

        if (buf[8] == 4)
        {
            switch (buf[12])
            {
                case 16: // litera q
                    quit = 1;
                case 54:
                    printf("prawy shift");
                    break;
            }
        }

        /* time between keyboard events */
        interval = (int) (time - time2);
        if (time2 && interval > 0)
            printf("\t%dms", interval);
        time2 = time;
        printf("\n");
    }
}
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
artur.sc
Sędziwy Jeż
Sędziwy Jeż
Posty: 63
Rejestracja: 09 kwie 2010, 14:18
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: Bash - sprawdzanie, czy określony klawisz jest naciśnięty.

Post autor: artur.sc »

> Pomijając wszelkie kwestie związane z użytecznością tego co chcesz uzyskać -
> przechodzę do meritum. Czytanie zdarzeń klawiatury, fragment mojego keyloggera w C.
Dziękuję za tą odpowiedź - to jest kierunek jakiego oczekiwałem zadając to pytanie.
Próbowałem przerobić ten program w taki sposób, aby sprawdzał, czy naciśnięte są określone klawisze; jeśli tak - to wypisywał który jest naciśnięty i kończył swoje działanie.
Jednak wygląda to tak, ze program zatrzymuje się na read(kbd, buf, RBYTES) i czeka na naciśnięcie klawisza, więc napisanie tego w taki sposób chyba nie jest możliwe.
Ponieważ pierwszy sposób się nie powiódł, pomyślałem że ten program mógłby działać w tle i cały czas monitorować pracę klawiatury. Pooglądałem dane które się pojawiają przy naciskaniu klawiszy i main_loop zamieniłem na:

Kod: Zaznacz cały

void main_loop()
{
    double time     = 0;
    double time2    = 0;
    int quit        = 0;
    int interval;

    /* main loop, read data from input file */
    while (!quit)
    {
        unsigned i;
        char buf[RBYTES];
	bool nacisniety;
        read(kbd, buf, RBYTES);

        time = (*((unsigned *) buf) + *((unsigned *) (buf + 4)) / 1000000.0) * 1000;
	if (buf[12] == 0) 
	{
            switch (buf[10])
            {
		case 30:
		    printf("a zwolniony");
		    break;
		case 31:
		    printf("s zwolniony");
		    break;
		case 32:
		    printf("d zwolniony");
		    break;
		case 33:
		    printf("f zwolniony");
		    break;
            }
	}	

        if (buf[8] == 4)
        {
            switch (buf[12])
            {
                case 16: // litera q
                    quit = 1;
	
		case 30:
		    printf("a nacisniety");
		    break;
		case 31:
		    printf("s nacisniety");
		    break;
		case 32:
		    printf("d nacisniety");
		    break;
		case 33:
		    printf("f nacisniety");
		    break;
            }
        }

        /* time between keyboard events */
        interval = (int) (time - time2);
        time2 = time;
        printf("\n");
    }
Wykrywanie naciśnięcia jak i zwolnienia klawiszy a,s,d,f działa świetnie. Pozostaje ostatnia kwestia - jak te informacje udostępnić dla mojego skryptu bash ?
Pomyślałem że mógłbym zrobić sobie zmienne środowiskowe w stylu
klawisza, klawiszs, klawiszd, klawiszf i im przypisywać wartości 0 i 1.
Jednak oczywiście pojawił się problem ;-)
O ile z odczytywaniem zmiennych środowiskowych za pomocą getenv nie ma problemu, o tyle próba ustawienia zmiennej przez setenv zakończyła się niepowodzeniem.
W jaki sposób najwygodniej jest udostępniać wynik takiego programu działającego w tle dla innych programów ?
Awatar użytkownika
grzemach
Sędziwy Jeż
Sędziwy Jeż
Posty: 97
Rejestracja: 05 wrz 2007, 21:42
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Bash - sprawdzanie, czy określony klawisz jest naciśnięty.

Post autor: grzemach »

ale, się uparłeś na basha, a nie możesz tutaj zrobić zamiast:
printf("a nacisniety");
dać exec ("skrypt bash")??

Kod: Zaznacz cały


/* exec.c written by detour@metalshell.com
 *
 * There are several different ways to run a program
 * using exec. If you use exec() be aware that it will
 * not return to your program. All arguments to exec must
 * be terminated with NULL.
 *
 * exec*l*: takes a list of args.
 * exec*p*: uses the environment path to search for the file.
 * exec*e*: passes current environment variables as well as
 *          ones you supply in a pointer.
 * exec*v*: takes the arguments as a pointer.
 *
 * http://www.metalshell.com
 *
 */
 
 
#include <stdio.h>
#include <unistd.h>
 
#define TYPE 0
 
int main() {
  char *args[] = { "/usr/bin/w", "-h",
                   NULL };
  char *envir[] = { "DUMMY=BEER" };
 
  switch(TYPE) {
    case 0:
      execl("/usr/bin/w", "/usr/bin/w", "-h", NULL);
    case 1:
      execlp("w", "w", "-h", NULL);
    case 2:
      execv("/usr/bin/w", args);
    case 3:
      execle("/usr/bin/w", "/usr/bin/w", "-h", NULL, envir);
    case 4:
      execvp("w", args);
    case 5:
      execve("/usr/bin/w", args, envir);
  }
 
  printf("This should never be seen.\n");
 
  return 0;
}
artur.sc
Sędziwy Jeż
Sędziwy Jeż
Posty: 63
Rejestracja: 09 kwie 2010, 14:18
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: Bash - sprawdzanie, czy określony klawisz jest naciśnięty.

Post autor: artur.sc »

> ale, się uparłeś na basha, a nie możesz tutaj zrobić zamiast:
> printf("a nacisniety");
> dać exec ("skrypt bash")??
Nie, nie mogę, gdyż ja nie mam 10 różnych skryptów dla 10 różnych klawiszy, tylko 1 skrytpt, który ma regować na naciśnięcia 10 klawiszy. Naciśnięcie klawisza 'a', będzie miało wpływ nie tylko na kawałek (if $klawisz = 'a' then ....), ale też na resztę programu.
Awatar użytkownika
grzemach
Sędziwy Jeż
Sędziwy Jeż
Posty: 97
Rejestracja: 05 wrz 2007, 21:42
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Bash - sprawdzanie, czy określony klawisz jest naciśnięty.

Post autor: grzemach »

a co robi przy naciśnięciu tych 10 klawiszy? dla każdego wykonuje inną akcję?
to nie możesz zrobić tak:
exec ("skrypt parametr") ?
tudzieź:
exec ("skrypt klawisz_który_został_naciśnięty_podany_jako_parametr")

mogę zapytać się ile masz lat? i jaka jest Twoja profesja?
artur.sc
Sędziwy Jeż
Sędziwy Jeż
Posty: 63
Rejestracja: 09 kwie 2010, 14:18
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: Bash - sprawdzanie, czy określony klawisz jest naciśnięty.

Post autor: artur.sc »

grzemach pisze:a co robi przy naciśnięciu tych 10 klawiszy? dla każdego wykonuje inną akcję?
to nie możesz zrobić tak:
exec ("skrypt parametr") ?
tudzieź:
exec ("skrypt klawisz_który_został_naciśnięty_podany_jako_parametr")
Masz trudności w czytaniu ze zrozumieniem ? Napisałem przed chwilą, że to nie są niezależne skrypty - przekazanie jednego parametru między nimi nic mi nie daje.
mogę zapytać się ile masz lat? i jaka jest Twoja profesja?
Oczywiście że możesz zapytać. Zarówno na pierwsze jak i na drugie pytanie nie udziele Ci odpowiedzi, gdyż jest to moja prywatna sprawa i nic Ci do tego.
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: Bash - sprawdzanie, czy określony klawisz jest naciśnięty.

Post autor: beluosus »

@artur.sc: jeśli chodzi o komunikację między skryptami/programami to najprostszym rozwiązaniem są pliki/potoki nazwane (fifo).

PS
Używaj przycisku "Cytuj" (znacznik quote) zamiast nieczytelnego ">".
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
artur.sc
Sędziwy Jeż
Sędziwy Jeż
Posty: 63
Rejestracja: 09 kwie 2010, 14:18
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: Bash - sprawdzanie, czy określony klawisz jest naciśnięty.

Post autor: artur.sc »

beluosus pisze:@artur.sc: jeśli chodzi o komunikację między skryptami/programami to najprostszym rozwiązaniem są pliki/potoki nazwane (fifo).
Dzięki za odpowiedź. Z tego co widzę to powinno rozwiązać sprawę.
EDIT: Jednak nie jest tak różowo jak się wydawało.
Jeśli w programie sprawdzającym klawiatuę wysyłam do potoku literę która została naciśnięta, a w skrypcie bash odczytuje tą litere z potoku, to skrypt zatrzymuje się i czeka aż dostanie informację (jest to oczywiście niepożądane).
Z informacji które znalazłem wynika że taki jest "urok" potoków nienazwanych, że służą one do synchronizacji procesów i tak poprostu działą. Więc w tym przypadku raczej się nie sprawdzą.
PS
Używaj przycisku "Cytuj" (znacznik quote) zamiast nieczytelnego ">".
Dla mnie ">" było czytelne (przyzwyczajenie z maili) - jeśli inni ludzie wolą quote - dla mnie żadnen problem aby go używać.
Dziękuje jeszcze raz za pomoc i pozdrawiam.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości