首页 > 代码库 > Linux的文件操作
Linux的文件操作
1. 创建
int creat(const char *filename, mode_t mode);
参数mode指定文件的存取权限,mode同umask一起决定文件的最终权限(mode&umask),umask代表了文件在创建时需要去掉的一些存取权限。
umask可通过系统调用umask()来改变:
int umask(int newmask);
该调用将umask设置为newmask,函数返回旧的umask权限,它只影响读,写和执行的权限。
2. 打开
int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);
open()函数有两种方式,其中pathname是文件路径名,缺省默认为当前路径下。
flags表示如下:
O_RDONLY, O_WRONLY, O_RDWR三个标志只能使用其中的一个,
如果使用了O_CREAT标志,则使用函数必须指定mode用来表示文件的访问权限,
int open(const char *pathname, O_CREAT, mode_t mode);
mode表示如下:
3. 读写
文件open后我们返回一个fd(文件描述符),我们通过文件描述符才能进行读写,
int read(int fd, const void *buf, size_t length);int write(int fd, const void *buf, size_t length);
其中buf为指向缓冲区的指针,length为缓冲区的大小(以字节为单位)。
函数read()实现从文件描述符fd所指定的文件中读取length个字节到buf所指向的缓冲区中,返回值为实际读取的字节数。
函数write()实现将length个字节,从buf所指向的缓冲区中写入到文件描述符fd所指向的文件中,返回值为实际写入的字节数。
4. 定位
对于随机文件,我们可以随机的指定位置读写,可使用如下函数进行定位:
int lseek(int fd, offset_t offset, int whence);
lseek()将文件读写指针相对whence移动offset个字节。操作成功,返回文件指针相对于文件头的位置。
参数whence可使用下述值:
SEEK_SET: 相对文件开头
SEEK_CUR: 相对文件读写指针的当前位置
SEEK_END: 相对文件末尾
offset可取负值,lseek(fd,-5,SEEK_CUR)文件指针相对于当前位置向前移动5个字节。
由于lseek函数返回文件开头到当前指针的字节长度,所以lseek(fd, 0, SEEK_END)返回的就是整个文件长度。
5. 关闭
int close(int fd);
Linux的文件操作