分类: LINUX
2008-05-01 00:45:56
基本的文件操作
文件描述符
stdin(0)、stdout(1)、stderr(2)
#include
STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO三个宏分别表示0、1、2,为了更好的可读性,但是在编程的时候大多数都选择直接使用0、1、2
操作文件的参数
关闭文件:int close(int fd)
打开文件:包含在头文件:#include
int open(char *
pathname, int flags, mode_t mode):成功打开时候,返回一个指向pathname的文件描述符(大于0的数字),可以理解为类似于指针的东西。若不成功,则返回一个小于0的数字保存在errno变量中。flags:O_RDONLY,O_RDWR,O_WRONLY,O_CREAT(如果文件不存在,则创建文件,且为常规文件),O_EXCL(和creat一起使用,若文件已经存在文件系统中,则创建失败),O_NOCTTY(打开的文件不会成为进程的终端,只在没有任何控制终端的进程在试图打开一个终端的时候起作用,其他情况下被忽略),O_TRUNC(若被打开的文件已经存在,则把源文件中所有内容丢弃,文件大小设置为0),O_APPEND(所有的写操作都是在文件的末端进行),O_NONBLOCK(文件以非阻塞的方式打开,一般文件经常被阻塞),O_SYNC(一般情况下内核是捕获写命令的,在方便的时候写回硬件,这样提高了性能,但是与立即把数据写到硬件相比来说,丢失数据的可能性会更大一点,若使用此标志,就立即写回)
int creat(char *pathname, mode_t mode):mode创建文件的访问权限。
等价于open(pathname,O_CREAT|O_WRONLY|O_TRUNC,mode),open的用法更为方便。
文件的读写与位置指针的移动:
#include
size_t read(int fd, void *buf ,size_t length)
size_t write(int fd, const void *buf, size_t length)
上面发生错误时候均返回-1
linux文件分为两类:可定位以及不可定位;不可定位的文件不支持随机读写,比如先进先出的管道,在输入端写入,在输出端读出。可定位允许在文件的任何位置读写,块设备等。可定位的文件打开时,默认为文件最开始处(即偏移为0),若读10个字节后,偏移为10,若再写入5个字节则在15个位置。若当前在文件的末尾,此时进程试图读文件的时候,read返回0,不是出错的信息,若此时写文件,则文件大小变大,当前位置向文件新的末尾处。
int lseek(int fd, off_t offset, int whence)对文件描述符当前位置进村进行操作,返回相对于开始位置的新的偏移值,
SEEK_SET(文件起始位置), SEEK_CUR(文件的当前位置), SEEK_END(文件的末尾),此为第三个参数的值。
局部读写
int truncate(const char *pathname, size_t length);
int ftruncate(int fd, size_t length)//这两个函数将文件缩短,变为长度为冷天哈的文件。
int fsync(int fd)
int fdatasync(int fd)//此两个文件把文件同步。