Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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, pollv
信号驱动I/Ov
epollvv
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)