0%

解决什么问题
进程或线程同步

如何解决?
一个整数n,不允许小于0,小于0就会阻塞程序运行,两个操作来控制: sem_post(3) 每次+1, sem_wait(3) 每次-1。比如初始化时候n=0, 一个线程执行sem_wait(),发现n是0,如果-1,就会小于0,但信号量不允许小于0,就等着。另一个线程执行sem_post(),将n+1,此时n==1,sem_wait()之后,n=0, 操作可以进行,第一个线程就可以继续往后了。

阅读全文 »

1. 介绍

1
2
#include <unistd.h>
pid_t setsid(void);

创建新的会话,并设进程组ID为新的会话ID

阅读全文 »

1. 简介

都是IO多路复用。

可以在一个进程或线程中同时管理多个IO的事件,在相当于在一个点去等待这些事件,收集到事件后,再分别处理。

阅读全文 »

1. 介绍

ROS(Robot Opearting System)是一套开源的机器人操作系统(并不直接跑在裸机上,需要依附ubuntu),对各种硬件设备进行了抽象,提供了方便二次开发的基础环境,包括底层设备控制、消息传递机制、常用函数和接口、包管理。相当于提供了一整套控制机器人的开发框架,用户通过ros提供的各种基础设施,方便的实现自己的功能。主要提供python和C++接口。

阅读全文 »

1
2
3
4
#include <stdio.h>
extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;
  • 通常linux程序启动后都会有这3个打开的输入输出流,叫标准I/O流。
  • 对应的文件描述符为STDIN_FILENO(0),STDOUT_FILENO(1),STDERR_FILENO(2)
  • 文件描述符是内核的,文件句柄FILE 是库对文件描述符的封装,子进程可以继承文件描述符,但不继承文件句柄。
  • 通常 stdin,stdout,stderr 用宏来实现的,对它们直接赋值不具有可移植性,标准做法是通过freopen(3)来重新打开。
  • stderr无缓冲,stdout是行缓冲
阅读全文 »

1. 基本概念

1.1. 4表5链

防火墙由很多规则组成,每个规则匹配产生不同的动作,这些规则按功能共划分出4个表,一个表由多个相同功能的规则组成:

  1. raw 控制NAT表中连接跟踪机制的启用状况
  2. mangle 修改数据
  3. filter 过滤
  4. nat 地址转换

在数据经过的各个路径上,设置了5个关键卡点,每个卡点上按顺序有多个规则,共组成5条规则链:

  1. PREROUTING: 外部数据刚进入
  2. INPUT: 经过路由决策,要进入本机的数据
  3. OUTPUT: 本机要出去的数据
  4. FORWARD: 经过路由决策,经过本机转发的数据
  5. POSTROUTING: 发送出去的数据
阅读全文 »

1
2
3
4
5
6
7
8
9
10
#include <unistd.h>

int dup(int oldfd);
int dup2(int oldfd, int newfd);

#define _GNU_SOURCE /* See feature_test_macros(7) */
#include <fcntl.h> /* Obtain O_* constant definitions */
#include <unistd.h>

int dup3(int oldfd, int newfd, int flags);

目的
给旧的文件描述符再添一个文件描述符,两个描述符都能指向同一个文件

dup(): 就给旧的再打开一个文件描述符
dup2(oldfd, newfd):指定一个新的描述符,新的如果原先有文件,就先关闭
dup3(oldfd, newfd, flags): 可以指定O_CLOEXEC标志

1. 语法

1
2
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)

常用选项

  • -F fs fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
  • -v var=value 赋值一个用户定义变量,将外部变量传递给awk
  • -f scripfile 从脚本文件中读取awk命令

1
awk 'BEGIN{ commands } pattern{ commands } END{ commands }'