libpq 라이브러리를 사용하여 PostgreSQL 데이터베이스에 데이터를 게시하는 데몬을 C에 작성합니다. 그것은 다음과 같은 구조를 가지고 :사용자가 프로그램을 종료 할 때 초기화 된 연결을 닫는 방법
init(...) // init function, opens connection
while(1){export(...)} // sends commands
사람이 응용 프로그램을 죽이고 때, PostgreSQL 서버에 열려있는 연결을 떠난다. 나는 그것을 피하고 싶다. 내보내기 (...) 함수의 열기 및 닫기 연결은이 코드가 성능 종속 프레임 워크의 일부이기 때문에 옵션이 아닙니다.
신호 '의 사용()'휴대하지 권장되지 상담. 그 사용은 피해야합니다. 가능한 경우'sigaction()'이 선호되는 해결책입니다. – alk
틀렸어! 'signal'은 ISO-C이고'sigaction'은 POSIX입니다. 따라서 '신호'는 사실 더 휴대 가능합니다. 그러나 그것은 'sigaction'보다 적은 옵션을 가진 오래된 방법이라는 데 동의합니다. 그러나 대부분의 실제 POSIX 시스템보다 주목할 만하게도,'signal '은 실제로'sigaction'을 사용하여 구현됩니다. OP가 플랫폼을 언급하지 않았기 때문에 대답이 'signal'로 사용되었으므로 예제는 POSIX가 아닌 시스템에서도 실행됩니다. – Macmade
필자는 "* ... portable ... *"라고 쓰지 말았어야했습니다. POSIX 함수를 대안으로 언급 할 때, 당신이 옳았습니다. ("* if available ... * disclaimer, btw) . 어쨌든, ISO-C 일지라도, 이것은 각각의 signal()의 구현이 비슷하게 작동 하는지를 확인하지는 않는다. – alk