【Linux】:基础IO

编程入门 行业动态 更新时间:2024-10-15 12:33:06

【Linux】:<a href=https://www.elefans.com/category/jswz/34/1770030.html style=基础IO"/>

【Linux】:基础IO

基础IO

  • 一.C语音文件操作
    • 1.fopen
    • 2.fwrite
    • 3.fopen以a方式打开
  • 二.Linux下一切皆文件
  • 三.系统调用接口
  • 四.文件描述符-fd

共识原理:

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

一.C语音文件操作

1.fopen

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

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


2.fwrite

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

插入一个额外的问题

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

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

回到原来的问题

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

3.fopen以a方式打开

a其实就是不断追加。

二.Linux下一切皆文件

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

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

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

当然更常用的fprintf

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

三.系统调用接口

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

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


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

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

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

关闭文件

写入内容


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

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

总结

四.文件描述符-fd

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

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

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

这里从键盘上读入字符,用printf显示出来。可以看到是可以成功的,这里我们并没有打开这个文件,却依旧能写入,说明这三个文件默认打开其实是操作系统的特性。

更多推荐

【Linux】:基础IO

本文发布于:2023-11-30 12:40:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1650249.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:基础   Linux   IO

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!