生活点滴——Linux 文件I/O编程(1)-TD文件

一、主要函数(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;
}

生活点滴——Linux 文件I/O编程(1)

推荐阅读