Linux文件编程

发布时间:2023年12月25日

目录

1、Linux系统提供的文件编程API

1.1打开文件:open

1.2创建文件creat函数

1.3写入文件write函数

1.4读取文件read函数

1.5文件光标位置lseek函数

2、另外一组文件编程API

?2.1文件打开函数fopen

2.2读文件函数fread

2.3写文件函数fwrite

2.4文件光标位置函数fseek?

2.4文件关闭函数fclose

?2.5fgetc函数

1、Linux系统提供的文件编程API

打开? ? ? ? open

读写? ? ? ? write/read

光标定位? ? ? ? lseek

关闭? ? ? ? close??

1.1打开文件:open

函数原型:

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

参数一:pathname 要打开的文件名(含路径,缺省为当前路径)

参数二:flags 文件的打开方式,有以下选项

O_RDONLY 只读打开? ? ? ? O_WRONLY 只写打开? ? ? ? O_RDWR 可读可写打开

当我们附带了访问权限后,打开的文件就只能按照这种权限来操作

以上三个常数中应当只选定一个。下列常数是可以选择的(可一个可多个也可以不选择,用|隔开)

O_CREAT? 若文件不存在则创建它。使用此选项时,需要同时说明第三个参数mode,用其说明该新文件的权限

O_EXCL? 如果同时指定了O_CREAT,而文件已经存在,则函数值返回-1(可以和O_CREAT配合使用,用来判断文件是否存在)

O_APPEND? 每次写时都加到文件的尾端

O_TRUNC? 属性去打开文件时,如果这个文件中本来是有内容的,而且为只读或者只写成功打开,则长度截短为0(就是把里面的内容都删掉)

参数三:一定是在flags中使用了O_CREA标志,mode记录待创建的文件的访问权限

返回值:返回新的文件描述符(非负整数),如果发生错误则返回-1

1.2创建文件creat函数

1.3写入文件write函数

函数原型:

ssize_t write(int fd, const void *buf, size_t count);
参数一:文件描述符,由open或者creat函数返回

参数二:需要写入的数据指针

参数三:写入数据的长度

返回值:成功写入的字节数,如果出错则返回-1

1.4读取文件read函数

函数原型:

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

参数一:文件描述符,由open或者creat函数返回

参数二:读取到的数据存放的位置

参数三:读取数据的长度,指针偏移量,从光标的位置开始读buf个字节的数据

返回值:如果成功则返回读取到的字节数,返回0则表示光标位置在文件的尾,发生错误则返回-1

1.5文件光标位置lseek函数

函数原型:

off_t lseek(int fd, off_t offset, int whence);
参数一:文件描述符,由open或者creat函数返回

参数二:偏移量,正数向后偏移,负数向前偏移

参数三:偏移方式

SEEK_SET:光标位置为文件头,偏移量为参数二设置的偏移量

SEEK_CUR:偏移量为光标位置加上参数二设置的偏移量

SEEK_END:光标位置为文件尾,偏移量为文件大小加偏移量字节

返回值:返回光标偏移之后的位置,从文件头开始计算。如果发生错误则返回-1

1.6文件关闭close函数

函数原型:

int close(int fd);

参数一:文件描述符,由open或者creat函数返回

返回值:成功返回0,失败返回-1

标准输入0:读取键盘的输入:read

标准输出1:写到屏幕:write

标准错误输出0

在Linux文件可分为动态文件与静态文件,动态文件是我们打开的文件在缓冲区里面的文件,而静态文件存放在外存当中。调用close时就会将动态文件中的内容保存到磁盘的静态文件中。?

2、另外一组文件编程API

fopen、fread、fwrite、fseek、fclose、fgetc、fputc、feof

作用与上面的都差不多

?2.1文件打开函数fopen

fopen函数原型

FILE *fopen(const char *filename, const char *mode)

参数一:filename?-- 字符串,表示要打开的文件名称。

参数二:mode?-- 字符串,表示文件的访问模式

返回值:该函数返回一个 FILE 指针。否则返回 NULL,且设置全局变量 errno 来标识错误

2.2读文件函数fread

fread函数原型

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

参数一:ptr?-- 这是指向带有最小尺寸?size*nmemb?字节的内存块的指针。读取文件的存放位置

参数二:size?-- 这是要读取的每个元素的大小,以字节为单位。

参数三:nmemb?-- 这是元素的个数,每个元素的大小为 size 字节。

参数四:stream?-- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。

返回值:成功读取的元素总数会以 size_t 对象返回,size_t 对象是一个整型数据类型。如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。

2.3写文件函数fwrite

fwrite函数原型

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)

参数一:ptr?-- 这是指向要被写入的元素数组的指针。

参数二:size?-- 这是要被写入的每个元素的大小,以字节为单位。

参数三:nmemb?-- 这是元素的个数,每个元素的大小为 size 字节。

参数四:stream?-- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流

返回值:如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。

2.4文件光标位置函数fseek?

fseek函数原型

int fseek(FILE *stream, long int offset, int whence)

参数一:stream?-- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。

参数二:offset?-- 这是相对 whence 的偏移量,以字节为单位。

参数三:whence?-- 这是表示开始添加偏移 offset 的位置,其参数与lseek函数的whence一样

返回值:如果成功,则该函数返回零,否则返回非零值。

2.4文件关闭函数fclose

fclose函数原型

int fclose(FILE *stream)

stream?-- 这是指向 FILE 对象的指针,该 FILE 对象指定了要被关闭的流。

返回值:如果流成功关闭,则该方法返回零。如果失败,则返回 EOF

?2.5fgetc函数

作用:从指定的流 stream 获取一个字符(一个无符号字符),并把位置标识符往前移动

函数原型:

int fgetc(FILE *stream)

参数一:tream?-- 这是指向 FILE 对象的指针,该 FILE 对象标识了要在上面执行操作的流

返回值:该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或

发生读错误,则返回 EOF。

3、fopen与open的区别

fopen与open的区别

fopen

  • 语言: fopen 是标准C库中的函数,用于在C语言中打开文件。
  • 用途: fopen 主要用于打开文件以供读取或写入。它返回一个指向 FILE 结构的指针,该结构包含有关文件的信息。

open

  • 语言: open 是Unix/Linux系统中的系统调用,用于在低级别(更接近硬件)上打开或创建文件。
  • 用途: open 可以用于在文件系统中打开或创建文件,并返回文件描述符(file descriptor),而不是 FILE 结构。

?总体而言,fopen 更加抽象和易用,适用于C语言中的文件操作;而 open 更底层,直接与文件描述符交互,适用于Unix/Linux系统编程。在一般情况下,如果你在C语言中进行文件操作,推荐使用 fopen。如果你在进行系统级别的编程,可能会使用 open 以及其他底层的系统调用。

文章来源:https://blog.csdn.net/weixin_58198422/article/details/135058231
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。