[ Skill ] 文件读写 & IO 句柄

在 Skill 中使用一种叫做 ioport 类型的变量来操作文件。不过我一般更习惯称为 IO 句柄 (IO/File Handle)

常用下面两个函数来获得这些 IO 句柄:

  • infile
    获得输入句柄, 文件。
  • outfile
    获得输出句柄, 文件。

假设现有一个文件 file.txt

$ cat -n file.txt
     1  2022-02-20
     2  20:39:29
     3  Sunday

获取一个输入句柄,打开这个文件。

inHandle = infile( "file.txt" )

gets 可以将按 迭代文件内容(一行一行读取),全部内容读取完会返回 nil

gets( string inHandle )

上面这个操作将第一行的内容赋值给了 string 变量。

printf( "%s\n" string )
; 2022-02-20
printf( "%s\n" gets( nil inHandle ))
; 20:39:29

getc 可以将按 单个字符 迭代文件内容(一个字一个字读取),全部内容读取完会返回 nil
gets 有点不同, getc 返回 symbol 类型,且第一个变量为句柄。

printf( "%s\n" getc( inHandle ))
; S

读取完剩下内容,并打印出来。

while( char = getc( inHandle )
  printf( "%s\n" char )
)
; u
; n
; d
; a
; y

读取结束后记得关闭这个句柄。

close( inHandle )

获取一个输出句柄,打开一个文件,打开方式如果没有指定则默认为 w,这会覆盖原有内容。

outHandle = outfile( "file.txt" )

fprintf 将字符串输出到 IO 句柄,下面写点东西进去。

fprintf( outHandle "%s\n" "2022-02-20")
close( outHandle )
$ cat -n file.txt
     1  2022-02-20

上面提到 outfile 的默认打开方式 w 会覆盖源文件内容,当我们需要在源文件基础上追加内容时,可以在第二个参数指定 a ,代表 append 方式。

outHandle = outfile( "file.txt" "a" )
fprintf( outHandle "%s\n" "21:06:13")
close( outHandle )
$ cat -n file.txt
     1  2022-02-20
     2  21:06:13

上面的例子中已经出现过了,功能很简单,IO 句柄用完后关掉它,解除与文件的关联,释放资源(文件句柄资源是有限的)。

close( inHandle )
close( outHandle )

预设句柄

预设的几个句柄变量。

  • piport

标准输入句柄,类似于 C 中的 stdin。

可以配合函数 get_filename 来获取当前文件的文件名(路径):

$ cat -n piport.il
     1  printf( "The value is %s\n" get_filename( piport ))
load( "piport.il" )
The value is piport.il
  • stdin

这个变量在 help 文档中描述是和 piport 类似的,但两者又不相等。

stdin == piport
; nil

也无法配合 get_filename 函数:

$ cat -n stdin.il
     1  printf( "The value is %s\n" get_filename( stdin ))
load( "stdin.il" )
The value is *stdin*

也不像 Perl 中的 <stdin></stdin> 能获取终端上的用户输入,我暂时没找到应用场景。

  • poport

标准输出句柄,类似于 C 中的 stdout。

printf( "%s\n" getCurrentTime())
; Feb 21 21:19:42 2022

也可以写成 fprintf

fprintf( poport "%s\n" getCurrentTime())
; Feb 21 21:20:47 2022

效果是一样的。

  • ptport

跟 poport 一样的。

ptport == poport
; t
  • stdout

跟 poport 一样的。

stdout == poport
; t
  • errport

错误输出句柄,类似于 C 中的 stderr,用于打印错误信息,在 CIW 上会显示红色的字体。

fprintf( poport "Normal information ~\n" )

Normal information ~

fprintf( errport "Error information !\n" )

Error information !

  • stderr

跟 errport 一样的。

stderr == errport
; t
  • woport

警告输出句柄,也类似于 C 中的 stdout,用于打印警告信息,在 CIW 上会显示黄色的字体。

fprintf( woport "Warning information !\n" )

Warning information !

刷新缓冲区

刷新输出缓冲区

drain( poport )

更多时候是想刷新 CIW 中的输出信息,所以我一般用这个

hiFlushCIW()

