博客
关于我
文件(三)
阅读量:290 次
发布时间:2019-03-01

本文共 2788 字,大约阅读时间需要 9 分钟。

open与fopen的区别及文件操作函数示例

open与fopen的区别

在计算机编程中,open和fopen是两种常用的文件操作函数,具有各自的特点和应用场景。本节将从来源、移植性、适用范围、文件IO层次以及缓冲机制等方面对它们进行比较分析。

1. 来源
  • open:这是UNIX系统调用函数,主要用于获取文件描述符。文件描述符是文件在文件描述符表中的索引,用于在后续操作中标识文件。
  • fopen:属于ANSIC标准的C语言库函数,用于打开文件并返回文件指针。在不同系统中,它调用不同的内核API,返回的是文件结构指针。
2. 移植性
  • open:作为UNIX系统调用,移植性较为有限,主要适用于UNIX/Linux系统。
  • fopen:作为ANSIC标准函数,具有良好的移植性,能够在不同系统中使用。
3. 适用范围
  • open:返回文件描述符,适用于所有类型的文件和设备(如网络套接字、硬件设备等)。
  • fopen:专门用于操作普通正规文件。
4. 文件IO层次
  • open:属于低级IO函数,直接与文件系统交互。
  • fopen:属于高级IO函数,通常在用户空间中操作文件。
5. 缓冲
  • open:没有缓冲机制,文件操作直接传递给底层IO层。
  • fopen:默认带有缓冲,提高了文件操作效率。

标准C库文件操作函数示例

1. 打开文件
FILE *fopen(const char *pathname, const char *mode);
  • 参数解释
    • pathname:文件路径。
    • mode:文件操作模式,如“r”读取,“w”写入,“w+”读写。
2. 写入文件
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
  • 参数解释
    • ptr:缓冲区指针。
    • size:数据块大小。
    • nmemb:数据块数量。
    • stream:文件指针。
3. 光标移动
int fseek(FILE *stream, long offset, int whence);
  • 参数解释:类似于lseek函数,用于将文件指针移动到指定位置。
4. 读取文件
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
  • 参数解释:与fwrite类似,用于从文件中读取数据。
5. 关闭文件
int fclose(FILE *stream);
  • 参数解释:关闭指定的文件。

结合示例代码

以下示例展示了如何使用上述函数进行文件操作:

#include 
#include
int main() { FILE *fp; char *str = "luoxianyi hen shuai"; char readBuf[128] = {0}; // 打开文件(读写模式) fp = fopen("./file2", "w+"); // 写入文件 size_t nwrite = fwrite(str, sizeof(char), strlen(str), fp); // 移动文件指针至开头 fseek(fp, 0, SEEK_SET); // 读取文件内容 size_t nread = fread(readBuf, sizeof(char), strlen(str), fp); printf("读的内容是:%s\n", readBuf); printf("read = %d, write = %d\n", nread, nwrite); // 关闭文件 fclose(fp); return 0;}

结果展示

运行上述代码后,输出结果如下:

读的内容是:luoxianyi hen shuairead = 128, write = 128

结合结构体写入文件

以下示例展示了如何将结构体写入文件:

#include 
#include
struct test { int a; char c;};int main() { FILE *fp; struct test data = {100, 'a'}; struct test data2; // 打开文件(读写模式) fp = fopen("./file2", "w+"); // 写入结构体数据 int nwrite = fwrite(&data, sizeof(struct test), 1, fp); // 移动文件指针至开头 fseek(fp, 0, SEEK_SET); // 读取结构体数据 int nread = fread(&data2, sizeof(struct test), 1, fp); printf("读的内容是:%d, %c\n", data2.a, data2.c); printf("read = %d, write = %d\n", nread, nwrite); fclose(fp); return 0;}

结果展示

运行上述代码后,输出结果如下:

读的内容是:100, aread = 8, write = 8

使用fgetc、fputc和feof

写入单个字符
#include 
#include
int main() { FILE *fp; fp = fopen("./file3", "w+"); // 写入一个字符 fputc('a', fp); fclose(fp); return 0;}
读取字符并判断文件尾
#include 
#include
int main() { FILE *fp; char c; fp = fopen("./file4", "r"); while (!feof(fp)) { c = fgetc(fp); printf("%c", c); } fclose(fp); return 0;}

结果展示

运行上述代码后,输出结果如下:

a读的内容是:a

文件总结

在Linux系统中,所有资源都以文件形式存在,包括文件、目录、硬件设备、网络套接字、数据库等。通过合理使用文件操作函数,我们可以高效地进行文件读写、结构体存储和数据处理等操作。

转载地址:http://fzmx.baihongyu.com/

你可能感兴趣的文章
NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
NIFI同步MySql数据源数据_到原始库hbase_同时对数据进行实时分析处理_同步到清洗库_实际操作06---大数据之Nifi工作笔记0046
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_处理器介绍_处理过程说明---大数据之Nifi工作笔记0019
查看>>
NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_实际操作---大数据之Nifi工作笔记0020
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_实际操作_02---大数据之Nifi工作笔记0032
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
查看>>
NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
查看>>
NIFI大数据进阶_NIFI监控功能实际操作_Summary查看系统和处理器运行情况_viewDataProvenance查看_---大数据之Nifi工作笔记0026
查看>>
NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
查看>>
NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
查看>>
NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
查看>>
NIFI大数据进阶_使用NIFI表达式语言_来获取自定义属性中的数据_NIFI表达式使用体验---大数据之Nifi工作笔记0024
查看>>
NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
查看>>
NIFI大数据进阶_内嵌ZK模式集群2_实际操作搭建NIFI内嵌模式集群---大数据之Nifi工作笔记0016
查看>>
NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
查看>>