Czytałem napis na ścianie, Unikaj globów. Co prowadzi do oczywistego pytania, jak najlepiej to zrobić?Jak nie używać zmiennych globalnych w c
Oczywiście chcę to zrobić z bieżącym projektem. Celem jest umożliwienie odległemu komputerowi wysłania "naciśnięć klawiszy" do aplikacji, które mają już czytnik STID. Chodzi o to, aby istniejący kod wykrył, że nie ma oczekującego naciśnięcia klawisza, a następnie sprawdź, czy istnieje "naciśnięcie klawisza udp", a jeśli tak, zapakuj go tak, aby wyglądał jak wejście klawiaturowe. Minimalnie inwazyjny i nie będzie wymagał dopełnienia retro-dopasowania w kodzie innych osób.
Więc brukowane małą UDP czytelnika gniazda, która używa setup()
funkcję otwierania i związać z portu, a następnie service()
funkcję w pętli wykorzystującym nonblocking select()
raz, bez pętli, wystarczy sprawdzić, czy jest coś do czytania w tej chwili. Jeśli tak, odczytywać dane z gniazdem i coś z tym zrobić, w przeciwnym wypadku zwraca 0.
// pseudo c
char c;
setup();
while (1)
{
c = check_for_keyboard_entry();
if (c == 0)
c = service();
handle_keypress(c);
do_a_bunch_of_other_stuff();
}
Oczywistym sposobem na to jest z kilku globalnych przenieść port, limit czasu, sockaddr użytkownika itd. Między dwie funkcje. Ale chcesz zapalić globale, prawda?
Jaki jest preferowany sposób przeniesienia sześciu lub ośmiu znaków między funkcjami?
Gdybym użył vars statycznych w setup()
, czy byłyby dostępne przez rutynę service()
?
Przypuszczam, że struktura, która zostanie zdezynfekowana i przekazana będzie działać. Powinienem mieć cleanup()
, aby zamknąć gniazdo i zwolnić pamięć.
PAMIĘTAJ, TO JEST C PYTANIE. NIE C++!
_'' Przypuszczam, że struktura, która zostanie zdezynfekowana i przekazana będzie działać "" - Masz to! –
+1 dla nieprzetworzonej prędkości! Jakieś inne podejścia? –
Proszę naprawić \ 0 do 0 lub "\ 0" –