I promised to show how I made the function posix_system()
callable from Python programs. This is shown later in
`Modules/posixmodule.c
':
static struct methodlist posix_methods[] = { ... {"system", posix_system}, ... {NULL, NULL} /* Sentinel */ }; void initposix() { (void) initmodule("posix", posix_methods); }
(The actual initposix()
is somewhat more complicated, but many
extension modules can be as simple as shown here.) When the Python
program first imports module posix
, initposix()
is
called, which calls initmodule()
with specific parameters.
This creates a `module object' (which is inserted in the table
sys.modules
under the key 'posix'
), and adds
built-in-function objects to the newly created module based upon the
table (of type struct methodlist) that was passed as its second
parameter. The function initmodule()
returns a pointer to the
module object that it creates (which is unused here). It aborts with
a fatal error if the module could not be initialized satisfactorily,
so you don't need to check for errors.