pipe函数
pipe用于创建一个管道,实现进程间通信。
#include<unistd.h>
int pipe(int fd[2]);
f[1]写入,f[0]读出。
双向管道:
#include<sys/types.h>
#include<sys/socket.h>
int socketpair(int domain, int type, int protocol, int fd[2]);
dup函数和dup2函数
#include<unistd.h>
int dup(int file_descriptor);
int dup2(int file_descriptor_one, int file_descriptor_two);
readv函数和writev函数
#include<sys/uio.h>
ssize_t readv(int fd, const struct iovec* vector, int count);
ssize_t writev(int fd, const struct iovec* vector, int count);
sendfile函数
include<sys/sendfile.h>
ssize_t sendfile(int out_fd, int in_fd, off_t* oddset, size_t count);
mmap函数和munmap函数
mmap函数用于申请一段内存空间。我们可以将这段内存作为进程间通信的共享内存,也可以将文件直接映射到其中。munmap函数则释放有mmap创建的这段内存空间。
#include<sys/mman.h>
void* mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
int munmap(void *start, size_t length);
splice函数
splice函数用于在两个文件描述符之间移动数据,也是零拷贝操作。
#include<fcntl.h>
ssize_t splice(int fd_in, loff_t* off_in, int fd_out, loff_t* off_out, size_t len, unsigned int flags);
tee函数
tee函数在两个管道文件描述符之间复制数据,也是零拷贝操作。
#include<fcntl.h>
ssize_t tee(int fd_in, int fd_out, size_t len, unsigned int flags);
fcntl函数
#include<fcntl.h>
int fcntl(int fd, int cmd, ...);