每日一练(二十二)
12.11 less 浏览文件内容
Linux中有时我们要产看一些文本文件,比如系统的配置文件,是以文本格式存储的,阅读配置文件可以更深入了解系统是如何工作的。而且脚本也是以这种格式存储的,less
命令就是用来浏览文件内容的:
less filename
less产看文件的时候,支持文件的上下滚动显示(more只能向前翻页)
而且less
支持在浏览文件的时候进行查找字符串:使用/字符串
即可,非常方便!
12.12 type 显示命令的类型
type
是一个shell内部命令,使用man type
是查不到的。
type
会显示命令的类型,使用:type command
由于type是一个shell内部命令,所以man是查不到的,要通过help来查看帮助文档。bash 有一个内建的帮助工具,可供每一个 shell 内建命令使用。输入“help”,接着是 shell 内部命令名:
12.13 Linux下进程间通信机制概述
Linux下进程间通信的机制是从UNIX继承而来的,UNIX进程间通信的标准的制定主要有两大主力:
- AT&T的贝尔实验室:对早期UNIX进程间通信机制进行扩展,形成System V IPC,但是进程间通信限制在单个计算机内
- BSD:突破单个计算机的进程间通信的限制,形成了基于套接字(socket)的进程间通信,可以用于网络中不同主机的进程间通信
所以Linux下的进程间通信是集百家之长,如下:
早期UNIX传统进程间通信方式:
- 无名管道(pipe):用于亲缘关系的进程间通信
- 有名管道(FIFO):允许无亲缘关系进程间通信
- 信号(signal):信号是在软件层次上对中断机制的模拟,进程收到信号的处理过程和中断请求的处理过程类似
System V IPC:
- 消息队列(message queue):克服来管道和信号通信方式中信息量有限的缺点,消息队列是消息的链接表
- 共享内存(share memory):共享内存是最高效的进程间通信方式,使得多个进程可以访问同一块内存空间,但是需要同步机制,比如互斥锁、信号量
- 信号量集(semaphore set):主要用于同步和互斥,经常于共享内存搭配使用
BSD开发的进程间通信机制:
- 套接字(socket):可以用于网络中不同主机直接的进程间通信,使用非常广泛
12.14 获取整数个字节
获取0X12345678
的各个字节!
有两种实现方法:
- 利用联合体union和struct来做,和判断大小端的方法类似
- 移位运算
代码如下:
#include <stdio.h>
union target {
unsigned long int data;
struct {
unsigned char a;
unsigned char b;
unsigned char c;
unsigned char d;
}byte;
};
int main(int argc, char* argv[])
{
union target t;
int i;
unsigned char byte;
t.data = 0X12345678;
printf("target is :0X%lx\n", t.data);
printf("Byte is :0X%x 0X%x 0X%x 0X%x\n", t.byte.a, t.byte.b, t.byte.c, t.byte.d);
for (i = 0; i < 4; i++) {
byte = (t.data >> i*8) & 0X000000ff;
printf("Byte%d is :0X%x\n", i, byte);
}
return 0;
}
12.15 函数原型、函数定义、函数声明 三者区别
函数原型:指明函数的名字,返回的类型,有几个参数,这几个参数是什么类型,不需要函数体,也不需要形式参数的名字,其中用分号作为原型的结束符
函数定义:必须要有完整的函数体、函数名字、形参的类型和名字
函数声明:只是告诉编译器该函数的存在,不分配空间,直到调用该函数时才分配