Wann muss ich nach EINTR suchen und den Funktionsaufruf wiederholen?
Ich bin die Programmierung einer user-Anwendung für ein embedded Linux-system, und ich bin mit den gängigen Funktionen wie open, close, read, ioctl, etc. für die Geräte. Jetzt habe ich gelesen, EINTR, zeigt an, dass die Funktion unterbrochen wurde durch ein signal, aber ich bin mir nicht sicher über die Auswirkungen. In alle Beispiel-Programme, die ich habe, ist es manchmal nicht getan, z.B. ioctl(), ist es manchmal nicht getan, z.B. read(). Also, ich bin ein wenig verwirrt.
Wann muss ich den vorzugsweise check für EINTR, und wiederholen Sie die Funktion aufrufen?
Kommentar zu dem Problem
warum wollen Sie die Funktion aufrufen, ein zweites mal? nachdem der interrupt verarbeitet wurde, wird die Steuerung wieder übergeben Ihre Anwendung/Funktion
Ähnliche Frage: stackoverflow.com/questions/3633844/...
InformationsquelleAutor der Frage stefangachter | 2011-02-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Siehe sigaction : http://pubs.opengroup.org/onlinepubs/009695399/functions/sigaction.html
Standardmäßig haben Sie die SA_RESTART Verhalten, so dass Sie nicht haben, um über sorgen EINTR, wenn Sie nicht spielen mit Signalen.
InformationsquelleAutor der Antwort Yann Droneaud
Dieser link hat eine ziemlich gute Erklärung.
http://www.ibm.com/developerworks/linux/library/l-reent.html
Prost!
InformationsquelleAutor der Antwort Ricko M
Ist Ihre Anwendung-Ereignis-getrieben? (Also seine main-loop gehören
select()/epoll_wait()
nennen).In einem ereignisgesteuerten Anwendung, die Sie blockieren kann sämtliche Signale und nur die Blockierung für die Dauer von
pselect()/epoll_pwait()
nennen. Diese, wie der rest von deinem code nie zu tun haben mit EINTR.InformationsquelleAutor der Antwort Maxim Egorushkin
Ich hatte ein ähnliches problem, wenn auf eine Eingabe wartet, aus einer named pipe mit read().
Ich eine Erklärung gefunden und ein nützliches makro für primitive in GNU-libc-Dokumentation: TEMP_FAILURE_RETRY
Beispiel:
InformationsquelleAutor der Antwort lobosch