2017-04-14 16 views
4

시스템에있는 sd-bus.h 파일에는 선택적으로 slot 인수를 취할 수있는 몇 가지 API가 있습니다. 다음은 몇 가지 예입니다 : 호출 코드가 NULL는 다음 내가 호출 코드가 그것에 대해 걱정할 필요가 없습니다 의미 같아요 "부동 슬롯"가 지정sd-bus (C 언어)의 '슬롯'이란 무엇입니까

int sd_bus_call_async(sd_bus *bus, sd_bus_slot **slot, sd_bus_message *m, sd_bus_message_handler_t callback, void *userdata, uint64_t usec); 
int sd_bus_add_filter(sd_bus *bus, sd_bus_slot **slot, sd_bus_message_handler_t callback, void *userdata); 
int sd_bus_add_fallback(sd_bus *bus, sd_bus_slot **slot, const char *prefix, sd_bus_message_handler_t callback, void *userdata); 

합니다. https://github.com/tasleson/dbus-signals/blob/6d0e43d02d24ed51a17ce7df15a3a0a64ec0170d/spamsignals.c#L160

그것은 슬롯을 소요하고 언젠가 나중에 슬롯을 unreferences :이 예제 프로젝트처럼 밖으로 내가 볼 예제 소스 코드의 대부분

. 그러나 실제로는 아무 것도하지 않습니다.

+1

'슬롯'은 하드웨어 버스의 물리적 인 장소입니다. 슬롯은 번호가 매겨지며 (종종 열거 됨) 종종 0부터 커넥터 (슬롯) 수 -1에서 시작하여 슬롯에 광고 보드를 배치 할 수 있습니다. –

+0

이것은'systemd'의'sd-bus'에 매우 특정한 소프트웨어 관련 질문입니다. 나는 하드웨어에 대해 전혀 말하지 않고있다. –

답변

3

자신의 슬롯을 통과하면 sd- 버스 일치 수명이 슬롯 중 하나에 얽히게됩니다. 이렇게하면 슬롯을 참조 해제 할 때 해당 경기를 파괴 할 수 있습니다.
그렇지 않으면 NULL을 전달하면 경기의 생명이 버스 객체 자체에 연결됩니다.
나열된 다른 기능에 대해서도 마찬가지입니다.
* 슬롯이있는 sd_bus_call_async는 슬롯을 참조 해제하여 비동기 호출을 삭제할 수있는 옵션을 제공합니다.
* 슬롯을 참조하지 않을 때 슬롯이있는 sd_bus_add_filter는 필터를 파괴합니다.
나는 그것에 대해 들어 본 적이 없기 때문에 sd_bus_add_fallback에 대해 확실하지 않습니다.
슬롯을 참조 해제 할 때 함수가 호출되는지 확인하려면 여기를 확인하십시오. https://github.com/systemd/systemd/blob/a7753693547233e4a1d6e10b1a8f6515a477f227/src/libsystemd/sd-bus/bus-slot.c#L68

3

페데리코는 정확하지만 더 자세한 정보가 도움이 될까요? 슬롯은 본질적으로 sd_bus 핸들 (vtable, 일치 규칙, 필터 등)에 연결하는 객체의 라이프 사이클을 관리 할 수있는 불투명 한 핸들입니다. 이 기능은 무언가를 추가 한 다음 나중에 제거하려는 경우에 유용합니다.

추가 할 개체가 프로세스 수명 및/또는 사용자가 첨부 한 sd_bus 핸들에 남아있는 경우 NULL을 전달해야합니다.