Original: https://www.cnblogs.com/yeungchie/p/15902303.html
Author: YEUNGCHIE
Title: [ Skill ] 文件读写 & IO 句柄

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/583022/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • [编程一生]历史文章分类汇总

    2021年过去了,总结一下我的239篇原创。方便大家利用自带的搜索功能当智能机器人来用。 面试类 方法论 架构类 网络通信与 操作系统原理 稳定性建设 Java 中间件 程序人生 …

    Linux 2023年6月13日
    085
  • Wireshark 使用教程

    Wireshark是非常流行的网络封包分析软件,可以截取各种网络数据包,并显示数据包详细信息。常用于开发测试过程各种问题定位。本文主要内容包括: 1、Wireshark软件下载和安…

    Linux 2023年6月8日
    076
  • 一维热传导方程的回焊炉子炉温模型

    赛题链接 论文链接 1. 有限差分方法 参考 1.1 一阶微分 由泰勒公式: 对上式变形即可以得到 一阶微分的向前差分公式: 将上式中的h用-h替代,则可以得到 一阶微分的向后差分…

    Linux 2023年6月14日
    094
  • [Git系列] 前言

    Git 简介 Git 是一个重视速度的分布式版本控制和代码管理系统,最初是由 Linus Torvalds 为开发 Linux 内核而设计并开发的,是一款遵循二代 GUN 协议的免…

    Linux 2023年6月14日
    098
  • ES6

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &lt…

    Linux 2023年6月13日
    083
  • 用 shell 脚本制造连接频繁中断的场景

    问题的提出 最近在准备客户端的新版本,在内部灰度过程中,发现一类奇怪的 dump,通过查看日志和堆栈,可以确定是因为每次连上后台就被后台断开了、导致多次重连后随机发生的崩溃。dum…

    Linux 2023年6月6日
    083
  • Docker下部署LNMP黄金架构

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    091
  • nginx 修改文件上传大小限制

    修改nginx的配置文件,添加client_max_body_size 字段 注:client_max_body_size必须要放在server下的server_name下,而不是…

    Linux 2023年6月8日
    090
  • stat命令的实现

    任务详情 学习使用stat(1),并用C语言实现 提交学习stat(1)的截图 man -k ,grep -r的使用 伪代码 产品代码 mystate.c,提交码云链接 测试代码,…

    Linux 2023年5月27日
    083
  • python练习题:利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的strip()方法

    方法一: 方法二: (此方法会有一个问题,当字符串仅仅是一个空格时’ ‘,会返回return s[1:0];虽然不会报错,但是会比较奇怪。测试了下,当s=&…

    Linux 2023年6月8日
    099
  • bochs(2.6.11)配置安装

    下载:https://bochs.sourceforge.io/ 建议下载2.6.11,下文一开始安装的2.7,但运行时有无法解决的错误。但是大致安装过程一致。 linux 提前安…

    Linux 2023年5月27日
    0125
  • Redis 经验谈

    新浪作为全世界最大的Redis用户,在开发和运维方面有非常多的经验。本文作者来自新浪,希望能为业界提供一些亲身经历,让大家少走弯路。 使用初衷 从2010年上半年起,我们就开始尝试…

    Linux 2023年5月28日
    085
  • Docker快速部署clickhouse

    Docker快速部署clickhouse Clickhouse特点 完备的DBMS:不仅是个数据库,也是个数据库系统 列存储和数据压缩:典型的olap数据库特性 向量化并行:利用C…

    Linux 2023年6月8日
    082
  • 关于.Net Core生成JSON时错误:A possible object cycle was detected which is not supported. This can either be due to a cycle or if the object depth is larger than the maximum allowed depth of 32.

    此笔记记载了本人在.Net Core 5.0环境下生成Json数据时 A possible object cycle was detected which is not suppo…

    Linux 2023年6月14日
    0167
  • Java 注解及其底层原理

    什么是注解? 注解的分类 Java自带的标准注解 元注解 @Retention @Documented @Target @Inherited @Repeatable 自定义注解 自…

    Linux 2023年6月6日
    0118
  • 天气干燥怎么防止被静电电到

    可以摸一下墙壁或地板,把电放掉,这样摸门把手之类的金属物品就不会被电到了。 可以摸一下墙壁或地板,把电放掉,这样摸门把手之类的金属物品就不会被电到了。亲身实践,十分有效。只是摸墙和…

    Linux 2023年6月6日
    083
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球