EINTR信号介绍

code review的时候看新来的同事重复造了个轮子,使用open read write函数实现了与windows平台对应的函数CopyFile。不过他造的轮子有缺陷,没有处理信号EINTR。这篇文章通过EINTR为引子,来总结linux下与之相关的知识点,本篇文章将继续秉承想到哪写到哪的原则,由于平时大都写一些固定套路代码,如果在本文中有任何错误,欢迎指出。

从信号说起这篇文章中重点介绍了进程状态T(停止 traced or stoped),本篇开头先讲下进程状态D。

进程状态D

man ps手册中关于进程状态的描述:

PROCESS STATE CODES

Here are......

[LeetCode C++实现]78.Subsets

加班回来同事微信发来一道题目说这是整个leetcode中最棒的一道题目获益良多,本着我坚决不信的态度,尝试了两种平平无奇的解法后正打算开喷,在讨论区看到一种位运算的方法,好吧,我承认这是最棒的一道题。

Given a set of distinct integers, nums, return all possible subsets (the power set).

Note: The solution set must not contain duplicate subsets.

Example:

Input: nums = [1,2,3]

Output:

[

[3],

[1],

[......

[LeetCode C++实现]347. Top K Frequent Elements

Given a non-empty array of integers, return the k most frequent elements.

Example 1:

Input: nums = [1,1,1,2,2,3], k = 2

Output:

Example 2:

Input: nums = [1], k = 1

Output:

Note:

You may assume k is always valid, 1 ≤ k ≤ number of unique elements.

Your algorithm's time complexity......

[LeetCode C++实现]22.Generate Parentheses

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

For example, given n = 3, a solution set is:

[

"((()))",

"(()())",

"(())()",

"()(())",

"()()()"

]

首先这种类型的题目一眼看上去肯定是可以用递归的形式,递归的写法往往是一看就懂,......

从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这两个教程非常好,非常适......