Макросы WIFEXITED WIFEXITSTATUS

Я использую библиотеку luajit ffi для вызова функции waitpid из библиотеки C.

Однако я не могу найти правильную спецификацию для кодирования результата состояния. Единственная документация, которую я нашел, - это макросы C, которые я бы предпочел писать на чистом lua.

Я бегло просмотрел заголовочные файлы, определяющие эти макросы, и вы знаете, что они не простые, а ссылаются на другие макросы, которые ссылаются на другие макросы.

Вы можете помочь?


person hookenz    schedule 04.10.2016    source источник
comment
Предварительно обработать файл C, который вызывает эти макросы? Этого будет достаточно для ваших целей? Например, WIFEXITED в моей системе: ((((__extension__ (((union { __typeof(status) __in; int __i; }) { .__in = (status) }).__i))) & 0x7f) == 0)   -  person kaylum    schedule 04.10.2016
comment
Ах, хороший момент.   -  person hookenz    schedule 04.10.2016
comment
@kaylum - ты понимаешь, что это делает?   -  person hookenz    schedule 04.10.2016
comment
Это просто более надежный способ записи: (status & 0x7f) == 0   -  person kaylum    schedule 04.10.2016


Ответы (1)


Один из способов — обернуть макросы в маленькие функции:

#include <sys/types.h>
#include <sys/wait.h>

int wifexited(int status) {
  return WIFEXITED(status);
}

int wifexitstatus(int status) {
  return WEXITSTATUS(status);
}

Теперь создайте DLL (вы не упомянули ОС, так что вам придется это сделать самостоятельно).

Загрузите DLL ffi.load(...) и, наконец:

waitpidlib = ffi.cdef[[
  int wifexited(int status); 
  int wifexitstatus(int status);
]]
...
local ans = waidpidlib.wifexited(42)
person Gene    schedule 04.10.2016