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

Linux系统编程(标准io)

标准io


linux中文件的类型 ,7 种

使用ll 命令 ,中第一列的字母 ,代表不同的文件类型 drwxrwxr-x 10 linux linux 4.0K Sep 6 2021 .vimplus/ lrwxrwxrwx 1 linux linux 27 Sep 5 2021 .vimrc -> /home/linux/.vimplus/.vimrc -rw-rw-r-- 1 linux linux 3.4K Sep 22 11:28 .vimrc.custom.config d 目录 使用cd进入 l 软链接文件 类型win 中的快捷方式 - 一般文件 电影,照片,1.c a.out ll /dev 设备目录 crw------- 1 root root 249, 0 Nov 27 17:06 rtc0 brw-rw---- 1 root disk 8, 0 Nov 27 17:06 sda c 字符设备 数量小,有顺序 绝大多少的设备都是这种 b 块设备 存储设备 , u盘,光盘,硬盘 。512字节,随机访问。 s 套接字文件 和网络相关的文件 p 管道文件 和进程相关 命令行参数 // ./a.out 1 2 3 4 5 6 //argc 命令行参数的个数 //argv 命令行参数的内容 int main(int argc, char *argv[]) { printf("argc is %d\n",argc); int i = 0 ;

系统编程,会学习到大量的函数(有linux系统提供函数)


man man ->所有man的帮助
man xxx == man 1 xxx =>查看当前xxx命令
man 2 xxx =>查看xxx对应的系统调用函数
man 3 xxx =》查看xxx对应的标准库函数

命令行参数

命令行参数 // ./a.out 1 2 3 4 5 6 //argc 命令行参数的个数 //argv 命令行参数的内容 int main(int argc, char *argv[]) { printf("argc is %d\n",argc); int i = 0 ; for(i = 0 ;i<argc;i++) { printf("%d %s\n",i,argv[i]); } return 0; }

文件操作;


1.打开文件 fopen

FILE *fopen(const char *pathname, const char *mode); pathname //,需要被操作的目录+文件名 mode //操作的模式 //返回值:返回一个FILE结构体 (系统定义的,包含文件相关的属性, pos对写位置) //一次写入一个字符 int fputc(int c, FILE *stream); //c 需要写入文件的字符 , stream //,需要写入数据的文件流指针
mode说明注意
r只读方式打开文件,起始位置在文件的开头目标文件必须存在
r+以读写方式打开文件,起始位置在文件的开头目标文件必须存在
w只写方式打开文件,起始位置在文件的开头会创建文件,并清空
文件
w+以读写方式打开文件,起始位置在文件的开头会创建文件,并清空
文件
a以追加写方式打开文件,起始位置在文件的最后会创建文件
a+以追加写,或读方式打开文件,起始位置在文件的写最后,
读在开头
会创建文件

2.读写文件

函数

说明注意
fgetc一个字符一个字符读取文件,到达结尾返回EOF文本文件/bin
fputc一个字符一个字符写入文件,写入EOF文本文件/bin
fgets一次读取一行.到达结尾返回NULL ,注意size的选择。文本文件
fputs一次写入一个字符串。文本文件
fread自定义大小读文件文本文件/bin
fwrite自定义大小写文件文本文件/bin
一次写入一个字符 int fputc(int c, FILE *stream); c 需要写入文件的字符 , stream ,需要写入数据的文件流指针 返回值 EOF 失败 成功返回写入的字符 一次读入一个字符 int fgetc(FILE *stream); stream ,需要读数据的文件流指针 返回值 EOF 失败或文件到达结尾 成功返回读到的字符 一次写入一个字符串 int fputs(const char *s, FILE *stream); s,表示需要写入文件的字符串 stream ,需要写入数据的文件流指针 返回,>0 表示成功。 EOF 失败 char *fgets(char *s, int size, FILE *stream); s,表示一个字符数组,需要开辟内存空间。 size ,表示本次最多读多少个字符。可以比内容的大 stream ,需要读数据的文件流指针 返回值: 成功返回指向s的指针 NULL 失败或文件到达结尾

3.关闭文件 fclose

int fclose(FILE *stream); stream ,需要操作的文件流指针。 因为fopen的时候,会向系统申请资源。fclose 是释放资源。

系统给a.out 打开的3个FILE * ,流指针

流指针说明使用
stdin(FILE*)标准输入,默认从键盘接收数据fgets(s,sizeof(s),stdin);
stdout (FILE*)标准输出,默认输出到屏幕puts(s,stdout);
stderr(FILE*)标准错误输出,默认输出到屏幕printf(stderr,"xxx error\n");

标准io 相关函数都是带有缓存区的,主要关注输出方向

