IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> linux文件操作open、close、write、read、creat、lseek、以及fopen、fread、fwrite、fseek、fclose、fgetc、fputc、feof与之前有何区别 -> 正文阅读

[系统运维]linux文件操作open、close、write、read、creat、lseek、以及fopen、fread、fwrite、fseek、fclose、fgetc、fputc、feof与之前有何区别

前言

一、open与fopen、close与fclose使用区别

二、read与fread、write与fwrite使用区别

三、lseek与fseek使用

四、creat、fgetc、fputc、feof使用

前言

这是在学习Linux文件系统编程时记录的学习心得、

从来源的角度看,open等函数和fopen等函数有所不同:

  • open是LUNIX系统调用函数,返回文件描述符(File Descriptor),它是文件在文件描述符表里的索引。
  • fopen是ANSIC标准中的C语言库函数,在不同的系统中应该调用不同的内核api。返回的是一个指向文件结构的指针。

从移植角度:fopen是C标准函数,有良好的移植性;而open是LUNIX系统调用,移植性有限。如windows下相似的功能使用API函数`CreateFile`。

从适用范围:open返回文件描述符,LUNIX下的一切设备都是以文件的形式操作。如网络套接字、硬件设备等。当然包括操作普通正规文件(Regular File)。fopen是用来操纵普通正规文件(Regular File)

从缓冲角度:open无缓冲,fopen有缓冲。缓冲文件系统是借助文件结构体指针来对文件进行管理,通过文件指针来对文件进行访问。缓冲就是先对缓冲区操作,然后再对文件操作。比如执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满再写入文件。非缓冲文件系统依赖于操作系统,通过操作系统的功能对文件进行读写,是系统级的输入输出

一、open与fopen、close与fclose使用区别

open和close搭配使用,fopen和fclose搭配使用

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

?FILE *fopen(const char *path, const char *mode);

open函数返回文件描述符号,是文件的索引,fopen返回文件的指针,通过文件指针来访问

?int close(int fd);
?int fclose(FILE *fp);

二者使用方式大同小异


二、read与fread、write与fwrite使用区别

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

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

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

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

ptr就是缓冲区,fwrite从缓冲区数据写入文件,fread从文件读到缓冲区

read、write返回值是读写的字节大小,fread、fwrite返回值取决于第三个参数:读写次数

三、lseek与fseek使用

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

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

二者使用相同,int whence有三种位置:
?? ??? ?SEEK_SET光标指向头部,SEEK_CUR光标指向当前位置,SEEK_END光标指向尾部

????????offset相对于位置的偏移量,偏移量负数往前移,正数往后移
?? ??? ?lseek(fd,0,SEEK_END)利用它的返回值,计算文件大小

四、creat、fgetc、fputc、feof使用

?int creat(const char*pathname,mode_t mode)

? ? ? ? ? ? ? ? ? ? ? ? ? ? 绝对路径 ? ? ? ? 模式:宏表示 ? ? ? ?数字
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?S_IRUSR? ? ? ? ? 4 ? ? ? ? ? 可读
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?S_IWUSR? ? ? ? ?2 ? ? ? ? ? 可写 ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? S_IXUSR ? ? ? ? ?1? ? ? ? ? ?可执行?? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?S_IRWXU ? ? ? ? 7? ? ? ? ? ?可读、写、执行?

int fputc(int c, FILE *stream);

写入一个字符到fp文件流中,写多个字符可采用循环一个一个写

int fgetc(FILE *stream);

从文件中得到一个字符,可以循环一个一个得到字符,配合feof

?int feof(FILE *stream);

判断是否到达文件流末端,未到达末端返回值是0,到达末端返回值是非0

 do
   {
      c = fgetc(fp);
      if( feof(fp) )
      {
          break ;
      }
      printf("%c", c);
   }while(1);

参考文章:https://www.cnblogs.com/NickyYe/p/5497659.html

? ?


  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-01-29 23:28:17  更:2022-01-29 23:28:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 7:27:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码