【Linux】:基础IO

这篇具有很好参考价值的文章主要介绍了【Linux】:基础IO。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

共识原理:

1.文件=属性+内容。
2.文件分为打开文件和未打开文件。
3.打开的文件:进程打开。
4.未打开的文件:在磁盘里存放着。
5.文件打开,必须先被加载到内存。
6.一个进程可以打开多个文件,那么操作系统就必须先描述再组织的对文件进行管理。

一.C语音文件操作

1.fopen

【Linux】:基础IO,Linux系统,linux,运维,服务器

fopen打开的文件如果不存在则会在当前路径下创建一个该文件,当前路径指的是进程路径。

【Linux】:基础IO,Linux系统,linux,运维,服务器

那么同理如果我更改了当前路径的工作目录,我就可以把文件建立到新的路径里。

【Linux】:基础IO,Linux系统,linux,运维,服务器

【Linux】:基础IO,Linux系统,linux,运维,服务器
【Linux】:基础IO,Linux系统,linux,运维,服务器

2.fwrite

【Linux】:基础IO,Linux系统,linux,运维,服务器

【Linux】:基础IO,Linux系统,linux,运维,服务器

【Linux】:基础IO,Linux系统,linux,运维,服务器

这里不加1似乎并没有问题,接下来将写入的文件内容改一改。

【Linux】:基础IO,Linux系统,linux,运维,服务器

【Linux】:基础IO,Linux系统,linux,运维,服务器

插入一个额外的问题

似乎也没有问题。那么问题是原来的数据怎么不见了,只剩下了abcd了呢?

【Linux】:基础IO,Linux系统,linux,运维,服务器

根据文档解释,fopen用w写入时每次都从开头写入,并且每次都会把文件进行清空处理。

回到原来的问题

【Linux】:基础IO,Linux系统,linux,运维,服务器

【Linux】:基础IO,Linux系统,linux,运维,服务器

后面出现了一个乱码,这是/0,因为/0不能被看到,所以被vim翻译成了乱码。那么究竟需不需要写/0呢?其实是不需要的,因为字符串以/0结尾是c语言的规定,跟文件没有关系。

3.fopen以a方式打开

【Linux】:基础IO,Linux系统,linux,运维,服务器

【Linux】:基础IO,Linux系统,linux,运维,服务器

【Linux】:基础IO,Linux系统,linux,运维,服务器

a其实就是不断追加。

二.Linux下一切皆文件

在创建一个C程序时,它会默认打开三个文件:stdin,stdout,stderror。

【Linux】:基础IO,Linux系统,linux,运维,服务器

当我们想要读取或者打印时,可以直接向这些文件流里写入即可。

例如:之前我们向log.txt文件里写入信息,也可以向stdout文件里写入信息。

【Linux】:基础IO,Linux系统,linux,运维,服务器

【Linux】:基础IO,Linux系统,linux,运维,服务器

当然更常用的fprintf

【Linux】:基础IO,Linux系统,linux,运维,服务器

【Linux】:基础IO,Linux系统,linux,运维,服务器

可以看出对于Linux来说无论是对log.txt文件里写入,还是向显示器写入都没有区别。

三.系统调用接口

众所周知文件是被存在磁盘里的,而用户想要操作硬件就必须经过操作系统,操作系统就必须提供对应的接口来供用户使用,那么可以得出c语言的标准文件例如printf之类也必定封装了系统调用接口,下面来介绍一些系统调用接口。

【Linux】:基础IO,Linux系统,linux,运维,服务器

第一个参数要打开的文件名,第二个是打开的模式,第三个是创建文件时指定的文件权限。第一个接口一般用来打开已经存在的文件,第二个一般用来创建新文件。

【Linux】:基础IO,Linux系统,linux,运维,服务器【Linux】:基础IO,Linux系统,linux,运维,服务器

【Linux】:基础IO,Linux系统,linux,运维,服务器
【Linux】:基础IO,Linux系统,linux,运维,服务器

这与C语言所封装后的不同,使用O_WRONLY并不会新建文件,一旦找不到文件就是打开失败了。

接下来使用第三个参数,想要创建一个权限为666的文件

【Linux】:基础IO,Linux系统,linux,运维,服务器

注意,这里必须要把掩码置为0,不然权限会与掩码相结合得出最终的权限。

关闭文件

【Linux】:基础IO,Linux系统,linux,运维,服务器

写入内容

【Linux】:基础IO,Linux系统,linux,运维,服务器

【Linux】:基础IO,Linux系统,linux,运维,服务器
【Linux】:基础IO,Linux系统,linux,运维,服务器

接下来做一个与上文一样的实验

【Linux】:基础IO,Linux系统,linux,运维,服务器

【Linux】:基础IO,Linux系统,linux,运维,服务器

我们可以发现它原本的内容依旧是被保留了下来。如果我们想要和fopen的w模式一样,每次写时将内容清空该如何做呢?那我们应该再加一个擦参数O_TRUNC。

【Linux】:基础IO,Linux系统,linux,运维,服务器

总结

【Linux】:基础IO,Linux系统,linux,运维,服务器

【Linux】:基础IO,Linux系统,linux,运维,服务器

四.文件描述符-fd

