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

Linux高级编程-文件操作

1.Linux下的文件类型

7种文件类型:

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

ls -l ---->ll

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

文件类型   文件操作权限        链接个数    用户名  组名    文件大小   文件最后被修改的时间 20240129/        文件名称
r:read
w:write
x:可执行权限
-:无权限

                  rwx:自己对文件的读写执行权限
rwx:同组用户对文件的读写执行权限
r-x:其他人对文件的读写执行权限

2.文件操作思想

    (1). 打开文件
(2). 读写文件
(3). 关闭文件

3.文件操作的方法

 Linux下的2种文件操作方法:
I : input   O: output  ----->文件
1. 标准IO:
C标准库提供的一套对文件操作的操作方法------->库函数
2. 文件IO:
Linux内核提供的一套对文件操作的操作方法------->系统调用

4. 标准IO

 (1)打开文件    

     fopen

 FILE *fopen(const char *pathname, const char *mode);
功能:打开一个文件并获得一个文件流指针
参数:
pathname:打开得文件的文件名地址
mode:打开的方式
"r"         以只读的方式打开
"r+"       以读写的方式打开
"w"       以只写的方式打开,文件存在则清空,文件不存在则创建
"w+"     以读写的方式打开,文件存在则清空,文件不存在则创建
"a"         以追加写的方式打开,文件不存在创建
"a+"       以读写的方式打开,文件不存在创建,,文件存在追加写

返回值:
成功:文件流指针:FILE *
失败:NULL


流:字节流
文件流:数据从文件流入流出体现出来的字节流
标准IO: FILE ---》文件流
FILE * ---》文件流指针----》已打开文件

 (2)读/写文件  

fgetc/fputc 、fgets/fputs、fread/fwrite

int fputc(int c, FILE *stream);
功能:向文件中写入一个字符
参数:
c:要写入的字符
stream:要写入的文件的文件流指针
返回值:
成功:写入的字符的ASCII值
失败:EOF (-1)

int fgetc(FILE *stream);
功能:从文件中读取一个字符
参数:
stream:要读取的文件的文件流指针
返回值:
成功:读到的字符的ASCII值
失败:EOF
读到文件末尾:EOF

int fputs(const char *s, FILE *stream);
功能:向文件中写入字符串(不会写入'\0'字符)
参数:
s:字符串首地址
stream:要写入的文件流指针

返回值:
成功:非负的整形数据
失败:EOF(-1)

char *fgets(char *s, int size, FILE *stream);
功能:   从文件中读取一行数据
参数:
s : 用来存放读取到数据的内存空间首地址
size:希望从文件中读到的字节数
stream:要读取的文件流指针
返回值:
成功:返回s空间的首地址
失败:NULL
读到文件末尾:NULL

 (3)关闭文件    

     fclose

 (4)man手册

        第一章节:Linux命令
第二章节:系统调用
第三章节:库函数


(5)主函数传参


./a.out aaa bbb   ----->实参
形参:主函数中的参数

argc : 程序运行时,给主函数传递的参数个数  3
argv : 指针数组:argc个指针,分别指向了给主函数传递的实参
argv[0] ---->"./a.out"
argv[1] ---->"aaa"
argc[2] ---->"bbb"

(6)- 普通文件

文本文件:   1.txt xxx.c  xxx.h                                          

20250809  --->'2''0''2''5''0''8''0''9'
二进制文件:xx.jpg    a.out   xxx.png   xxx.mp4                  

2025         ---->0000 0000 0000 0000 0000 0111 1110 1001

5.标准IO的函数接口

(1)fopen和fclose函数

#include <stdio.h>
#include <string.h>int main(int argc, char const *argv[])
{FILE *fp = fopen("./1.txt", "a+");if(NULL == fp){printf("open failed!\n");return -1;}printf("open successful!\n");fclose(fp);return 0;
}

(2)fputc函数和fgetc函数

#include <stdio.h>
#include <string.h>int main(int argc, char const *argv[])
{FILE *fp = fopen("./1.txt", "a+");if(NULL == fp){printf("open failed!\n");return -1;}printf("open successful!\n");char a[] = "Hello World";for(int i = 0;i < strlen(a);++i){fputc(a[i], fp);}fclose(fp);return 0;
}
#include <stdio.h>
#include <string.h>int main(int argc, char const *argv[])
{FILE *fp = fopen("./1.txt", "r");if(NULL == fp){printf("open failed!\n");return -1;}int ret;if(EOF == ret){printf("end of failed or error\n");}while((ret = fgetc(fp)) != EOF){ printf("%c ", ret);}puts("");fclose(fp);return 0;
}

(3)fputs函数和fgets函数

#include <stdio.h>int main(int argc, const char *argv[])
{FILE *fp = fopen("1.txt", "w");if (NULL == fp){printf("fopen error\n");return -1;}fputs("hello world", fp);char str[32] = {"how are you"};fputs(str, fp);char *pstr = "hello world";fputs(pstr, fp);fclose(fp);return 0;
}
#include <stdio.h>int main(int argc, const char *argv[])
{FILE *fp = fopen("1.txt", "r");if (NULL == fp){printf("fopen error\n");return -1;}char s[100] = {0};char *p = fgets(s, sizeof(s), fp);if (NULL == p){printf("error or end of file\n");}printf("s = %s\n", s);fclose(fp);return 0;
}

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

相关文章:

  • 人类语义认知统一模型:融合脑科学与AI的突破
  • 工业场景反光衣识别准确率↑32%:陌讯多模态融合算法实战解析
  • Leetcode——556. 下一个更大元素 III
  • 重读《人件》Peopleware -(23)Ⅲ 适当人选 Ⅵ 乐在其中(下)
  • QT第三讲- 机制、宏、类库模块
  • 从免费到盈利:Coze智能体1小时封装变现全流程指南——井云科技
  • Spring Boot 2 集成 Redis 集群详解
  • 全栈:JDBC驱动版本和SQLserver版本是否有关系?怎么选择JDBC的版本号?
  • Spring 的原理探究
  • Java 大视界 -- Java 大数据在智能医疗手术机器人操作数据记录与性能评估中的应用(390)
  • 【Bluedroid】A2DP Sink音频焦点管理机制解析(update_audio_focus_state)
  • 【RabbitMQ】高级特性—事务、消息分发详解
  • 【n8n】学习n8n【10】:Github的项目n8n-workflows:本地安装2,053 个 n8n 工作流程集合:随时看随时抄/学习~
  • 基于开源AI大模型、AI智能名片与S2B2C商城小程序的零售智能化升级路径研究
  • Python训练Day38
  • Nginx 反向代理与负载均衡架构
  • 基于开源AI大模型、AI智能名片与S2B2C商城小程序的学习型社群构建与运营模式创新研究
  • 深度学习中基于响应的模型知识蒸馏实现示例
  • 开发手札:UnrealEngine和Unity3d坐标系问题
  • K-means聚类学习:原理、实践与API解析
  • AI大语言模型在生活场景中的应用日益广泛,主要包括四大类需求:文本处理、信息获取、决策支持和创意生成。
  • 《Learning To Count Everything》论文阅读
  • 动态路由菜单:根据用户角色动态生成菜单栏的实践(包含子菜单)
  • 使用加密技术实现个人密码本保护
  • try/catch/throw 简明指南
  • orcad的操作(1)
  • 写 SPSS文件系统
  • Docker容器
  • 多级缓存详解
  • RAG-大模型课程《李宏毅 2025》作业1笔记