行缓冲,1k, terminal,主要用于人机交互stdout 缓存区满或者遇到\n刷新 1024 行缓存多是关于终端的一些操作 1.遇到\n刷新 2.缓存区满刷新 3.程序结束刷新 4.fflush刷新 fflush(stdout); FILE*fp stdin stdout stderr 全缓冲,4k,主要用于文件的读写 缓存区满刷新缓存区 4096 对普通文件进行标准IO操作,建立 的缓存一般为全缓存 刷新条件: 1.缓存区满刷新 2.程序结束刷新 3.fflush来刷新 fflush(fp); 无缓冲,0k 主要用于出错处理信息的输出 stderr 不对数据缓存直接刷新。

标准IO之文件定位:

函数功能使用
fseek偏移读写指针fseek(fp,0,SEEK_SET);
ftell返回从文件到当前读写指针位置的偏移量 ,单iint offset = ftell(fp);
rewind偏移读写指针到文件的开头rewind(fp);
int fseek(FILE *stream, long offset, int whence); 功能:将stream流文件中的文件指针从whence位置开始 偏移offset字节的长度。 参数:stream 要移动文件指针的目标文件流对象。 注意:不支持设备文件,一般用于普通文件。 offset 要在文件内偏移的距离,单位字节。 如果值为整数,则向文件末尾偏移 如果值为负数,则向文件开头偏移 whence 偏移的起始位置,由系统定义的三个宏开始。 SEEK_SET 文件的开头位置 SEEK_CUR 文件的当前位置 SEEK_END 文件的末尾位置 返回值: 成功: 返回 0 失败: -1; long ftell(FILE *stream); 功能:获取当前文件流指针的具体位置,一般以文件 开头到当前指针的字节数为返回值。 参数:stream 要返回指针距离的文件流对象 返回值:成功 获取到的距离长度,单位是字节 失败 -1; void rewind(FILE* stream); 功能:复位文件流读写指针到开头 参数:stream 需要操作的文件流对象
http://www.cnnetsun.cn/news/70065.html

相关文章:

  • GG3M (鸽姆) Global Governance Meta-Mind Model: 商业计划书 Global Civilization Governance OS (Eastern Wisdom
  • Comsol微环谐振腔与环形波导耦和:对比波束包络与波动光学两个模块
  • 整体设计 之28 整体设计 架构表表述总表的 完整程序(之27 的Q268 )(codebuddy)
  • 云手机 实体手机的云端延伸
  • 交换机和网卡的 PFC 机制工作原理与实例解析
  • UI自动化测试常见面试题
  • Linux OOM 问题之 DMSERVER 受害者
  • Flutter引擎裁剪与鸿蒙方舟编译协同优化
  • STM32CubeMX的main.c开头介绍
  • 26.MPSOC FPGA linux读AHT20传感器
  • 嵌入式系统时序图完全指南:从原理到实战
  • 小团队与大团队的管理差异
  • [CISCN2019 华东南赛区]Web4
  • AI编程革命!Claude Skills大揭秘:小白也能快速上手的Agent开发神器,大模型开发者必看!
  • 内点法求最优潮流附matlab代码
  • 三相PWM整流器有限集模型预测电流控制附Simulink仿真模型
  • 光伏四可“可观”功能:光伏电站全景数字化的底层支撑技术
  • 如何用FLUX.1-dev镜像在本地部署下一代AI绘画模型?
  • 基于 Comsol 移动网格方法的激光熔池流动数值模拟
  • BLDC无刷直流电机Matlab仿真:转速电流双闭环控制及有感无感换相方式研究
  • [光学原理与应用-491]:水冷机、零气模块CDA、功率计等影响266皮秒紫外激光器的种子源1064nm功率稳定性结果的主要因素有哪些?
  • 昆仑通态MCGS与欧姆龙E5CC温控器通讯实战:PID模式及输出启停控制
  • 通达信〖逆势突破强牛〗指标公式 逆市环境中率先突破前期重要压力位 较强内在上涨动力
  • 基于扰动观测器的永磁同步电机(PMSM)模型预测控制(MPC)仿真探索
  • AEB联合仿真算法设计:Carsim2019.0+Matlab/Simulink2021a实现...
  • Java毕设选题推荐:基于springboot个人博客系统的设计与实现基于SpringBoot+Vue个人博客系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • Java毕设选题推荐:基于springboot停车场车位预约系统基于Java springboot停车场管理系统停车位预约【附源码、mysql、文档、调试+代码讲解+全bao等】
  • Java毕设选题推荐:基于springboot的无人化、线上化、数据化海洋馆预约系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • Ascend C高级API应用:InitGlobalMemory与Pad操作的底层原理
  • Java毕设选题推荐:基于Java Web的新能源汽车信息咨询服务基于SpringBoot+Vue的新能源汽车信息咨询服务的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】