Linux0.11文件系统pipe.c详解

模块简介在Linux-0.11中提供了管道这种进程间通讯的方式。本程序包含了管道文件读写操作函数read_pipe()和write_pipe()。函数详解rea

其实Linux0.11文件系统pipe.c详解的问题并不复杂,但是又很多的朋友都不太了解,因此呢,今天小编就来为大家分享Linux0.11文件系统pipe.c详解的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

管道

函数开头定义了一些参数,其中chars是要写入管道的数字,size有多个作用,write是已经写入的字符数。

int 字符,大小,写入=0;因为管道的最大尺寸只有4K,所以当count的值大于4K时,就会涉及多次写入。因此,通过一个大循环,当count的值大于0时,执行下面的循环操作。如果当前管道已满,则唤醒等待管道inode的进程(读进程)。如果当前inode节点上没有其他读取进程,则向该进程发送SIGPIPE信号。否则,当前进程将被添加到睡眠队列中,直到管道inode 可写。

while (count0) { while (!(size=(PAGE_SIZE-1)-PIPE_SIZE(*inode))) {wake_up(inode-i_wait); if (inode-i_count !=2) { /* 没有读取器*/current- signal |=(1(SIGPIPE-1));返回已写?已写:-1; sleep_on(inode-i_wait); }程序执行到这里,这意味着管道当前有空间可写。首先获取从管道头到缓冲区末尾的字节字符数。如果chars 的大小大于count,则使chars 等于count。接下来,如果chars 大于大小值,则使chars 等于大小。接下来,从计数值中减去chars值,并将chars值与写入的数据相加。

chars=PAGE_SIZE-PIPE_HEAD(*inode);if (chars count) chars=count;if (chars size) chars=size;count -=chars;writing +=chars;最后将size指向头节点并将PIPE_HEAD chars推进人物。最后调用get_fs_byte将数据从buf复制到管道缓冲区。

Linux0.11文件系统pipe.c详解

大小=PIPE_HEAD(*inode);PIPE_HEAD(*inode) +=字符;PIPE_HEAD(*inode)=(PAGE_SIZE-1);while (chars–0) ((char *)inode-i_size)[size++]=get_fs_byte (buf++);最后唤醒等待管道的进程并返回写入的字节数。

wake_up(inode-i_wait);书面返回;

sys_pipe

int sys_pipe(unsigned long * fildes) 该函数是创建管道函数的系统调用。

输入参数fildes为管道的文件描述符,(fildes+0)为读端,(fildes+1)为写端。

在程序的开头,定义了一系列变量。其中inode用于获取管道类型的inode。 f 数组用于从文件表中查找两个空槽。 fd数组是管道的读写端。 i和j用于遍历。

Linux0.11文件系统pipe.c详解

结构m_inode * inode;结构文件* f[2]; int fd[2];整数i,j;接下来要做的就是从全局文件表file_table中找到两个空位。如果没有找到两个空槽,则返回-1。

j=0; for(i=0;j2 iNR_FILE;i++) if (!file_table[i].f_count) (f[j++]=i+file_table)-f_count++;如果(j==1) f[0]- f_count=0;如果(j2)返回-1;接下来从进程的文件表中获取两个空位来填充文件描述符数组fd[2]。同样,如果没有两个空位置,则返回-1。

j=0; for(i=0;j2 iNR_OPEN;i++) if (!current-filp[i]) { current-filp[ fd[j]=i ]=f[j]; j++; if (j==1) current-filp[fd[0]]=NULL; if (j2) { f[0]-f_count=f[1]-f_count=0;返回-1; }下一步就是获取一个空的inode节点,作为管道读写的inode。如果没有空inode 节点,则返回-1。

用户评论

Linux0.11文件系统pipe.c详解
浮光浅夏ζ

感谢分享!终于找到一篇详细解析Linux 0.11文件系统的 pipe.c 的教程,我正在学习嵌入式开发,这方面的内容对于我来说非常有用🙏

    有16位网友表示赞同!

Linux0.11文件系统pipe.c详解
_心抽搐到严重畸形っ°

我对 Linux 内核源码深感兴趣,这篇关于 pipe.c 的讲解非常清晰易懂。作者分析了关键代码实现细节,让我受益匪浅!期待作者继续分享更多Linux内核相关的文章。

    有17位网友表示赞同!

Linux0.11文件系统pipe.c详解
她的风骚姿势我学不来

这篇文章虽然很专业,但我看了之后还是一头雾水…也许我理解内核源码的程度还有些不足 😅 希望可以有更多的实例讲解来帮助我们更好地理解。

    有9位网友表示赞同!

Linux0.11文件系统pipe.c详解
一纸愁肠。

文件系统这个东西一直让我感到头疼 😅 幸好看到这篇文章,结合代码解析,终于明白了 Linux0.11 系统中 pipe.c 的作用。感谢作者!

    有14位网友表示赞同!

Linux0.11文件系统pipe.c详解
那伤。眞美

最近在研究Linux 内核开发,这本书里提到的pipe.c 相关的知识点确实很重要,可惜我英语水平有限,希望能有中文版本!

    有7位网友表示赞同!

Linux0.11文件系统pipe.c详解
海盟山誓总是赊

文件操作一直是比较核心的一块内容,这篇文章对 pipe.c 的解释很有帮助。虽然代码有点复杂,但我还是看懂了作者的思路。

    有8位网友表示赞同!

Linux0.11文件系统pipe.c详解
孤廖

想看更多关于Linux 文件系统的内容,包括其他模块的介绍和实战应用案例!这篇文章仅仅是入门级,还需要进一步深入学习才能真正掌握内核开发技能。

    有9位网友表示赞同!

Linux0.11文件系统pipe.c详解
沐晴つ

对于 Linux 新手来说,这篇 文章的内容可能理解难度较大。我希望作者能够添加一些更详细的解释和示例代码,以帮助初学者更容易理解 linux0.11文件的 pipe.c

    有19位网友表示赞同!

Linux0.11文件系统pipe.c详解
命里缺他

这篇文章很有用!它让我了解了Linux内核文件系统的基础原理,以及如何利用pipe.c来实现流式数据传输。感谢作者!

    有12位网友表示赞同!

Linux0.11文件系统pipe.c详解
如你所愿

我正在学习C语言编程,打算深入学习 Linux 内核开发。这篇关于linux0.11 文件系统 pipe.c 的讲解非常适合我的起点! 感觉学习内核开发的道路越来越清晰了💪

    有13位网友表示赞同!

Linux0.11文件系统pipe.c详解
々爱被冰凝固ゝ

代码本身很专业,对入门者来说可能有些难啃,希望可以结合更形象的图示或案例来解释关键概念。

    有11位网友表示赞同!

Linux0.11文件系统pipe.c详解
陌然淺笑

我一直想了解 Linux 内核是如何实现文件操作的,这篇关于 pipe.c 的文章给了我很好的启发!作者分析得非常透彻,尤其是在讲解代码逻辑方面,受益匪浅!

    有9位网友表示赞同!

Linux0.11文件系统pipe.c详解
╯念抹浅笑

看完这篇文章之后,我对 Linux 文件系统有了更清晰的认识。 不过,对于一些较为复杂的算法和优化策略,希望能提供更深入的解析

    有8位网友表示赞同!

Linux0.11文件系统pipe.c详解
断桥残雪

我赞赏作者对Linux内核技术的深入理解和清晰的讲解! 这篇关于pipe.c 的文章读起来十分流畅,非常适合想学习 Linux 内核源码的人阅读参考!

    有9位网友表示赞同!

Linux0.11文件系统pipe.c详解
一尾流莺

这篇博文太棒了!对新手来说讲解到位。希望以后能分享更多关于 Linux0.11 系统的相关知识点以及相关的源码解读!

    有11位网友表示赞同!

Linux0.11文件系统pipe.c详解
眉黛如画

Linux 内核开发需要扎实的C语言基础和对计算机原理的深入理解,这篇文章提供了一个很好的入门方向,希望能继续学习更高级的概念。

    有6位网友表示赞同!

Linux0.11文件系统pipe.c详解
不离我

对于我们想要构建自身高效、稳定的系统环境的人来说,了解 Linux0.11 文件系统的内部机制非常重要。 这篇博文让我受益良多!

    有11位网友表示赞同!

Linux0.11文件系统pipe.c详解
颓废人士

希望作者能继续更新更多关于 Linux0.11 系统的内容,例如其他模块的分析和讲解,以及更实用的项目案例!

    有13位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/198296.html

Like (0)
小su的头像小su
Previous 2024年9月26日 上午12:00
Next 2024年9月26日 上午12:03

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注