📄 pth.h.in
字号:
/* the read-write lock structure */typedef struct pth_rwlock_st pth_rwlock_t;struct pth_rwlock_st { /* not hidden to avoid destructor */ int rw_state; unsigned int rw_mode; unsigned long rw_readers; pth_mutex_t rw_mutex_rd; pth_mutex_t rw_mutex_rw;}; /* the condition variable structure */typedef struct pth_cond_st pth_cond_t;struct pth_cond_st { /* not hidden to avoid destructor */ unsigned long cn_state; unsigned int cn_waiters;}; /* the barrier variable structure */typedef struct pth_barrier_st pth_barrier_t;struct pth_barrier_st { /* not hidden to avoid destructor */ unsigned long br_state; int br_threshold; int br_count; int br_cycle; pth_cond_t br_cond; pth_mutex_t br_mutex;}; /* the user-space context structure */typedef struct pth_uctx_st *pth_uctx_t;struct pth_uctx_st; /* filedescriptor blocking modes */enum { PTH_FDMODE_ERROR = -1, PTH_FDMODE_POLL = 0, PTH_FDMODE_BLOCK, PTH_FDMODE_NONBLOCK}; /* optionally fake poll(2) data structure and options */#ifndef _PTHREAD_PRIVATE#define PTH_FAKE_POLL @PTH_FAKE_POLL@#if !(PTH_FAKE_POLL)/* use vendor poll(2) environment */#ifndef _XOPEN_SOURCE#define _XOPEN_SOURCE#define _XOPEN_SOURCE_set#endif#include <poll.h>#ifdef _XOPEN_SOURCE_set#undef _XOPEN_SOURCE_set#undef _XOPEN_SOURCE#endif#ifndef POLLRDNORM#define POLLRDNORM POLLIN#endif#ifndef POLLRDBAND#define POLLRDBAND POLLIN#endif#ifndef POLLWRNORM#define POLLWRNORM POLLOUT#endif#ifndef POLLWRBAND#define POLLWRBAND POLLOUT#endif#ifndef INFTIM#define INFTIM (-1)#endif#else/* fake a poll(2) environment */#define POLLIN 0x0001 /* any readable data available */#define POLLPRI 0x0002 /* OOB/Urgent readable data */#define POLLOUT 0x0004 /* file descriptor is writeable */#define POLLERR 0x0008 /* some poll error occurred */#define POLLHUP 0x0010 /* file descriptor was "hung up" */#define POLLNVAL 0x0020 /* requested events "invalid" */#define POLLRDNORM POLLIN#define POLLRDBAND POLLIN#define POLLWRNORM POLLOUT#define POLLWRBAND POLLOUT#ifndef INFTIM#define INFTIM (-1) /* poll infinite */#endifstruct pollfd { int fd; /* which file descriptor to poll */ short events; /* events we are interested in */ short revents; /* events found on return */};#endif#endif /* !_PTHREAD_PRIVATE */ /* optionally fake readv(2)/writev(2) data structure and options */#ifndef _PTHREAD_PRIVATE#define PTH_FAKE_RWV @PTH_FAKE_RWV@#if !(PTH_FAKE_RWV)/* use vendor readv(2)/writev(2) environment */#include <sys/uio.h>#ifndef UIO_MAXIOV#define UIO_MAXIOV 1024#endif#else/* fake a readv(2)/writev(2) environment */struct iovec { void *iov_base; /* memory base address */ size_t iov_len; /* memory chunk length */};#ifndef UIO_MAXIOV#define UIO_MAXIOV 1024#endif#endif#endif /* !_PTHREAD_PRIVATE */ /* extension support */#define PTH_EXT_SFIO @PTH_EXT_SFIO@ /* Sfio extension support */#if @PTH_EXT_SFIO@#include <sfio.h>#elsetypedef void *Sfdisc_t;#endif /* global functions */extern int pth_init(void);extern int pth_kill(void);extern long pth_ctrl(unsigned long, ...);extern long pth_version(void); /* thread attribute functions */extern pth_attr_t pth_attr_of(pth_t);extern pth_attr_t pth_attr_new(void);extern int pth_attr_init(pth_attr_t);extern int pth_attr_set(pth_attr_t, int, ...);extern int pth_attr_get(pth_attr_t, int, ...);extern int pth_attr_destroy(pth_attr_t); /* thread functions */extern pth_t pth_spawn(pth_attr_t, void *(*)(void *), void *);extern int pth_once(pth_once_t *, void (*)(void *), void *);extern pth_t pth_self(void);extern int pth_suspend(pth_t);extern int pth_resume(pth_t);extern int pth_yield(pth_t);extern int pth_nap(pth_time_t);extern int pth_wait(pth_event_t);extern int pth_cancel(pth_t);extern int pth_abort(pth_t);extern int pth_raise(pth_t, int);extern int pth_join(pth_t, void **);extern void pth_exit(void *); /* utility functions */extern int pth_fdmode(int, int);extern pth_time_t pth_time(long, long);extern pth_time_t pth_timeout(long, long); /* cancellation functions */extern void pth_cancel_state(int, int *);extern void pth_cancel_point(void); /* event functions */extern pth_event_t pth_event(unsigned long, ...);extern unsigned long pth_event_typeof(pth_event_t);extern int pth_event_extract(pth_event_t ev, ...);extern pth_event_t pth_event_concat(pth_event_t, ...);extern pth_event_t pth_event_isolate(pth_event_t);extern pth_event_t pth_event_walk(pth_event_t, unsigned int);extern pth_status_t pth_event_status(pth_event_t);extern int pth_event_free(pth_event_t, int); /* key-based storage functions */extern int pth_key_create(pth_key_t *, void (*)(void *));extern int pth_key_delete(pth_key_t);extern int pth_key_setdata(pth_key_t, const void *);extern void *pth_key_getdata(pth_key_t); /* message port functions */extern pth_msgport_t pth_msgport_create(const char *);extern void pth_msgport_destroy(pth_msgport_t);extern pth_msgport_t pth_msgport_find(const char *);extern int pth_msgport_pending(pth_msgport_t);extern int pth_msgport_put(pth_msgport_t, pth_message_t *);extern pth_message_t *pth_msgport_get(pth_msgport_t);extern int pth_msgport_reply(pth_message_t *); /* cleanup handler functions */extern int pth_cleanup_push(void (*)(void *), void *);extern int pth_cleanup_pop(int); /* process forking functions */extern int pth_atfork_push(void (*)(void *), void (*)(void *), void (*)(void *), void *);extern int pth_atfork_pop(void);extern pid_t pth_fork(void); /* synchronization functions */extern int pth_mutex_init(pth_mutex_t *);extern int pth_mutex_acquire(pth_mutex_t *, int, pth_event_t);extern int pth_mutex_release(pth_mutex_t *);extern int pth_rwlock_init(pth_rwlock_t *);extern int pth_rwlock_acquire(pth_rwlock_t *, int, int, pth_event_t);extern int pth_rwlock_release(pth_rwlock_t *);extern int pth_cond_init(pth_cond_t *);extern int pth_cond_await(pth_cond_t *, pth_mutex_t *, pth_event_t);extern int pth_cond_notify(pth_cond_t *, int);extern int pth_barrier_init(pth_barrier_t *, int);extern int pth_barrier_reach(pth_barrier_t *); /* user-space context functions */extern int pth_uctx_create(pth_uctx_t *);extern int pth_uctx_make(pth_uctx_t, char *, size_t, const sigset_t *, void (*)(void *), void *, pth_uctx_t);extern int pth_uctx_switch(pth_uctx_t, pth_uctx_t);extern int pth_uctx_destroy(pth_uctx_t); /* extension functions */extern Sfdisc_t *pth_sfiodisc(void); /* generalized variants of replacement functions */extern int pth_sigwait_ev(const sigset_t *, int *, pth_event_t);extern int pth_connect_ev(int, const struct sockaddr *, socklen_t, pth_event_t);extern int pth_accept_ev(int, struct sockaddr *, socklen_t *, pth_event_t);extern int pth_select_ev(int, fd_set *, fd_set *, fd_set *, struct timeval *, pth_event_t);extern int pth_poll_ev(struct pollfd *, nfds_t, int, pth_event_t);extern ssize_t pth_read_ev(int, void *, size_t, pth_event_t);extern ssize_t pth_write_ev(int, const void *, size_t, pth_event_t);extern ssize_t pth_readv_ev(int, const struct iovec *, int, pth_event_t);extern ssize_t pth_writev_ev(int, const struct iovec *, int, pth_event_t);extern ssize_t pth_recv_ev(int, void *, size_t, int, pth_event_t);extern ssize_t pth_send_ev(int, const void *, size_t, int, pth_event_t);extern ssize_t pth_recvfrom_ev(int, void *, size_t, int, struct sockaddr *, socklen_t *, pth_event_t);extern ssize_t pth_sendto_ev(int, const void *, size_t, int, const struct sockaddr *, socklen_t, pth_event_t); /* standard replacement functions */extern int pth_nanosleep(const struct timespec *, struct timespec *);extern int pth_usleep(unsigned int);extern unsigned int pth_sleep(unsigned int);extern pid_t pth_waitpid(pid_t, int *, int);extern int pth_system(const char *);extern int pth_sigmask(int, const sigset_t *, sigset_t *);extern int pth_sigwait(const sigset_t *, int *);extern int pth_connect(int, const struct sockaddr *, socklen_t);extern int pth_accept(int, struct sockaddr *, socklen_t *);extern int pth_select(int, fd_set *, fd_set *, fd_set *, struct timeval *);extern int pth_pselect(int, fd_set *, fd_set *, fd_set *, const struct timespec *, const sigset_t *);extern int pth_poll(struct pollfd *, nfds_t, int);extern ssize_t pth_read(int, void *, size_t);extern ssize_t pth_write(int, const void *, size_t);extern ssize_t pth_readv(int, const struct iovec *, int);extern ssize_t pth_writev(int, const struct iovec *, int);extern ssize_t pth_recv(int, void *, size_t, int);extern ssize_t pth_send(int, const void *, size_t, int);extern ssize_t pth_recvfrom(int, void *, size_t, int, struct sockaddr *, socklen_t *);extern ssize_t pth_sendto(int, const void *, size_t, int, const struct sockaddr *, socklen_t);extern ssize_t pth_pread(int, void *, size_t, off_t);extern ssize_t pth_pwrite(int, const void *, size_t, off_t);END_DECLARATION /* soft system call mapping support */#if PTH_SYSCALL_SOFT && !defined(_PTH_PRIVATE)#define fork pth_fork#define waitpid pth_waitpid#define system pth_system#define nanosleep pth_nanosleep#define usleep pth_usleep#define sleep pth_sleep#define sigprocmask pth_sigmask#define sigwait pth_sigwait#define select pth_select#define pselect pth_pselect#define poll pth_poll#define connect pth_connect#define accept pth_accept#define read pth_read#define write pth_write#define readv pth_readv#define writev pth_writev#define recv pth_recv#define send pth_send#define recvfrom pth_recvfrom#define sendto pth_sendto#define pread pth_pread#define pwrite pth_pwrite#endif /* backward compatibility (Pth < 1.5.0) */#define pth_event_occurred(ev) \ ( pth_event_status(ev) == PTH_STATUS_OCCURRED \ || pth_event_status(ev) == PTH_STATUS_FAILED )#endif /* _PTH_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -