Linux系统编程之 文件

现在学习嵌入式的第二阶段–Linux系统编程。对于系统编程还是有很多东西去做笔记,去记录下来。
一、文件编程(如何用代码操作文件,实现文件创建,打开,编辑等自动化执行)
Windows手动打开文件
打开/创建文档-----编辑文档-----保存文档-----关闭文档。
Linux也是一样的。

操作系统有提供很多API
Linux系统:
打开 open
读写 write/read
光标定位 lseek
关闭 close

打开/创建文件在这里插入图片描述
pathname :要打开的文件名(含路径,缺省为当前路径)
Flags:
O_RDONLY 只读打开 O_WRONLY 只写打开 O_RDWR可读可写打开

当我们附带了权限之后,打开文件就只能按照这种权限来操作。
以上这三个常数中应当只指定一个,下列常数是可选择的。
O_CREAT 若文件不存在则创建它,使用此选项时,需要同时说明第三个参数mode 用其说明该新文件的存取许可权限。
O_EXCL 如果同时指定了OCREAT 而文件已经存在,则出错,打开文件失败(返回值为-1)。
O_APPEND 每次写时都加到文件的尾端。
O_TRUNC 属性去打开文件时,如果这个文件中本来是有内容的,而且为只读或者只写成功打开,则将其长度截短为0;
Mode: 一定是在flags中使用了O_CREAT标志,mode记录创建的文件的访问权限。

1.打开文件:open返回值是int 类型,(文件描述符)打开文件成功返回 大于0的小的整数(不会是负数),如果打开失败就会返回一个负整数数。

int open(const char *pathname,int flags);

在这里插入图片描述
int fd; //定义一个int型来接收open的返回值。
fd = open("./文件名",O_RDWR); //现在这个是可读可写 也可以用O_RDONLY 是只读打开、 O_WRONLY 是只写打开。
如果 fd > 0 打开文件成功 如果 fd < 0 打开文件失败。

**2.打开/创建文件:**可能是没有这个文件名。我们可以如果打开不了文件可以创建文件。

int open(const char *pathname,int flags,mode_t mode);

//最后一个参数是权限来的 我们可以通过 ls -l 查看文件 -rwx , -(普通文件)、r(可读)、w(可写)、x(可执行)

在这里插入图片描述

如果没有该文件名就创建文件 r = 4 (可读),w = 2(可写) x = 1 (可执行)
fd = open("./文件名",o_RDWR|O_CREAT,0600);//0600 中的6 是4+2 (可读可写)

3.写入文件:
在这里插入图片描述
*fd:文件描述符(open返回的值) void buf :无类型的一个指针(要写进去的内容) size_t count :写进文件的大小。

在这里插入图片描述
首先我们是打开文件如果发现没有这个文件我们就创建文件,然后我们就对这文件写入"Welcome to C" 这句话。写完我们close(fd)就是关闭文件的意思
写进去:write(fd,p,sizeof§); //这样就写进去了 但是在Linux中 char* 指针是8个字节。所以这样放不下。我们应该把sizeof§ 改成 strlen§ 大小为p的长度的大小。

4.读取文件:
在这里插入图片描述

ssize_t read(int fd,void *buf,size_t count);

读取成功 返回是读取的字节数 读取失败 返回的是0 读取错误 返回-1
fd:文件描述符(open返回的值) void *buf :无类型的一个指针(要读取的内容) size_t count :读取文件内容的大小。
在这里插入图片描述
**注意:**当我们对文件打开之后并且写入内容,我们读取的时候应该先关闭文件 再重新打开文件读取文件。因为如果你不关闭文件,光标是在末端,是读取不到数据的。
readP我是给它写入了多大空间,就给它多大,防止空间不够。

5.文件“光标”位置:
在这里插入图片描述

off_t lseek(int fd,off_t offset,int whence);

将文件读写指针相对whence移动offset个字节

参数whence:
{
SEEK_SET光标移到文件头
SEEK_CUR光标移到文件尾
SEEK_END光标移到当前位置
}
off_t offset: 偏移量。
在这里插入图片描述我们之前打开文件并且写入内容,我们不用关闭再打开文件再读取,我们直接用lseek让光标移到头就可以了。
**如果是 off_t lseek(int fd,0,SEEK_SET);那么就是光标在文件头 偏移量为0 就不变。**整数往后,负数往前。

6.利用lseek 计算大小:
在这里插入图片描述
通过lseek的返回值来计算内容大小。

7.创建文件creat函数:
在这里插入图片描述

int creat(const char * filename,mode_t mode)

**filename:**要创建的文件名(包括路径、缺省为当前路径)
**mode:**创建模式 //可读可写可执行
宏定义 数字
S_IRUSR 4 可读
S_IWUSR 2 可写
S_IXUSR 1 可执行
S_IRWXU 7 可读、可写、可执行

这个跟open差不多的。

猜你喜欢

转载自blog.csdn.net/weixin_47457689/article/details/107502099
今日推荐