文件I/O

来源:互联网 发布:protobuf3 json 编辑:程序博客网 时间:2024/05/17 10:39
1.open函数
通过man查看open的帮助文档发现open有两个原型分别为:
int open(const char *pahtname, int flags);
int open(const char *pathname,int flags,mode_t mode);
但c语言中并没用支持重载,那为什么open有两个原型呢?
在fcntl.h文件中发现open的真正原型是这样的:
extern int open (const char *file, int __oflag, ...);
也就是说open实际上是一个带有可变参数的函数。只有当O_CREAT
作为第二个参数时才会用到后面的可变参数。
file:为要打开文件的名字
flag:支持多个选项,下面列出几个简单的,具体可以通过man来查看:
O_RDONLY:只读打开
O_WRONLY:只写打开
O_RDWR:读写打开
O_APPEND:每次写时都追加到文件的末尾。(即使用lseek改变文件的位置,再进行写时也会追加到文件末尾)
O_TRUNC:如果文件存在,而且为只写或读写打开,将其截断为0。
可变参数:由于决定创建文件时文件的权限,但权限不是完全由这个标准决定,还要看umask值。


2.read函数
ssize_t read(int fd, void *buf,size_t count)
从文件描述符fd中读出count个字节存在buf指向的内存中。如果count值大于SSIZE_MAX那么结果是未定义的。


3.write函数
ssize_t write(int fd,const void *buf,size_t count)
向文件描述符fd中写count个字符。buf是写入的内容。


4.lseek函数
off_t lseek(int filedes,off_t offset,int wherence)
lseek可以显示的为一个打开的文件设置偏移量。
若wherence是SEEK_SET,则将该文件的偏移量设置为距文件开始处offset个字节。
若wherence是SEEK_CUR,则将该文件的偏移量设置为其当前值加offset,offset可正可负。
若wherence是SEEK_END,则将该文件设置为文件长度加offset,offset可正可负。
原创粉丝点击