每打开一个文件,就必定有一个结构体去维护这个文件(struct file)。而一个进程可以打开多个文件,那么这多个文件的管理结构体就会组成一个struct files_struct结构体,这个结构体里有一个数组(struct file*fd_array[]),存放着打开文件的结构体的指针,而这个数组的下标就被称为fd,所以open的返回值就是数组的下标。而这个结构体的指针存放在PCB里,这样该进程就能通过PCB管理这些文件了。

【Linux】:基础IO,Linux系统,linux,运维,服务器

** Linux进程默认情况下会有3个缺省打开的文件描述符,分别是标准输入0, 标准输出1, 标准错误2。0,1,2对应的物理设备一般是:键盘,显示器,显示器**

所以我们可以直接通过0,1进行输入输出

【Linux】:基础IO,Linux系统,linux,运维,服务器

【Linux】:基础IO,Linux系统,linux,运维,服务器

这里从键盘上读入字符,用printf显示出来。可以看到是可以成功的,这里我们并没有打开这个文件,却依旧能写入,说明这三个文件默认打开其实是操作系统的特性。文章来源地址https://www.toymoban.com/news/detail-741434.html

到了这里,关于【Linux】:基础IO的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【运维】Linux 跨服务器复制文件文件夹

    如果是云服务 建议用内网ip scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来

    2024年02月08日
    浏览(74)
  • 【Linux 服务器运维】定时任务 crontab 详解 | 文末送书

    本文思维导图概述的主要内容: 1.1 什么是 crontab Crontab 是一个在 Unix 和 Linux 操作系统上 用于定时执行任务 的工具。它允许用户创建和管理计划任务,以便在特定的时间间隔或时间点自动运行命令或脚本。Crontab 是 cron table 的缩写, cron 指的是 Unix 系统中的一个后台进程,它

    2024年02月08日
    浏览(92)
  • 【Linux运维】shell脚本检查服务器内存和CPU利用率

    在管理服务器时候写了一个 shell脚本,在服务上实现每天凌晨3点查系统的指定文件夹下的容量大小,如果超过10G就要删除3天前的内容,还要时刻查询内存和cpu利用率,如果超过80%就要提示用户出现过载 将以上代码保存为一个.sh文件,然后通过crontab在每天凌晨3点运行即可:

    2024年02月09日
    浏览(67)
  • Linux多路IO复用技术——epoll详解与一对多服务器实现

    本文详细介绍了Linux中epoll模型的优化原理和使用方法,以及如何利用epoll模型实现简易的一对多服务器。通过对epoll模型的优化和相关接口的解释,帮助读者理解epoll模型的工作原理和优缺点,同时附带代码实现和图解说明。

    2024年02月05日
    浏览(44)
  • Linux学习记录——사십일 高级IO(2)--- Select型服务器

    select就是多路转接IO。select能以某种形式,等待多个文件描述符,只要有哪个fd有数据就可以读取并全部返回。就绪的fd,要让用户知道。select等待的多个fd中,一定有少量或者全部都准备好了数据。 nfds输入型参数,表示select等待的多个fd中,fd对应的数 + 1 剩下四个参数都是输

    2024年01月16日
    浏览(53)
  • Linux搭建Web服务器(一)——阻塞与非阻塞、同步与异步、Linux五种IO模型

    目录 0x01 阻塞与非阻塞、同步与异步 阻塞与非阻塞 同步与异步 总结 0x02 Unix、Linux上的五种IO模型 阻塞(blocking) 非阻塞(non-blocking——NIO) IO复用(IO multiplexing) 信号驱动(signal-driven) 异步(asynchronous) 为了理清楚这几个概念,我们可以从 数据就绪 以及 数据读写 层面

    2023年04月10日
    浏览(66)
  • Linux学习记录——사십삼 高级IO(4)--- Epoll型服务器(1)

    poll依然需要OS去遍历所有fd。一个进程去多个特定的文件中等待,只要有一个就绪,就使用select/poll系统调用,让操作系统把所有文件遍历一遍,哪些就绪就加上哪些fd,再返回。一旦文件太多了,遍历效率就显而易见地低。epoll是为处理大批量句柄而作了改进的poll,句柄就是

    2024年01月18日
    浏览(52)
  • Linux服务器常见运维性能测试(1)综合跑分unixbench、superbench

    最近需要测试一批服务器的相关硬件性能,以及在常规环境下的硬件运行稳定情况,需要持续拷机测试稳定性。所以找了一些测试用例。本次测试包括在服务器的高低温下性能记录及压力测试,高低电压下性能记录及压力测试,常规环境下CPU满载稳定运行的功率记录。 这个系

    2024年02月04日
    浏览(82)
  • Linux本地部署1Panel服务器运维管理面板并实现公网访问

    1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、文件管理、数据库管理、容器管理等 下面我们介绍在Linux 本地安装1Panel 并结合cpolar 内网穿透工具实现远程访问1Panel 管理界面 执行如下命令一键安装 1Panel: 安

    2024年02月04日
    浏览(98)
  • 【Linux网络编程】TCP并发服务器的实现(IO多路复用select)

    服务器模型主要分为两种, 循环服务器 和 并发服务器 。 循环服务器 : 在同一时间只能处理一个客户端的请求。 并发服务器 : 在同一时间内能同时处理多个客户端的请求。 TCP的服务器默认的就是一个循环服务器,原因是有两个阻塞 accept函数 和recv函数 之间会相互影响。

    2024年02月03日
    浏览(82)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包