Linux/Unix系统编程手册(Michael Kerrisk)
通用IO模型
Universal I/O Model
int open(const char *pathname, int flags, ... /* mode_t mode */)
ssize_t read(int fd, void *buffer, size_t count)
ssize_t write(int fd, void *buffer, size_t count)
ssize_t pread(int fd, void *buffer, size_t count, off_t offset)
ssize_t pwrite(int fd, void *buffer, size_t count, off_t offset)
int close(int fd)
off_t lseek(int fd, off_t offset, int whence)
int ioctl(int fd, int request, ...)
int link(const char *oldpath, const char *newpath)
int unlink(const char *pathname)
int symlink(const char *filepath, const char *linkpath)
char *realpath(const char *pathname, char *resolved_path)
ssize_t readlink(const char *pathname, char *buffer, size_t bufsize)
int mkdir(const char *pathname, mode_t mode)
int rmdir(const char *pathname)
DIR *opendir(const char *dirpath)
DIR *fdopendir(int fd)
DIR *opendir(const char *dirpath)
DIR *fdopendir(int fd)
struct dirent *readdir(DIR *dirp)
int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result)
void rewinddir(DIR *dirp)
int closedir(DIR *dirp)
int dirfd(DIR *dirp)
int rename(const char *oldpath, const char *newpath)
int remove(const char *pathname)
int nftw(const char *dirpath,
int (*func)(const char *pathname, const struct stat *statbuf,
int typeflag, struct FTW *ftwbuf),
int nopenfd, int flags)
char *getcwd(char *cwdbuf, size_t size)
int chroot(const char *pathname)
char *dirname(char *path)
char *basename(char *pathname)
Signals
Socket
int socket(int domain, int type, int protocol);
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
int listen(int sockfd, int backlog);
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
ssize_t recvfrom(int sockfd, void *buffer, size_t length, int flags,
struct sockaddr *src_addr,
socklen_t *addrlen);
ssize_t sendto(int sockfd, const void *buffer, size_t length, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
Semaphore
sem_t *sem_open(
const char *name,
int oflag, ... /* mode_t mode, unsigned int value */);
int sem_close(sem_t *sem);
int sem_unlink(const char *name);
int sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem);
int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);
int sem_post(sem_t *sem);
int sem_getvalue(sem_t *sem, int *sval);
int sem_init(sem_t *sem, int pshared, unsigned int value);
int sem_destory(sem_t *sem);
Epoll and Select
| I/O mode | 水平触发 | 边缘触发 |
|---|---|---|
| select, poll | v | |
| 信号驱动I/O | v | |
| epoll | v | v |
int select(int nfds, fd_set *readfds, fd_set *wirtefds, fd_set *exceptfds);
int poll(struct pollfd fds[], nfds_t nfds, int timeout);
int epoll_create(int size);
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *ev);
int epoll_wait(int epfd, struct epoll_event *evlist, int maxevents, int timeout);
Process and Threads
pid_t fork(void)
pid_t vfork(void)
void _exit(int status)
void exit(int status)
int atext(void (*func)(void)) gnu c
int onexit(void (*func)(int, void *), void );
int acct(const char *acctfile)
int clone(
int (*func) (void *),
void *child_stack,
int flags, void *func_arg, ...
/* pid_t *ptid, struct user_desc *tls, pid_t *chid */ );
pid_t wait(int *status)
pid_t waitpid(pid_t, int *status, int options)
int wait(idtype_t idtype, id_t id, siginfo_t *infop, int options)
pid_t wait3(int *status, int options, struct rusage *rusage)
pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage)
int pthread_create(
pthread_t *thread,
const pthread_attr_t *attr,
void *(*start)(void *), void *arg)
void pthread_exit(void *retval)
pthread_t pthread_self(void)
int pthrad_equal(pthread_t t1, pthread_t t2)
int pthread_join(pthread_t thread, void **retval)
int pthread_detach(pthread_t thread)
int pthread_mutex_lock(pthread_mutex_t *mutex)
int pthread_mutex_unlock(pthread_mutex_t *mutex)
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutxaxattr_t *attr)
int pthread_mutex_destory(pthread_mutex_t *mutex)
int pthread_cond_signal(pthread_cond_t *cond)
int pthread_cond_broadcast(pthread_cond *cond)
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
int pthread_cond_timedwait(
pthread_condt *cond,
pthread_mutex_t *mutex,
const struct timespec *abstime)
int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr)
int pthread_cond_destory(pthread_cond_t *cond)