Я работаю над приложением, управляемым событиями, и хотел бы предоставить API высокого уровня для низкоуровневого интерфейса системы.В настоящее время я сомневаюсь, как распространить errno
вниз по стеку вызовов.Вот мой текущий API
typedef struct watcher_t watcher_t;
typedef struct event_iterator_t event_iterator_t;
event_iterator_t *poll_events(watcher_t *watcher,
int poll_timeout_millis,
void *buffer);
const char* take_event_path(void *event_buffer,
event_iterator_t *iterator);
Проблема в том, что у вызывающей стороны событий опроса в настоящее время нет другого выбора, кроме как использовать errno
.Я имею в виду
#include <errno.h>
void *buf = //...
watcher_t *watcher_ptr = //...
event_iterator_t * iterator_ptr = poll_events(watcher_ptr, 1000, buf);
if(iterator_ptr == NULL){
perror("Error while getting iterator");
}
Я не уверен, что такой подход широко используется.Есть ли какие-либо преимущества в объявлении типа результата int
и event_iterator_t **
в качестве параметра out.
int poll_events(watcher_t *watcher,
int poll_timeout_millis,
void *buffer,
event_iterator_t **out);