1.写读文件,并打印到控制台。
2.写完文件后,文件指针在末尾,通过lseek函数,将文件指针移动到文件开头。
3.定义buffer缓冲区数组,通过memset函数清空缓冲区。
4.然后,通过read函数将从头开始把文件读到buffer数组中。
5.打印buffer数组中的内容。
/*
*功能:写、读文件,并打印文件内容
*/
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
int main(void)
{
int fd;//用来存放文件描述符
int retval;//用来存放close函数的返回值
ssize_t rd_size;//用来存放read函数的返回值
//fd默认从3开始因为前面的0被标准输入,1被标准输出,2被标准出错所占用
fd = open("a.txt", O_RDWR|O_CREAT, 0666);//打开a.txt文件,如果文件不存在则创建,读写方式打开,权限为666,0666表示文件所有者拥有读写权限,组用户拥有读写权限,其他用户拥有读权限
if(fd == -1)
{
perror("打开文件失败");
return -1;
}
write(fd, "hello", 5);//写入hello字符串,第一个参数是文件描述符,第二个参数是写入的字符串,第三个参数是写入的字节数,返回实际写入的字节数
//lseek第三个函数参数表示移动方式,SEEK_SET表示从文件开头移动,SEEK_CUR表示从当前位置移动,SEEK_END表示移动到文件末尾,返回值是新的文件指针位置
lseek(fd, 0, SEEK_SET);//移动文件指针到开头,第一个参数是文件描述符,第二个参数是偏移量,第三个参数是移动方式,SEEK_END表示移动到文件末尾
char buffer[1024];//用来存放读取到的字符串
memset(buffer, 0, sizeof(buffer));//清空缓冲区
rd_size = read(fd, buffer, 100);//读取文件,第一个参数是文件描述符,第二个参数是存放读取到的字符串的缓冲区,第三个参数是读取的字节数,返回实际读取的字节数
if(rd_size == -1)
{
perror("读取失败");
goto opt_file_err;//如果读取失败,则跳转到opt_file_err标签处,关闭文件并返回-1
}
printf("buffer=%s\n", buffer);//打印读取到的字符串
retval = close(fd);//关闭文件描述符
if(retval == -1)
{
perror("关闭文件失败");
return -1;
}
return 0;
opt_file_err:
close(fd);
return -1;
}