自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 资源 (1)
  • 收藏
  • 关注

原创 当你执行ls命令时,ls本身会作为参数传递给ls命令所对应的可执行文件的进程, 为什么要将命令本身作为参数传递给进程呢

当你执行ls命令时,ls本身会作为参数传递给ls命令所对应的可执行文件的进程. 在许多情况下,将命令本身的名称作为参数传递给进程是有用的,尤其是对于一些命令行工具或应用程序而言.例如,通过命令本身的名称,进程可能可以推断出它是在哪个目录下被调用的,或者是由哪个用户调用的。:进程可能需要知道自己被调用的名称,以便根据不同的调用方式执行不同的操作。虽然有些情况下可能不需要将命令本身的名称作为参数传递给进程,但在许多情况下,这种做法是有用的,因为它提供了更多的上下文信息和灵活性。

2024-05-12 13:14:33 93

原创 当sigsuspend函数正在使程序suspend时, 如果被sigsuspend函数屏蔽的信号被发送, 这些信号何时被处理, 如果屏蔽的信号有很多种, 而且这些信号都发送了, 这些信号被处理的顺序

可以看到, 信号的处理顺序和之前几次都一模一样, 所以可以推断, 被屏蔽的信号的处理顺序跟信号集添加的顺序和信号的发送顺序都无关, 是按照特定的顺序, 推测可能是跟信号屏蔽字的本身的位图有关。的处理过程中信号屏蔽字会跟着改变, 处理的顺序会不会跟信号的发送顺序有关, 所以我改变信号的发送顺序为。的处理过程是按照一定的顺序的, 会不会跟信号集添加信号的次序有关, 所以我改变信号集的添加顺序为如下。后才返回的, 所以被sigsuspend函数屏蔽的信号是在sigsuspend返回前被处理的。

2024-05-01 17:43:16 2

原创 由一段代码直观深入理解sigsuspend函数

之所以会出现在信号屏蔽字的原因是在一个信号被处理的过程中(正在执行信号处理程序), 该信号会被加入信号屏蔽字, 即在该信号被处理完成之前, 相同的信号会被屏蔽掉以保证此信号完整的被处理完(信号处理程序被执行完), 其他的信号都会正常响应, 所以在suspend期间, 我们往该进程发送了。, 证实了sigsuspend函数改变了信号屏蔽字使其只包含了。信号后, 信号会立即被响应, 执行相应的信号处理程序. 在。的信号处理程序中我们返回了此时进程的信号屏蔽字, 结果是。根据shell返回的进程号。

2024-05-01 16:43:17 70

原创 由一个bug引起的关于fork和exec函数对进程的进程空间中存储命令行参数的区域的继承或变化的探究

shell也是一个程序, 当在shell中通过命令运行程序时, 比如, shell程序接收到的参数有两个, argv[0]为./times, argv[1]为date。

2024-04-28 17:27:32 211

原创 通过对比声明了解释器的解释器文件与不声明解释器的shell脚本这两种脚本的执行过程来深入理解shell中运行程序的原理

作为execlp函数的pathname参数, shelll脚本的路径和其他命令行参数作为execlp的参数然后执行. 如果该脚本中会用到其他程序如awk, 为了运行awk, 则又会执行fork,execlp, wait. 所以如果shell脚本中需要用到其他程序文件, 用解释器文件(声明了解释器)会比shell脚本(不声明解释器)开销更小, 即减少了一次fork, execlp, wait。此类的带解释器的解释器文件, 之后, exec函数就该解释器的绝对路径。在shell中执行一个。

2024-04-28 11:16:01 363

原创 遍历环境表(字符指针数组)时遇到的问题

是一个指向0的指针, 对其进行解引用后得到的是0, 如果在printf中用%d进行匹配就可以输出, 所以是因为与printf中的输出格式。用全局变量environ遍历环境表时, 如果for循环写成下面这样, 运行后会出现段错误。在for中检查*ptr的值, 如果是字符串的地址(也就是非0地址), 就进行。的格式化输出, 就避免了匹配错误, 也就不会出现段错误。的格式化输出, 如果为0, 则不对其进行。不匹配, 所以出现段错误。

