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.pswp.cn/web/92596.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92596.shtml
英文地址,请注明出处:http://en.pswp.cn/web/92596.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web:vue中import *** from 和import {***} from的区别

在Vue.js中,import语句用于导入模块、组件或变量等。使用带花括号{}和不带花括号的区别主要在于导入的内容是具名导出(named exports)还是默认导出(default export)。 默认导入 (Default Import) - 不带花括号 import Vue from vue; import MyComponent from ./MyCompone…

Mysql如何优化my.conf配置文件?

优化 MySQL 的 my.cnf 配置文件&#xff0c;可以显著提升数据库性能&#xff0c;特别是在高并发或大数据量场景下。以下是优化 my.cnf 的方法和建议&#xff0c;涵盖 常见配置项、参数说明 和 优化技巧。1. 优化前的准备工作在修改 my.cnf 之前&#xff0c;需了解以下内容&…

Cherryusb UAC例程对接STM32内置ADC和DAC播放音乐和录音(上)=>TIM+DAC+ADC+DMA正弦波回环测试

0. 概述 文本目标基于Cherryusb官方例程audio_v1_mic_speaker_multichan_template.c&#xff0c;底层对接STM32的内置ADC和DAC&#xff0c;实现录音和播放。通过电脑播放歌曲&#xff0c;板子发出声音。通过电脑录音机开启录音&#xff0c;板子作为麦克风采集声音&#xff0c;…

数模个人笔记

写在前面&#xff1a;不建议观看&#xff0c;会烂尾的1.马氏链&#xff1a;状态空间指的是随机变量的取值范围&#xff0c;xi称为一个状态&#xff0c;应用背景在现在的条件下下一状态发生的概率&#xff0c;比如退火&#xff0c;他的条件概率可化简为&#xff1a;且nm时刻的概…

Spring Boot自定义Starter:从原理到实战全解析

1. 背景与需求1.1 什么是Starter&#xff1f; Spring Boot的起步依赖&#xff08;Starter&#xff09;是一种特殊的依赖描述符&#xff0c;用于简化Spring应用的依赖管理和自动配置。官方文档将Starter定义为“一组方便的依赖描述符”&#xff0c;开发者只需引入对应的Starter&…

安宝特方案丨工业AR+AI质检方案:致力于提升检测精度与流程效率

据IDC预测&#xff0c;2025年中国工业AI质检市场规模将达62亿元&#xff0c;年复合增长率28.5%&#xff0c;新能源、消费电子、高端装备三大领域贡献超70%市场份额。这一数据印证了AI质检已从可选技术升级为制造业降本增效的生存刚需。当前制造业质检环节正面临&#xff1a;精度…

AudioLLM

参考链接&#xff1a;https://mp.weixin.qq.com/s/cscrUn7n_o6PdeQRzWpx8g 视频教程&#xff1a;https://www.bilibili.com/video/BV1LGbozkEDY 模型代码&#xff1a;https://github.com/boson-ai/higgs-audio 如果是两个模型加在一起&#xff1a;一个语言模型&#xff0c;一个…

基于 CEP 引擎的算法拆单与调度实践—基础篇

在金融市场中&#xff0c;大额订单的一次性交易可能会对市场价格产生较大冲击&#xff0c;导致交易成本增加。例如&#xff0c;大额买入订单可能会迅速推高股价&#xff0c;使后续买入成本上升&#xff1b;大额卖出订单则可能打压股价&#xff0c;造成资产贱卖。拆单算法通过将…

开源 C# TCP 通信框架 SocketDJ 发布:轻量、免费、可扩展

前言市面上的网络通信框架琳琅满目&#xff0c;功能强大者有之&#xff0c;但不少都存在功能闭源、商业收费、学习成本高等问题。作为一名热爱底层技术的开发者&#xff0c;我始终相信&#xff1a;基础通信能力应当简单、透明且免费。最近正好有项目需求&#xff0c;索性动手从…

移动机器人路径规划中ROS2中间件性能的研究综述

导读&#xff1a; 随着移动机器人在工业自动化、特种作业及智能服务领域的广泛应用&#xff0c;其路径规划能力越来越依赖机器人操作系统ROS2的通信性能。ROS2通过去中心化架构与数据分发服务中间件显著提升了系统可靠性&#xff0c;但动态复杂环境中路径规划对通信延迟、带宽…

