cha6.进程
练习1
编译程序清单6-1中的程序(mem_segments.c),使用1s-l命令显示可执行文件的大小。虽然该程序包含一个大约10MB的数组,但可执行文件大小要远小于此,为什么?
- 局部变量,分配在栈中,运行时分配
练习2
编写一个程序,观察当使用 longjmp()函数跳转到一个已经返回的函数时会发生什么?
- 开优化会无限递归,不开优化也有可能无限递归
编译程序清单6-1中的程序(mem_segments.c),使用1s-l命令显示可执行文件的大小。虽然该程序包含一个大约10MB的数组,但可执行文件大小要远小于此,为什么?
编写一个程序,观察当使用 longjmp()函数跳转到一个已经返回的函数时会发生什么?
请使用标准文件IO系统调用(open()和lseek())和off_t数据类型修改程序清单5-3中的程序。将宏_FILE_OFFSET_BITS的值设置为64进行编译,并测试该程序是否能够成功创建一个大文件。
将xxx64改为xxx,off64_t改为off_t,可以创建大文件(使用 -m32编译)
1 | // #define _LARGEFILE64_SOURCE |
5-2.编写一个程序,使用O_APPEND标志并以写方式打开一个已存在的文件,且将文件偏移量置于文件起始处,再写入数据。数据会显示在文件中的哪个位置?为什么?
tee命令是从标准输入中读取数据,直至文件结尾,随后将数据写入标准输出和命令行参数所指定的文件。(44.7节讨论FIFO时,会展示使用tee命令的一个例子。)请使用IO系统调用实现tee命令。默认情况下,若已存在与命令行参数指定文件同名的文件,tee命令会将其覆盖。如文件已存在,请实现-a命令行选项
tee-a file在文件结尾处追加数据。(请参考附录B中对getopt)函数的描述来解析命令行选项。
1 |
|
不引用c的库函数,直接使用系统调用对文件进行读写,不引入
stdio.h
1 | class Solution { |
ab两个字符串在同一个位置分隔开,若 $ pre_a + suf_b $ 或 $ pre_b + suf_a $ 是回文串,则返回true,否则返回false
这个规则相当于ab截取相同且任意长的前缀并交换,看交换后是否存在回文
我的思路是先比较a的第i位与b的倒数第i位是否想等,找到第一次不相等的位置i,此时可以从第i位分割,判断b的剩余部分是否是回文,或者从len-i-1处分割,判断a的剩余部分是否是回文
若都不是,再比较b的第i位与a的倒数i位,找到第一个不满足的i,再比较a,b的剩余部分
1 | class Solution { |
1 | class Solution { |
遍历所有奇数,使其小于两端,记录操作数1
遍历所有偶数,使其小于两端,记录操作数2
返回最小值
1 | class Solution { |
1 | class Solution { |
1 | class Solution { |
1 | class Solution { |
1 | class Solution { |
1 | class Solution { |
如果默认先纵向走,再横向走,那么当从外部到z时,需要先横向走再纵向走
如果默认先横向走,再纵向走,那么当从z到外部时,需要先纵向走再横向走
参考go-ethereum官网的Private Networks文档搭建了一个私有链,并总结出几个脚本,可以半自动化地实现geth网络的搭建,脚本已上传至github仓库DLCCB
geth命令,用于生成初始两个节点的账户,使用创世块配置文件对两个账户进行初始化puppeth 用于生成创世块的配置文件,这个命令是交互式的,编写了一个puppeth.txt作为其输入,默认生成一个基于pow的区块链bootnode 用于生成启动bootnodesed 非交互式的文本编辑器,用于读取生成的账户的区块链地址,写入puppeth.txt中,使得puppeth工具能为初始的两个节点分配一定的以太币awk,用于对文本的处理1 | mkdir node1 node2 |
1 | class Solution { |
1 | class Solution { |
昨天第一个思路是用排序,找出最大的m个数,这m个数恰好将数组分成k个部分,发现不可行。
然后暴力搜索,超时了,暴搜时考虑添加隔板,其中left_value表示当前搜索下标i之前的分组平均值