从linux信号说起

以前的笔记里写过linux信号相关的使用,当时是读apue TLPI等书籍时记录的关于信号的一些编程知识。最近又改了一些shell脚本的bug,本篇笔记权当个人总结,主要从修改过的典型bug串起各知识点,文章延续之前想到哪写到哪的风格,如果内容有误,欢迎留言指出,不胜感激。

进程状态

D 不可中断 uninterruptible sleep (usually IO)

R 运行 runnable (on run queue)

S 中断 sleeping

T(t) 停止 traced or stopped

Z 僵死 a defunct ("zombie") process

重点......

[LeetCode C++实现]406. Queue Reconstruction by Height

在leetcode.com上随机选择到这个题目,讲道理,第一遍没看懂题目啥意思,有很多人也在吐槽题目读不懂I don't understand the question. Reconstruct the queue to what?直到我打开讨论区看了一眼别人的python代码,如果你也看不懂这个题目描述,我结合中文版的描述加以完善:

现在有一个队列,每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。但现在输入的序列是随机打乱的,编写一个算法来重建这个队列。

输入队列:

[[7,0], [4,4], [7,1], [5,0], ......

exec家族execvp函数使用趣事

公司一小兄弟问我:execvp函数执行后不返回,如何将申请的内存释放掉呢?还专门发我一个不知道从哪个英文网站copy的例子,问我使用valgrind怎么没有检测出来内存泄露,你不是吹valgrind吹的天花乱坠吗?这个例子仅仅为了说明这个问题,如果换成myargs[0] = "wc";这种写法,就不会存在本篇文章了。

完整例子如下:

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <string.h>

#include <fcn......

地址空间随机化

在阅读操作系统导论一书,书中第二章有个例子如下:

common.h

#ifndef __common_h__

#define __common_h__

#include <sys/time.h>

#include <sys/stat.h>

#include <assert.h>

double GetTime() {

struct timeval t;

int rc = gettimeofday(&t, NULL);

assert(rc == 0);

return (double) t.tv_sec + (double) t.tv_usec......

日常开发笔记总结(五)

周末在家收拾东西,找到一本刚入职时记的笔记,重新读一遍记录部分内容方便查阅。

获取下标为n的元素地址

当时记录在笔记本上旁边有个大大的问号,为何不使用下标形式呢?

#include <stdio.h>

//获取下标为n的元素地址

#define ELEM_PTR(base,n,esize) ((void *)(((char *)base + n*esize)))

int main()

{

int arr[] = {1,2,3,4,5,6,7,8,9,10};

printf("address of fifth elem = %p.\n",ELEM_PTR(arr,5,4......

go语言初学记录

部门计划年底开始转到go,难得这个周末在家没事,学习go圣经这里记录下与C C++ lua中的异同点。对比主要涉及ANSI C 、C++98、 C++11(小部分)、 lua,不涉及c++14 c++17 c++20等新特性。在学习go的过程中一个下意识的举动就是想某某特性C/C++ lua里对应怎么实现?

学习的直观感受是go中有的特性,C/C++ lua都有,但大部分情况下没有go用起来简单、方便。语法和使用上C/C++远比go复杂的多,go入门快,学习性价比高。初学go,文章中的观点如有错误,欢迎评论指出。本文部分例子来源于go-tour和go by example这两个教程非常好,非......

日常开发笔记总结(四)

在geeksforgeeks上看到一篇介绍shared_ptr的文章,里面提到了Cyclic Dependency。

维基百科中也有详细的介绍Circular dependency

维基百科中提到一种循环依赖关系错误的例子:

a.h

#ifndef A_H

#define A_H

class B; //forward declaration

cl......

[LeetCode C++实现]46.Permutations

46.Permutations

一口气刷了3道简单题目,正当得意忘形的时候遇到了一道求全排列的题,竟然一时间不知道如何下手。

由于恰好看algorithm中有实现next_permutation,因此直接使用stl中的现有实现:

方法一:

next_permutation

class Solution {

public:

vector<vector<int> > permute(vector<int> &num) {

vector<vector<int> > ans;

sort(num.begin(), num......

KMP算法简介与应用

延期复工在家无聊,刷了几道leetcode的题,目前进度111 / 1340,很多题目虽能折腾折腾AC,但运行速度和内存占用往往很难达到top 10%。以leetcodeimplement strstr为例,要实现子串查找最简单的就是暴力求解,两层for循环搞起来。当然两层for循环的基础上还能有小的优化。

class Solution {

public:

int strStr(string haystack, string needle) {

int hsize = haystack.size();

int nsize = needle.size();

for(int i = 0;......

c++filt用法介绍

解析变量类型

typedef char * pstring;

const pstring cstr = 0; //cstr是指向char的常量指针

const pstring *ps; //ps是一个指针,它的对象是指向char的常量指针

上面两条声明语句的基本数据类型都是const pstring,const是对给定类型的修饰。pstring实际上指向char的指针,因此const pstring就是指向char的常量指针,而非指向常量字符的指针。

遇到类型别名时,人们往往会错误地尝试把类型别名展开,以理解该语句的含义,这是错误的!

例如:

typedef char *......