您的位置:首页 > 运维架构 > Linux

linux文件操作函数

2014-02-28 14:23 344 查看


linux常见文件及目录操作函数

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可以自定义新的文件描述符,通常用来重新打开或者重定向文件描述符。例如:

dup2(fd, STDOUT_FILENO);

重定向文件描述符fd到标准输出。

12、select

原型:

#include <unistd.h>

int select(int n, fd_set *readfds, fd_set *writefds, fd_set
exceptfds, structtimeval *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因下层设备而异。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: