代码介绍:
功能:写入一定数据,然后在读取这些数据。其中涉及到文件指针的问题,中间也涉及到关不关闭文件描述符。下面会解释。
/*********************************************************************
* 版权所有: Copyright (c) 2023-2024 XXX Company. All rights reserved.
* 系统名称:
* 文件名称: main.c
* 内容摘要: open write lseek read close函数的应用
* 当前版本:
* 作 者: WLC
* 设计日期: 2023-01-21 15:58
* 修改记录:
* 日 期 版 本 修改人 修改摘要
**********************************************************************/
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
#include<unistd.h>
int main(int argc, char *argv[])
{
int fd, num;
fd = open("a.txt", O_RDWR|O_CREAT|O_TRUNC, 0777);
printf("fd=%d\n", fd);
printf("hello world!!!\n");
num = write(fd, "this is demo!", strlen("this is demo!"));
if(num>0)
{
printf("data is save!\n");
}else
{
printf("data save failed!");
}
printf("num=%d\n", num);
lseek(fd, -num, SEEK_CUR);
int len;
char str[50]="";
len = read(fd, str, num);
printf("len=%d\n", len);
if(len>0)
{
printf("txt content:%s\n", str);
}else if(len<0)
{
printf("content read failed!");
}else
{
printf("read over!\n");
}
close(fd);
return 1;
}
代码解释:
open函数:
fd = open("a.txt", O_RDWR|O_CREAT|O_TRUNC, 0777);
open函数是文件打开函数。
O_RDWR:读,写打开。
O_CREAT:若文件不存在,则创建它,需要使用mode选项。来指明新文件的访问权限,也就是后面这个0777。
O_TRUNC:若文件存在则覆盖
其他的选项可以查看其他人写的文章,在此就不一一描述了。
这句话就是打开a.txt文件(可以进行读操作,也可以进行写操作,若文件存在则把里面的内容清空,若不存在该文件,则创建一个名为a.txt的文件),用fd来接收open的返回值,他是文件描述符用来进行文件操作的,权限设为0777。
write函数:
num = write(fd, "this is demo!", strlen("this is demo!"));
write函数是写入函数,把 this is demo! 这几个单词包括!号一起写入这个fd的句柄里面,而这个句柄你可以理解为就是a.txt这个文件,也就是把这些内容写入a.txt文件里面。然后第三个参数是你写入内容的长度。返回值num就是你实际写入的字节数。
lseek函数:
lseek(fd, -num, SEEK_CUR);
这个函数是操作文件指针的函数,lseek(fd, -num, SEEK_CUR);这一行的意思就是把文件指针从当前位置向前移动num的单位。在这里“-”代表向前移动,“+”代表向后移动。所以此时文件指针就又到了开头,文件的读写都是基于文件指针此时的位置的,打开文件后文件指针就是在文件最开头,写入完数据后文件指针就是在数据最后面,此时要进行文件读操作就需要把文件指针移到开头。
read函数:
len = read(fd, str, num);
这个函数是进行文件读取的函数。他会从fd中读取num字节的数据并把数据保存到str这个数组里面。返回值len是具体读取到的字节数。
close函数:
close(fd);
关闭fd文件描述符。在进行完操作之后一定要记得及时关闭文件描述符,要不然会出错。