1、open
原型:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
|
作用:用flags指定的操作打开pathname指定的文件。成功返回一个文件描述符,失败返回-1并设置errno。
常用的flags包括O_RDONLY, O_WRONLY, O_RDWR,O_CREAT, O_TRUNC, O_APPEND等等。它们直接可以在合理的前提下进行逻辑或,例如O_CREAT | O_TRUNC | O_WRONLY。
2、close
原型:
#include <unistd.h>
int close(int fd);
|
作用:注销描述符fd,关闭文件。失败则返回-1并设置errno。
3、read
原型:
#include <unistd.h>
ssize_t read(int fd, const void *buf, size_t count);
|
作用:从描述符fd引用的文件中读出count个字节到buf所指向的缓冲区。成功返回实际读出的字节数,失败返回-1并设置errno。
4、write
原型:
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
|
作用:把buf指向的缓冲区中的count个字节写入到描述符fd引用的文件。成功返回实际写入的字节数,失败返回-1并设置errno。
5、ftruncate
原型:
#include <unistd.h>
int ftruncate(int fd, off_t length);
|
作用:把描述符fd引用的文件缩短到length指定的长度。成功返回0,失败返回-1并设置errno。
6、lseek
原型:
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
|
作用:定位操作文件的指针到相对whence偏移offset的位置。whence代表:SEEK_SET(开始于文件头), SEEK_CUR(开始于当前指针位置,这时offset可以为负数), SEEK_END(从文件结尾往回数)。成功返回指针的新位置,失败或出错返回-1并设置errno。
7、fsync
原型:
#include <unistd.h>
int fsync(int fd);
|
作用:把在fd上执行的写入操作同步到真正的磁盘或其它下层设备文件中。成功返回0,失败返回-1并设置errno。
8、fstat
原型:
#include <sys/stat.h>
#include <unistd.h>
int fstat(int fd, struct stat *buf);
|
作用:把描述符fd引用的文件的相关信息保存到buf指向的stat结构中。成功返回0,失败返回-1并设置errno。
其中stat结构的成员st_mode即文件位模式可以用S_INLINK(mode)、S_ISREG(mode)、S_ISDIR(mode)……等宏返回的真假判断其文件类型(目录、普通文件、符号链接、字符设备、块设备、FIFO管道、套接口等)。另外,st_atime成员可以用ctime这个函数转换为datetime格式的字符串。ctime的原型为:
#include <time.h>
char *ctime(const time_t *timer);
|
9、fchmod
原型:
#include <sys/types.h>
#include <sys/stat.h>
int fchmod(int fd, mode_t mode);
|
作用:把fd引用的文件的模式改变为mode指定的模式,类似shell里面的chmod命令。但要注意八进制的表示方法为以0起头。成功返回0,失败返回-1并设置errno。
10、flock和fcntl
原型:
#include <sys/file.h>
int flock(int fd, int operation);
|
#include <unistd.h>
#include <fcntl.h>
int fcntl(int fd, int cmd);
int fcntl(int fd, int cmd, long arg);
int fcntl(int fd, int cmd, struct flock *lock);
|
作用:在打开文件前给文件上锁以防止其被其它IO进程访问而引起不可预计的后果。
flock的operation包括LOCK_SH, LOCK_EX, LOCK_UN。fcntl的cmd包括F_GETLK, F_SETLK,F_SETLKW……等等。成功返回0,失败返回-1.
fcntl比flock更通用。除了符合POSIX标准外,fcntl还同时支持建议性锁(由程序来检查锁)和强制性锁(由操作系统内核检查锁),另外可以用于读取锁(共享锁)和写入锁(排斥锁)。fcntl除了可以上锁文件外,还可以控制文件的进程组、复制文件描述符等。
11、dup和dup2
原型:
#include <unistd.h>
int dup(int oldfd);
int dup2(int oldfd, int newfd);
|
作用:dup和dup2都用于复制文件描述符,它们调用成功都返回新的描述符,失败则返回-1并设置errno。其中dup2可以自定义新的文件描述符,通常用来重新打开或者重定向文件描述符。例如:
重定向文件描述符fd到标准输出。
12、select
原型:
#include <unistd.h>
int select(int n, fd_set *readfds, fd_set *writefds, fd_set exceptfds, struct timeval *timeout);
|
作用:同时读/写fd_set结构中的描述符集合,n代表集合中的文件描述符最大值加1,不需要的参数设置为NULL。timeout定义select的阻塞等待时间,如果设置为0则为非阻塞式的I/O调用,如果设置为NULL则一直等到I/O操作发生或者出错。
select成功返回受监视的fds集合的文件描述符总数,如果timeout时集合中的文件描述符都没有该表状态则返回0,失败则返回-1并设置errno。
例如:
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
fd_set *writeable_fds;
select(maxfds, NULL, writefds, NULL, 10);
|
有四个宏函数可以对描述符集合fd_set进行操作:
#include <sys/select.h>
FD_ZERO(fd _set *set); /* 清空集合set */
FD_SET(int fd, fd_set *set); /* 把描述符fd添加到集合set */
FD_CLR(int fd, fd_set *set); /* 从集合set中删除描述符fd */
FD_ISSET(int fd, fd_set *set); /* 判断描述符fd是否在集合set中 */
|
13、ioctl
原型:
#include <sys/ioctl.h>
int ioctl(int d, int request, ...);
|
作用:设置或检索文件的多种有关参数并对文件进行一些其它操作。是否可以是ioctl以及传递什么参数给ioctl因下层设备而异。
阅读(1526) | 评论(0) | 转发(0) |