Linux系统编程:理解文件与文件系统及VFS模型

版权申诉
0 下载量 108 浏览量 更新于2024-07-02 收藏 1.03MB PDF 举报
本教学课件深入探讨了Linux程序设计中的关键概念,特别是第三章第一节关于系统编程的部分,聚焦于Linux文件系统和底层操作。首先,我们了解到文件在Linux中是一个对象,可以读写,拥有属性如权限和类型。文件系统则是一个集合,它为文件提供了一个命名空间,用于组织和管理这些文件,通过序列号(如inode)引用它们。 文件类型和结构是理解Linux文件系统的关键。在Linux中,有几种主要类型的文件:常规文件(regular file)、字符特殊文件(character special file)、块特殊文件(block special file)、命名管道(fifo)、套接字(socket)、符号链接(symbolic link)以及目录(directory)。文件的内部结构通常是字节流,没有特定的内在结构。 Linux文件系统采用虚拟文件系统(Virtual File System, VFS)模型,这是一个内存中仅存在的抽象层,它将复杂的底层硬件抽象为用户程序可见的简单接口。VFS的主要组件包括超级块(superblock)、i节点对象(inode object)、文件对象(file object)和目录项对象(dentry object)。例如,Ext2文件系统是一种常见的Linux文件系统,其架构涉及硬链接和符号链接的区别。硬链接是通过相同的inode创建的多个文件名,它们在同一文件系统中;而符号链接则是指向另一个文件的实际路径,可以跨越文件系统。 课程还提及了"ls -l"命令的使用,这是一个系统调用,通过查看文件的详细信息来了解其权限、所有者、大小等属性。在Linux程序设计中,系统调用和库函数都是以C语言形式提供的,它们是用户程序与内核之间的核心交互方式,比如link和symlink这两个系统调用分别对应硬链接和符号链接的操作。 这门课程深入剖析了Linux系统编程中文件和文件系统的概念,包括文件类型、结构、Linux内核的VFS模型、硬链接和符号链接的区别,以及系统调用在实现文件操作中的重要作用。这对于学习和理解Linux编程,特别是进行系统级编程的学生来说,具有很高的实用价值。

2023-07-13 09:15:56,872 WARN org.apache.flink.runtime.dispatcher.DispatcherRestEndpoint [] - Unhandled exception java.io.IOException: Connection reset by peer at sun.nio.ch.FileDispatcherImpl.read0(Native Method) ~[?:1.8.0_372] at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39) ~[?:1.8.0_372] at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) ~[?:1.8.0_372] at sun.nio.ch.IOUtil.read(IOUtil.java:192) ~[?:1.8.0_372] at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:379) ~[?:1.8.0_372] at org.apache.flink.shaded.netty4.io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:253) ~[flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) ~[flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:350) ~[flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) [flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) [flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) [flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) [flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) [flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) [flink-dist-1.15.3.jar:1.15.3] at org.apache.flink.shaded.netty4.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [flink-dist-1.15.3.jar:1.15.3] at java.lang.Thread.run(Thread.java:750) [?:1.8.0_372]

2023-07-14 上传