on_exit() 함수와 atexit() 함수 간에 차이가 있나요?

차이점이 있나요?

   int on_exit(void (*function)(int , void *), void *arg);

   int atexit(void (*function)(void));

에서 사용하는 함수가 종료 상태를 가져온다는 사실 외에 다른 점이 있나요?

즉, 종료 상태에 신경 쓰지 않는다면 둘 중 하나를 사용해야 할 이유가 있습니까?

편집: 많은 답변에서 on_exit는 비표준이기 때문에 사용하지 말라고 경고했습니다. 회사 내부용으로 특정 구성에서 실행되도록 보장된 앱을 개발하는 경우 이 문제를 걱정해야 하나요?

가능하면 atexit()을 사용해야 합니다. on_exit()`는 비표준이며 덜 일반적입니다. 예를 들어, OS X에서는 사용할 수 없습니다.

Kernel.org - on_exit(): 이 함수는 SunOS 4에서 제공되지만 libc4, libc5 및 glibc. 이 함수는 더 이상 Solaris(SunOS 5)에서 발생하지 않습니다. 이 함수를 피하고 대신 표준 atexit(3)을 사용하세요.

해설 (0)
해결책

제가 찾은 이 링크에 따르면 몇 가지 차이점이 있는 것 같습니다. on_exit` 함수가 호출될 때 전달되는 인수를 전달할 수 있습니다... 이를 통해 종료할 때가 되었을 때 몇 가지 정리 작업을 수행할 포인터를 설정할 수 있습니다.

또한 on_exit은 모든 플랫폼에서 호환되지 않을 수 있는 SunOS 전용 함수인 것으로 보이므로 더 제한적일지라도 atexit을 사용하는 것이 좋을 수 있습니다.

해설 (0)

다른 점은 '와' C '는' 다소 이상한 아테스트 on_exit 확장명은 support. dell. GNU 및 또 다른 아는 유니스리 시스템 (하지만 일부가 아니라 posix).

해설 (0)

39, t, 내가 can& @nathan 찾을 경우 종료 코드를 함수가 있는 반환되므로 현재 실행 중인 프로세스를. # 39, t 데이텀이 isn& 기대한다 () ',' 아직 정해지지 시점에 아테스트 호출됨 겁니다. 내가 무얼 의미하는 것이 아니라, 아마도 이 (가), t 보고됨 런타임용으로 개발하십시오 hasn& # 39 이것은 그냥 추측, 꽤 많은 어쨌든요 迈向 os.

마치 인컨텍스트 구조 () '또는' on_exit 사용해야 할 수 있도록 프로그램에 종료 코드를 doesn& # 39, t 일이 아니다. 마지막 것은 결코 있을 수 있는 '뒤집기' 를 통해 주요 기능은 노드전역 exited_cleanly 가변적입니다 진정한. 함수 () ',' 아테스트 등록할 수 있는 방법을 결정할 수 있는 이 변수를 체크 프로그램을 종료되었습니다. 이 두 가지 상태, 하지만 난 약간만이라도 충분하나니 제공하십시오 그칠 것으로 대부분의 합니다. 이 유형의 구성표가 더 많이 지원할 수 있도록 필요한 경우 종료 상태 확장하십시오 수도 있습니다.

해설 (0)

@Nathan

먼저 종료 상태를 확인하는 다른 API 호출이 있는지 확인합니다... 언뜻 보기에는 보이지 않지만 표준 C API에 정통하지 않습니다.

쉬운 대안은 종료 상태를 저장하는 전역 변수를 만드는 것입니다... 기본값은 알 수 없는 오류 원인입니다(프로그램이 비정상적으로 종료되는 경우). 그런 다음 exit를 호출할 때 전역에 종료 상태를 저장하고 모든 종료 함수에서 이를 검색할 수 있습니다. 이 방법은 모든 종료 호출 전에 종료 상태를 부지런히 저장해야 하므로 이상적이지는 않지만, API가 없고 플랫폼에 'on_exit'가 없는 위험을 감수하고 싶지 않다면 이 방법이 유일한 옵션일 수 있습니다.

해설 (0)