一、主要函数(POSIX标准)
1、open()函数
(1)函数原型
int open(const char *pathname, int flags, int perms)
(2)所需头文件
#include <sys/types.h>
#inlcude <sys/stat.h>
#inlcude <fcntl.h>
(3)参数1(pathname)
即将要打开的文件路径
(4)参数2(flags)
文件打开方式
O_RDONLY:以只读方式打开文件
O_WRONLY:以只写方式打开文件
O_RDWR:以读写方式打开文件
O_CREAT:如果该文件不存在,就创建一个新的文件,并用第三个参数为其设置权限
O_EXCL:如果使用O_CREAT 时文件存在,则可返回错误消息。这一参数可测试文件是否存在。此时open 是原子操作,防止多个进程同时创建同一个文件
O_NOCTTY:使用本参数时,若文件为终端,那么该终端不会成为调用open()的那个进程的控制终端
O_TRUNC:若文件已经存在,那么会删除文件中的全部原有数据,并且设置文件大小为0。
O_APPEND:以添加方式打开文件,在打开文件的同时,文件指针指向文件的末尾,即将写入的数据添加到文件的末尾
(5)参数3(perms)
被打开文件的存取权限,可以用一组宏定义:S_I(R/W/X)(USR/GRP/OTH)其中R/W/X 分别表示读/写/执行权限,USR/GRP/OTH 分别表示文件所有者/文件所属组/其他用户,例如,S_IRUSR | S_IWUSR 表示设置文件所有者的可读可写属性。八进制表示法中600 也表示同样的权限。
(6)函数返回值
成功:返回文件描述符
失败:-1
2、close()函数
(1)函数原型
int close(int fd)
(2)所需头文件
#include <unistd.h>
(3)参数1(fd)
open函数返回的文件描述符
(4)函数返回值
0:成功
-1:失败
3、read()函数
(1)函数原型
ssize_t read(int fd, void *buf, size_t count)
(2)所需头文件
#include <unistd.h>
(3)参数1(fd)
open函数返回的文件描述符
(4)参数2(buf)
数据缓冲区,用于存放读取到的数据
(5)参数3(count)
用于指定读取的数据字节数
(6)函数返回值
成功:读取到的字节数
失败:-1
4、write()函数
(1)函数原型
ssize_t write(int fd, void *buf, size_t count)
(2)所需头文件
#include <unistd.h>
(3)参数1(fd)
open函数返回的文件描述符
(4)参数2(buf)
要写入的数据
(5)参数3(count)
要写入的数据长度
(6)函数返回值
成功:写入的字节数
失败:-1
5、lseek()函数
(1)函数原型
off_t lseek(int fd, off_t offset, int whence)
(2)所需头文件
#include <unistd.h>
#include <sys/types.h>
(3)参数1(fd)
open函数返回的文件描述符
(4)参数2(offset)
offset:偏移量,读写操作所需要移动的距离,单位是字节,可正可负(向
前移,向后移)
(5)参数3(whence)
SEEK_SET:当前位置为文件的开头,新位置为偏移量的大小
SEEK_CUR:当前位置为文件指针的位置,新位置为当前位置加上偏移量
SEEK_END:当前位置为文件的结尾,新位置为文件的大小加上偏移量的大小
(6)函数返回值
成功:文件的当前位移
失败:-1
二、文件的基本操作
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
int main()
{
int fd = -1; //fd文件描述符
char Readbuf[20] = {0};
char writebuf[20] = "Hello Linux";
int ret = -1;
fd = open("test.txt", O_RDWR | O_CREAT);
if (-1 == fd)
{
printf("文件打开错误\r\n");
return 0;
}
// 写文件
ret = write(fd, writebuf, strlen(writebuf));
if (-1 == ret)
{
close(fd);
printf("写文件失败\r\n");
return 0;
}
// 文件的当前指针位置移动
ret = lseek(fd, 0, SEEK_SET); //移动到文件开头
if (-1 == ret)
{
close(fd);
printf("lseek失败\r\n");
return 0;
}
// 读文件
ret = read(fd, Readbuf, 11);
if (-1 == ret)
{
close(fd);
printf("读文件失败\r\n");
return 0;
}
//关闭文件
close(fd);
printf("生活点滴——Linux 文件I/O编程(1)-TD文件\r\n", Readbuf);
return 0;
}