当前位置: 首页 > news >正文

Linux文件操作详解:一切皆文件

1. Linux 下的文件类型

Linux 中常见的 7 种文件类型

标识类型说明
b块设备文件存储类设备(硬盘等)
c字符设备文件输入/输出设备(鼠标、键盘、显示器等)
d目录文件文件夹
-普通文件.c.h.txt.jpg.mp4a.out
l软链接文件类似快捷方式
s套接字文件网络通信
p管道文件进程间通信

ls -l 输出解析

执行:

ls -l
# 或
ll

示例:

d  rwxrwxr-x   2  linux  linux  4096  1月 29  2024  20240129/

字段含义:

  1. 文件类型d 表示目录

  2. 文件权限

    • r:读权限(read)

    • w:写权限(write)

    • x:执行权限(execute)

    • -:无权限

  3. 链接个数

  4. 用户名(所有者)

  5. 组名(所属用户组)

  6. 文件大小(字节)

  7. 最后修改时间

  8. 文件名称

权限分三组:

第一组(rwx):文件所有者权限

第二组(rwx):同组用户权限

第三组(r-x):其他用户权限


2. 文件操作思想

文件操作的一般流程:

  1. 打开文件

  2. 读写文件

  3. 关闭文件


3. 文件操作方法

标准 IO

C 标准库 提供,基于 文件流(FILE*) 操作常用函数:fopen / fclose      fgetc / fputc       fgets / fputs    fread / fwrite


4. 标准 IO 函数详解

4.1 fopen —— 打开文件

FILE *fopen(const char *pathname, const char *mode);

功能:打开文件并返回文件流指针 

参数pathname:文件路径    

    mode:   "r" :只读,文件必须存在        "r+" :读写,文件必须存在

   "w" :只写,存在则清空,不存在则创建  "w+" :读写,存在则清空,不存在则创建

   "a" :追加写,不存在则创建                       "a+" :读写追加,不存在则创建

返回值:成功:FILE *  失败:NULL


4.2 fputc / fgetc —— 单字符写入与读取

int fputc(int c, FILE *stream);

功能:向文件写入一个字符

返回值:成功返回写入字符的 ASCII 值,失败返回 EOF

int fgetc(FILE *stream);

功能:从文件读取一个字符返回值:成功:读取的字符 ASCII 值失败或文件结束:EOF


4.3 fputs —— 写入字符串

int fputs(const char *s, FILE *stream);

功能:写入字符串(不写入 \0 结束符)

返回值:成功:非负整数       失败:EOF


4.4 fgets —— 读取一行

char *fgets(char *s, int size, FILE *stream);

功能:从文件读取一行数据 

返回值:成功:s 的首地址     失败或文件结束:NULL


 

5. 文件类型细分

文本文件:如 .c.txt(以字符存储,便于直接查看) 

二进制文件:如 .jpg.mp4a.out(存储为二进制数据)


6. 主函数参数

int main(int argc, const char *argv[])

argc:命令行参数个数

argv:指针数组,每个元素指向一个参数字符串                                                                                     argv[0]:程序名         argv[1]:第一个参数       argv[2]:第二个参数

示例:

./a.out aaa bbb
# argc = 3
# argv[0] = "./a.out"
# argv[1] = "aaa"
# argv[2] = "bbb"

 

7. 总结

标准 IO

使用 C 标准库函数    

常用函数:  fopen / fclose      fgetc / fputc      fgets / fputs

http://www.dtcms.com/a/323579.html

相关文章:

  • 编辑距离-二维动态规划
  • SkyWalking-3--Java Agent开发和集成示例
  • AI智能编程工具汇总
  • ComfyUI版本更新---解决ComfyUI的节点不兼容问题
  • MySQL 主备(Master-Slave)复制 的搭建
  • SOLIDWORKS 2025对工具栏等进行了重新布局和优化
  • GoEnhance AI-AI视频风格转换工具
  • gRPC 全面解析与实战 —— 从原理到同步/异步开发全攻略
  • Linux系统编程——进程地址空间
  • GM3568JHF:FPGA+ARM异构开发板环境搭建教程
  • 嵌入式学习day23-shell命令
  • Qdrant Filtering:must / should / must_not 全解析(含 Python 实操)
  • 【Python 高频 API 速学 ②】
  • 【线程池】压测确定线程池合适的参数
  • 【js】判断异步函数的返回值要加await
  • 使用LangGraph从零构建多智能体AI系统:实现智能协作的完整指南
  • 计算机系统设计中都有什么任务~计算密集~IO密集~逻辑密集等
  • 提示条贴合右侧边栏
  • java web项目入门了解
  • 天地图,cesium,leaflet
  • java练习题:数字位数
  • Windows下使用PyInstaller打包PyQt项目
  • 第15届蓝桥杯Scratch图形化省赛中级组2024年8月24日真题
  • 4深度学习Pytorch-神经网络--损失函数(sigmoid、Tanh、ReLU、LReLu、softmax)
  • Linux-JSON Schema
  • Java类和对象课上练习题目设计
  • LLM 的向量的方向表示语义,向量长度表示什么
  • Docker容器lnmp平台部署discuz论坛
  • 工具类-高效集合差异计算工具DiffWrapper
  • visual studio 无明显错误,但是无法编译成功解决—仙盟创梦IDE