【昇腾】Atlas 500 A2 智能小站制卡从M.2 SATA盘启动Ubuntu22.04系统,重新上电卡死没进系统问题处理_20250808

一、问题背景 Atlas 500 A2智能小站是华为基于20T 12G版本的Atlas 200I A2加速模块开发的面向广泛边缘应用场景的轻量边缘设备&#xff0c;具有超强计算性能、配置灵活、体积小、支持温度范围宽、环境适应性强、易于维护 管理等特点的产品。Atlas 500 A2智能小站主要应用在智能…

sigaction 中 sa_handler = SIG_IGN 的深度解析与应用实践

sigaction 中 sa_handler SIG_IGN 的深度解析与应用实践 核心意义&#xff1a;主动忽略信号 当 sa_handler 设置为 SIG_IGN 时&#xff0c;内核将完全丢弃指定的信号&#xff0c;不会&#xff1a; 执行默认行为调用任何处理函数中断进程的正常执行 这与 SIG_DFL&#xff08;默…

【LLM实战|langchain、qwen_agent】RAG高级

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?type=blog 0. 前言 RAG高级 1. RAG 高效召回方法 合理设置TOP-K 改进索引算法 -知识图谱 引入重排序 重排序模型 BGE-Rerank Cohere Rerank 混合检索 向量索引+关键词索引…

C++方向知识汇总(一)

关于单例模式1.什么是单例模式&#xff1f;答&#xff1a;单例模式是一种创建型设计模式&#xff0c;确保一个类在运行期间仅有一个实例&#xff0c;提供全局唯一的访问点2.单例模式的目的&#xff1f;答&#xff1a;避免重复创建资源消耗大的对象&#xff0c;例如日志系统、线…

学习:JS[8]本地存储+正则表达式

一.本地存储1.介绍将数据存储到用户浏览器当中设置、读取方便、页面刷新不丢失数据2.本地存储分类-localStoragea.语法(1)存储数据//存储数据 localStorage.setItem(键,值)如 localStorage.setItem(uname,哈哈)(2)获取数据//获取方式 都加引号 localStorage.getItem(键) localS…

C++算法练习:单词识别

做题记录&#xff1a;牛客习题&#xff1a;单词识别 相关题目代码已经提交到gitee中&#xff1a;楼田莉子 (riko-lou-tian) - Gitee.com喜欢请点个赞谢谢 目录 题目&#xff1a; C 字符函数头文件头文件&#xff1a;&#xff08;C 标准库&#xff09;核心函数功能说明&#…

从免费到盈利:Coze智能体1小时封装变现全流程指南——井云科技

在AI技术普惠的浪潮下&#xff0c;Coze等智能体平台让零代码开发者也能快速构建功能强大的AI助手。然而&#xff0c;许多创作者在完成智能体开发后&#xff0c;却面临“工具免费、成本自担”的困境——用户无限制调用导致算力成本飙升&#xff0c;想收费又缺乏成熟的支付与用户…

C++学习之STL学习:map/set

通过前面的学习&#xff0c;我们已经对C STL有了初步了解。然而&#xff0c;STL作为一个庞大复杂的体系&#xff0c;远不止这些内容。接下来&#xff0c;我们将深入探讨STL中的另外两个重要组件——map和set。 作者的个人gitee&#xff1a;楼田莉子 (riko-lou-tian) - Gitee.co…

[学习] CORDIC算法详解:从数学原理到反正切计算实战

CORDIC算法详解&#xff1a;从数学原理到反正切计算实战 文章目录CORDIC算法详解&#xff1a;从数学原理到反正切计算实战引言一、数学原理二、求解流程&#xff08;旋转模式&#xff09;三、典型应用场景四、反正切计算示例&#xff08;Python实现&#xff09;五、算法流程可视…

3款强力的Windows系统软件卸载工具

1、Geek 下载地址&#xff1a;https://download.csdn.net/download/weixin_42203093/91625765 Geek Uninstaller 是一款专业的 Windows 软件卸载工具&#xff0c;主要用于卸载软件并清理残留垃圾&#xff1a; 特点 体积小巧便携&#xff1a;软件体积约为 1.7M&#xff0c;是单…