2024-04-27 18:18:29 282

原创 对execlp此类参数为可执行文件的名称而不是路径名的exec函数的探究

由于我对课本中对该函数的阐述产生误解, 所以我认为execlp函数会从环境变量中的PATH中存放的路径和当前工作目录中去找这个目标执行文件, 但事实上execlp只会从环境变量的PATH中存放的路径去寻找, 而不会去当前工作目录中找. 所以通过将当前工作目录加到环境变量中, execlp函数也完美执行。开始时, 确认echoall可执行代码无bug, 编译并执行execle_execlp.c, 结果execle函数完美执行, 但execlp函数一直报错。, 下面是一些添加环境变量时的细节。

2024-04-27 17:38:19 392

原创 由fork函数引起的对父进程子进程的关系和标准I/O库设置的缓冲策略的深入探究

将输出重定向到文件中, fork前的printf里的内容会输出两句到文件中, 因为标准I/O库对连接到普通文件的标准输出设置的是全缓冲, 换行符不会使标准输出的输出缓冲区被刷新, 所以父进程在fork子进程前中其中的缓冲区中有内容, 所以父进程中标准输出缓冲区被复制到子进程, 在子进程和父进程退出时所有的缓冲区都会被刷新, 所以这也就是为什么printf里的内容会写两次。

2024-04-27 13:09:11 325

原创 由一段测试代码出发直观深入的理解标准I/O函数库对标准输入输出设置的缓冲区刷新策略

输入的缓冲去刷新策略比较好理解. 运行程序后, 在输出设备上键入字符但并未键入回车前, 已经键入的字符会被保存在标准输入的缓冲区中, 并未写到标准输入链接的文件中;. 按照这个结论, 试着解释一下为什么此时行缓冲区没有换行符但仍然被刷新了, 这是因为当标准输入被取空后, 再次执行getc时, 即要求了从带行缓冲的标准输入流得到数据, 但数据已经被取空, 即标准输入链接的文件为空, 就会引发冲洗所有输出流, 这也就是为什么换行符没有写入标准输出链接的文件中, 但标准输出仍然输出内容.

2024-04-25 12:28:37 278

原创 从测试unlink函数的功能出发直观了解如何才会删除一个文件

文件系统: 如下图所示, 目录文件和普通文件等文件都存放在块中, 存放了目录文件的块为目录块, 目录文件中存放的信息是目录项. 目录项中包含存储该文件信息的i节点的指针和文件名, 查找文件是通过查看对应目录的目录项, 找到i节点编号, 由编号找到存储了文件信息的i节点, i结点中有指向数据块(即普通文件的存储位置)的指针, i节点中还有文件链接数, 即包含了这个i节点的编号信息的目录个数,

2024-04-24 11:27:27 277

原创 umask函数和文件权限屏蔽位

注意: umask改变文件权限屏蔽字只能在本进程中生效, 对父进程的文件权限屏蔽字没有影响, 这里的父进程是shell进程, 可以通过shell命令。umask函数将mask与0777进行按位与, 即mask&0777, 对结果中为1的位对应的权限进行屏蔽, 下面是所有的权限屏蔽字及其对应的宏。所以, 文件权限位屏蔽字的工作模式显而易见, 如果屏蔽了对应的权限位, 那么创建时只能指定未屏蔽的权限位才会在文件权限中成功生效。函数定义: mode_t umask(mode_t mask)

2024-04-22 21:53:44 288

原创 实际用户ID和有效用户ID

一个进程访问文件时是根据进程的有效用户ID来判断访问权限的。将access的所有者改为root并设置用户位。此时access的所有者为普通用户。编译生成可执行文件access。

2024-04-22 17:57:11 188

原创 探究追加模式下打开文件时, lseek函数对当前文件偏移量的作用效果, 以及当前文件偏移量作用于读和写的效果

结果分析:见上面的结论。

2024-04-22 12:41:09 284

原创 shell如何执行类似于5>out之类的指定文件描述符打开文件的操作

