2020校招备战日记4.24 ---- Linux文件概念,Unix I/O ,Linux目录结构,单步调试

本文深入探讨了Linux下的文件概念,包括磁盘、显示器、网络等被视为文件的特性,以及文件的分类和目录结构。同时,分享了单步调试的心得,强调了正确设置断点和观察变量值的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标完成情况

  • LeetCode 两道题
  • 开始看第10章,系统级IO。
  • 看视频,linux扫盲视频。

学习回顾

Linux文件概念

Linux中的磁盘、显示器、网络等都被视为文件,而文件就是字节序列

Linux内核对磁盘、显示器、网络等所有这些文件的操作都是一致的,有统一的接口,这些接口称为Unix I/O,他们完成了对文件的打开、读、写。

  • 所谓打开,就是内核宣称将以某种方式访问一个filename指定的文件,返回一个文件描述符,文件描述符是全局唯一的一个小整数。这里主要介绍了open函数,这个函数有三个参数,分别是filename,flag和mode,其中flag指定了只读or只写or读写,并且还可以进一步指定写的方式, 而mode则指定了文件本身的所有权限位,而打开文件的每一个进程会有一个自己的umask,umask标识了本进程没有的权限,从而进程得以知道自己拥有哪些权限。
  • 所谓读,就是输入, 就是将字节从文件复制到内存
  • 所谓写,就是输出,就是将字节从内存复制到文件
Linux目录结构
文件的分类

前面介绍了文件的基本概念。
在满足那个基本概念的前提下,文件还可以做一些分类:

  1. 普通文件。 普通文件的“普通”是相对于目录文件而言的。所以普通文件可以包含所有数据,在内核看来普通文件就是1和0组成的字节序列。普通文件又可以分成两类:文本文件和二进制文件。严格的说,文本文件是二进制文件的一种,但是文本文件特指那些ASCII字符编码或者Unicode编码的文件,而二进制文件则没有这种编码要求,因此二进制文件可以是图片文件、视频文件、可执行文件等等。
  2. 目录文件。目录文件也还是文件。目录文件包含一组链接到其他文件的链接。这里的“其他文件”,是包括普通文件和目录文件的。也就是说,目录文件可以链接到一个普通文件,也可以链接到另一个目录文件。特别的,一个目录文件中至少包含两个链接,一个连接到自己(用 . 来标识),一个连接到自己的上一级目录(用 . . 来标识)。

综合以上,我们就知道磁盘、网络、终端等设备都被视作文件,而文件又分为普通文件和目录文件,可见他们在Linux内核看来就是一个个文件,而这些文件之间的相对位置是由一种树状结构定义的。

文件目录结构

Linux的目录结构,非常重要但是也非常容易被忽略的一点就是:有且仅有一个根目录文件,用 ‘/’ 来标识。
根目录文件和普通目录文件一样,可以包含其他目录文件和普通文件。
其中有一些容易理解的如下:

  • bin 目录文件 : 存放一些linux自带的可执行文件,例如我们在shell中用到的cp, ls, mkdir等等。
  • boot 目录文件: 存放一些系统启动时用到的文件。
  • opt 目录文件: 存放一些安装包
  • home 目录文件: 存放用户

在home的下面,有系统中的所有用户,其中一个就是我们现在登录的用户。注意,我们平常在GUI界面中点击的home,其实看到的是home下面我们这个用户的目录结构,home只有一个,但是用户不止一个,GUI给我们看到的home其实只是真正的home的一部分。

绝对路径:以根目录开头的路径
相对路径:不是以根目录开头的路径
相对路径和绝对路径的概念看似简单,但是需要对文件和目录的概念有清晰的认识,才能真正理解,否则都是形式化的记忆。

单步调试心得

今天下午和晚上的很多时间都在debug,也是我第一次真正意义上打断点,debug。通过这几天的学习,我对程序的运行有了更加清晰的认识,也使得我在debug的时候能够有比较清晰的思路,能够比较快得定位问题所在,之前都是在函数中打印标记来debug,就很low,也很慢,也无法发现底层的错误位置。重要的两点就是:

  1. 在程序出错的位置附近打断点。
  2. F5 运行到下一个断点,F10 运行到下一行,F11 单步执行。不同的ide可能快捷键不一样,但是这三种步骤是一样的。观察过程中变量值的变化。

不过,晚上在尝试实际运行书中的代码的时候,由于csapp.h 的问题,始终报错,暂时还没有解决。

网上找到的方案是将csapp.c文件包含到csapp.h文件当中,这样相当于每次都要重新编译csapp.c文件,感觉比较浪费,我 觉得应该将.c文件编译成动态库或者静态库,这样每次就不用重新编译了,只要链接就好了。但是我今晚尝试失败了,感觉还是因为我linux使用不熟的原因,操作系统似乎并没有按照我的想法在运作。

明日目标

  1. LeetCode 5道题。 明天以做题为主。后天有腾讯笔试。
  2. csapp 第10章再看1/3 。在学习的过程中学习Linux的使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值