errno 확인 중!= EINTR: 무슨 뜻입니까?
이 코드 조각을 여러 번 찾았습니다(또한 유사한 코드가 사용되고 있습니다).open()
대신write()
).
int c = write(fd, &v, sizeof(v));
if (c == -1 && errno != EINTR) {
perror("Write to output file");
exit(EXIT_FAILURE);
}
체크되는 이유&& errno != EINTR
여기?
찾고 있다errno
나는 남자에 대해 다음과 같은 글을 발견했다.EINTR
, 하지만 내가 방문했더라도man 7 signal
그게 날 깨우쳐주진 않아
EINTR Interrupted Function Call(POSIX.1; 중단 함수 호출). signal(7)을 참조해 주세요.
많은 시스템 콜이 보고합니다.EINTR
에러 코드(시스템 콜의 진행중에 신호가 발생했을 경우).실제로 에러는 발생하지 않았습니다.시스템이 자동적으로 시스템콜을 재개할 수 없기 때문에, 에러가 보고되고 있을 뿐입니다.이 코딩 패턴은 이 경우 인터럽트를 무시하기 위해 시스템콜을 재시도합니다
예를 들어, 이 문제는 프로그램이 다음을 사용하는 경우 발생할 수 있습니다.alarm()
타이머가 부족할 때 일부 코드를 비동기적으로 실행합니다.프로그램이 호출하는 동안 시간 초과가 발생한 경우write()
시스템 콜(읽기/쓰기 등)을 재시도하는 것 뿐입니다.
여기 답변은 매우 좋으며, 저는 몇 가지 내부 세부사항을 추가하고 싶습니다.
신호에 의해 중단되는 시스템콜은 중단되거나 반환될 수 있습니다.
EINTR
또는 자동적으로 재기동합니다.SA_RESTART
에 기재되어 있습니다.sigaction(2)
그리고 이 작업을 담당하는 사람은restart_block
시스템 콜을 재시작하기 위한 정보와 인수를 추적하기 위해 사용됩니다.
의 man 페이지에서write
:
데이터가 기록되기 전에 신호에 의해 콜이 중단되었습니다.
언급URL : https://stackoverflow.com/questions/41474299/checking-if-errno-eintr-what-does-it-mean
'programing' 카테고리의 다른 글
vuex 작업으로부터 약속을 반환하는 중 (0) | 2022.08.15 |
---|---|
Vue는 본체의 스크롤 높이를 계산하거나 감시할 수 있습니까? (0) | 2022.08.15 |
Nuxt의 buefy에서 Navbar, Dropdown 및 Modal만 Import하려면 어떻게 해야 하나요? (0) | 2022.08.15 |
선택한 Vue Js 드롭다운에서 값 가져오기 (0) | 2022.08.15 |
Vuejs 2: 컴포넌트에서 부모로 이벤트 전송 (0) | 2022.08.15 |