实验结果: 在进程的进程表项中只有一个打开out的进程表项, 对应的文件描述符为5。,实验结果说明可能没有中间过程, 即指定了文件描述符为5打开的out文件。, 用sleep函数让程序不终止, 用。查到对应的进程号PID, 再通过。shell运行程序并执行命令。查看进程的文件描述符信息。

2024-04-22 11:55:22 116

原创 关于探究shell中2>&0重定向的工作原理的实验

实验方法: 如果两个文件描述符指向的是同一份文件表项, 那么偏移某一个文件描述符指向的文件表项中的当前文件偏移量, 另外一个文件描述符指向的文件表项中的当前文件偏移量也会改变;反之, 如果两个文件描述符指向的不是同一份文件表项, 偏移其中一个文件描述符指向的文件表项中的当前文件偏移量就不会影响另外一个文件描述符指向的另外一份文件表项中的当前文件偏移量*/设计来源: 因为两种猜想的矛盾点在于2和1指向的是不是同一份文件表项, 可以根据文件表象中的当前文件偏移量来设计实验。

2024-04-22 11:24:54 202

原创 pread, pwrite 函数不会改变当前文件偏移量

结果分析: pread,pwrite不会改变当前文件偏移量, 需要指定偏移量进行读写操作, read和write则会改变当前文件偏移量, 不需要指定偏移量进行操作。

2024-04-21 21:31:26 106

原创 用write函数将一块重复利用的接收数组中的数据写入某处时注意脏数据的写入

那么最后写入的时候会将上一回读入buf的数据也写入标准输出, 因为你给write指定读多少它就读多少, 指定了BUFSIZE个写入个数, 那么write每次都会写入BUFSIZE个 (除非buf中不够, 而这里不存在不够的情况, 因为BUFSIZE为buf的大小)

2024-04-21 20:17:19 110

原创 用write函数往文件中写入数据后, 紧接着用read函数读却不出数据

问题解释: write完成后, 将此时offset偏移量输出时会发现offset=30, 而下次写或者读时会在偏移后的位置继续, 所以必须让offset回到文件开始的位置, 即offset为0时才能完整读出刚刚写入的数据。总结: 文件的偏移量offset是不会体现在read, write等函数中的, 下面是APUE中的原话。

2024-04-21 19:11:55 141

原创 open函数一直返回0

执行后, fd一直为0, 以为是open函数的问题, 最后发现是if里的判断语句出了问题, ==比=的运算优先级高, 所以open返回一个非负的数, ==先做运算, 所以先与-1比较, 返回值为布尔型的false, 然后=再做赋值运算, 将false赋值给int型的fd, 所以fd的值为0,

2024-04-21 17:58:53 129

原创 标准输入重定向和文件描述符的关系

标准输入重定向与文件描述符

2024-04-21 16:28:54 291

原创 C语言中sizeof()的用法总结

sizeof(TYPE), TYPE可以是。

2024-04-06 21:56:55 63

原创 main.c:(.text+0x26): undefined reference to `func‘

结论: 使用gcc对多个C源文件进行编译时, 如果这几个源文件之间有关联, 比如main函数会调用另外一个C源文件中的一个函数, 此时编译的时候就应该同时编译。问题在Linux环境下, 使用gcc对多个C源文件进行编译时, 如果进行单个编译时, 可能会出现编译错误。解决方法: 对这几个C源文件使用gcc同时进行编译。

2024-04-04 15:13:28 186

原创 VMware下CentOS报错:Could not retrieve mirrorlist http://mirrorlist.centos.org或者wget: 无法解析主机地址

对照虚拟机中执行ifconfig命令后的结果,检查子网IP和子网掩码以及网关是否配置正确,检查VMware的虚拟网络配置。如果配置正确,再筛查其他原因。

2024-03-30 19:15:09 191

408计算机学科专业基础综合--数据结构各章节思维导图.zip

所有思维导图的制作都是基于王道单科书《2022年数据结构考研复习指导》,供各位计算机考研小伙伴们参考,共同进步!

2021-05-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除