Moje pytania są następujące:ustalić, czy funkcja jest asynchroniczny sygnał bezpieczny (można nazwać wewnątrz obsługi sygnału)
- Czy istnieje sposób, aby jednoznacznie określić, czy funkcja jest asynchroniczny sygnał-bezpieczny, jeśli nie masz dostępu do jego realizacji?
- Jeśli nie, czy istnieje sposób sprawdzenia, czy funkcja jest wystarczająco bezpieczna dla sygnału asynchronicznego, aby wywołać funkcję obsługi sygnału?
Jeśli czytasz strony podręcznika signal() lub sigaction(), otrzymujesz listę funkcji asynchronizujących sygnał (funkcje, które można bezpiecznie wywoływać wewnątrz funkcji obsługi sygnału). Uważam jednak, że ta lista nie jest wyczerpująca. Na przykład, następująca strona http://linux.die.net/man/7/signal pod asynchroniczny sygnał-safe funkcje nagłówku czytamy:
POSIX.1-2004 (znany również jako POSIX.1-2001 Technicznej Sprostowanie 2) wymaga wdrożenia do zagwarantowanie, że następujące funkcje mogą być bezpiecznie wywoływane wewnątrz obsługi sygnału:
Następnie następuje lista normalnych funkcji bezpiecznego asynchronizmu wymienionych na stronach podręcznika man powyżej. Czytając to, mówi "wymaga", a nie "są to jedyne".
Na przykład, this site mówi, że back_trace_symbols_fd() jest bezpieczny dla asynchronizmu. Ta funkcja uzyskuje dane z dladdr() i nie używa malloc() jak back_trace_symbols(), więc wygląda na to, że może być bezpieczna. Zrobiłem też kilka testów, a wyjściowa struktura dladdr() zawiera zmienne char *, ale te NIE są przestarzałe w czasie wykonywania. Łańcuch znaków, który wskazują one w czasie wykonywania, nawet przed wywołaniem dladdr().
Wszelkie przemyślenia i pomysły, które mogą wskazać mi właściwy kierunek, są mile widziane.
Nie zapomnij się głosować użytecznych odpowiedzi na pytania, czy aby zaakceptować najbardziej użytecznej odpowiedzi na każde z pytań. Jeśli nie jesteś pewien, spójrz na [FAQ] (http://stackoverflow.com/faq), a zwłaszcza [Jak zadawać pytania tutaj?] (Http://stackoverflow.com/faq#howtoask) –