前言 在《[apue]进程控制那些事儿》一文中,曾提到进程ID并不是唯一的,在整个系统运行期间一个进程ID可能会出现好多次。 >./pid forkandexecchild18687 [18687]childrunning waitchild18687return0 forkandexecchild18688 [18688]childrunning waitchild18688return0 forkandexecchild18689 ... waitchild18683return0 forkandexecchild18684 [18684]childrunning waitchild...

  A12Hg3IkQc1x   2024年05月17日   30   0   0 Linux

前言 在写《[apue]进程控制那些事儿》/"进程创建"/"更改进程用户ID和组ID"一节时,发现setreuid更新实际用户ID(RUID)或有效用户ID(EUID)时,保存的设置用户ID(savedset-user-idSUID)只会随EUID变更,并不像man上说的会随RUID变更(mansetreuid): IftherealuserIDisset(i.e.,ruidisnot-1)ortheeffectiveuserIDissettoavaluenotequaltothe previousrealuserID,thesavedset-user-IDwillbesettothenewe...

  A12Hg3IkQc1x   2024年04月10日   42   0   0 Linux

进程标识 在介绍进程的创建、启动与终止之前,首先了解一下进程的唯一标识——进程ID,它是一个非负整数,在系统范围内唯一,不过这种唯一是相对的,当一个进程消亡后,它的ID可能被重用。不过大多数Unix系统实现延迟重用算法,防止将新进程误认为是使用同一ID的某个已终止的进程,下面这个例子展示了这一点: include<stdio.h> include<unistd.h> include<stdlib.h> include<sys/types.h> include<sys/wait.h> include<time.h> incl...

  A12Hg3IkQc1x   2024年03月29日   93   0   0 Linux

前言 之前在写apue系列的时候,曾经对系统接口的很多行为产生过好奇,当时就想研究下对应的源码,但是苦于linux源码过于庞杂,千头万绪不知从何开启,就一直拖了下来。 最近在查一个问题时无意间接触到了codebrowser这个在线源码查看器,它同时解决了源码包下载和环境搭建的问题,版本也帮你选好了,直接原地起飞进入源码查看: 下面是查找glibcexit的过程: 语法高亮、风格切换、跳转(定义/引用)等功能做的还是很全面的,看代码绰绰有余,简直是我等coder之福音。 这里感谢Bing同学的介绍,感兴趣读者可以在文末参考它写的关于glibcexit的另一篇文章,也很不错的。 glibcex...

  A12Hg3IkQc1x   2023年11月02日   85   0   0 Linux

问题背景 最近做了一个ipv6相关的功能,发现使用getifaddrs获取的本地ipv6地址有可能不是真实的网络ipv6地址: 例如上图中通过getifaddrs获得了多个本地ipv6地址,其中<fe80>开头的已知是本地ipv6地址,被排除;还有<2408>这种,其实也是"假ipv6"地址,对应的设备并不能访问ipv6网络。 对于这种假v6地址,无法通过遍历的方式进行枚举排除,而一旦将v4网络环境错认为是v6环境,对后面的网络操作影响比较大。需要引入一种准确判断当前网络是否有ipv6访问能力的方法,为此server端同学专门给了一个判断接口。 probe_v6_ad...

  A12Hg3IkQc1x   2023年11月02日   98   0   0 C++

问题背景 之前写过一篇《使用脚本收发protobuf协议数据》,通过pbjs命令可以将protobuf二进制数据转换为json: >pbjsmsg.proto--decodeProbeIpv6Response<response.bin { "selfAddr":{ "addrV6":"2409:8900:7900:8f0d:ecd9:4aee:aa3:7ad", "portV6":46066 }, "brosAddr":[ { "addrV6":"2409:8a34:4405:6624:5250:9d04:cf77:d", "portV6":18720 }, { "addrV6":...

  A12Hg3IkQc1x   2023年11月01日   93   0   0 JavaScript

前言 Unixlike系统和windows的最大区别就是有一套标准的系统信息数据文件,一般存放在/etc/目录下,并且提供了一组近似的接口访问和查询信息,这些基础设施让系统管理看起来井井有条,下面就来盘点一下。 总览 下面这个表列出了unix系统常用的几种数据文件: 信息类别 文件路径 结构 查询 遍历 口令文件 /etc/passwd passwd getpwnam/getpwuid setpwent/getpwent/endpwent 阴影口令 /etc/shadow spwd getspnam setspent/getspent/endspent 组文件 /etc/gr...

  A12Hg3IkQc1x   2023年11月01日   68   0   0 Linux

概览  开门见山先上图 界定一些术语,方便后面说明: GMT:格林威治平均时,太阳每天经过位于英国伦敦郊区的皇家格林威治天文台的时间为中午12点,1972年之前使用的国际标准时间,因地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能和实际的太阳时相差16分钟。 UTC:国际标准时间,相当于本初子午线(即经度0度)上的平均太阳时。UTC时间是经过平均太阳时(以格林威治时间GMT为准)、地轴运动修正后的新时标以及以秒为单位的国际原子时所综合精算而成。 Epoch:日历时间,自国际标准时间公元1970年1月1日00:00:00以来经过的秒数。 Unix日期时间 获取 unix通过接...

  A12Hg3IkQc1x   2023年11月01日   63   0   0 Linux

main函数与进程终止 众所周知,main函数为unixlike系统上可执行文件的"入口",然而这个入口并不是指链接器设置的程序起始地址,后者通常是一个启动例程,它从内核取得命令行参数和环境变量值后,为调用main函数做好安排。main函数原型为: intmain(intargc,charargv[]); 这是ISOC和POSIX.1指义的,当然还存在下面几种不太标准的main原型: voidmain(intargc,charargv[]); voidmain(void); intmain(void); 不带argc&argv参数的表示不打算接受命令行参数;void返回值的表示不打算返...

  A12Hg3IkQc1x   2023年11月01日   111   0   0 Linux
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~