Linux Programming
文章平均质量分 88
walker沃克
http://walkerdu.com
展开
-
解析器文件--Interpreter File
刚看了apue的关于解析器文件的部分,感受颇多,记录一下吧。解析器文件是一种文本文件,文件的第一行的形式:#! pathname [optional-argument];其中pathname指的时解析器名称,optional-argument是传递给解析器的参数。其实我们大家最熟悉的解析器文件就是shell脚本文件,shell脚本文件第一行都是#! /bin/sh。解析器文件是一种原创 2012-09-26 22:49:45 · 1921 阅读 · 0 评论 -
进程中的地址是从何而来
写了这么多年代码,地址这个东西每天都会使用,那么今天总结一下地址这个东西的由来。 本文参考了参考了《程序员的自我修养》一书. 先看看下面代码:#include <iostream>#include <cstdint>void fun(){ std::cout<<"this a fun() "<<std::endl;}uint32_t a = 1;int main(){ u原创 2016-06-30 09:56:23 · 3519 阅读 · 6 评论 -
Linux进程通信之POSIX消息队列
消息队列是Linux IPC中很常用的一种通信方式,它通常用来在不同进程间发送特定格式的消息数据。消息队列和之前讨论过的16.1管道和FIFO有很大的区别,主要有以下两点:l 一个进程向消息队列写入消息之前,并不需要某个进程在该队列上等待该消息的到达,而管道和FIFO是相反的,进程向其中写消息时,管道和FIFO必需已经打开来读,否则写进程就会阻塞(默认情况下)。l IPC的持续性不同。原创 2013-08-07 08:53:42 · 29419 阅读 · 18 评论 -
Linux进程通信之POSIX共享内存
前面已经讨论过Linux下个各种进程间的通信方式:管道,FIFO,消息队列,他们的共同特点就是通过内核来进行通信(假设POSIX消息队列也是在内核中实现的,因为POSIX标准并没有限定它的实现方式)。向管道,FIFO,消息队列写入数据需要把数据从进程复制到内核,从这些IPC读取数据的时候又需要把数据从内核复制到进程。所以这种IPC方式往往需要2次在进程和内核之间进行数据的复制,即进程间的通信必须借原创 2013-08-13 01:09:19 · 11350 阅读 · 1 评论 -
Linux进程通信之管道和FIFO
Linux进程间的通信可以简称为IPC(Interprocess Communication),前面说过的 Linux的同步工具也是属于IPC的一部分,这里我想说的是通常意义的进程间的实际数据通。1管道管道是最早的UNIX IPC,所有的UNIX系统都支持这个IPC通信机制。我们最常见到使用它的位置就是shell中使用的管道命令。管道IPC有两个特性:管道仅提供半双工的数据通信,即原创 2013-07-20 16:51:23 · 10110 阅读 · 3 评论 -
Linux和Windows下文件和目录的相关属性及操作
我们知道C/C++都提供了标准的文件I/O库以便我们对文件进行读写。但我们无法通过标准的I/O库对文件系统进行更进一步的操作。因为这设计到具体操作系统中文件系统的设计。在Linux和Windows程序库下面都有一个sys目录,里面包含系统相关的头文件,如下:Windows下:C:\Program Files\Microsoft Visual Studio 9.0\VC\include\sy原创 2013-11-30 17:52:35 · 10353 阅读 · 1 评论 -
Linux线程同步之互斥量(mutex)
互斥量(也称为互斥锁)出自POSIX线程标准,可以用来同步同一进程中的各个线程。当然如果一个互斥量存放在多个进程共享的某个内存区中,那么还可以通过互斥量来进行进程间的同步。互斥量,从字面上就可以知道是相互排斥的意思,它是最基本的同步工具,用于保护临界区(共享资源),以保证在任何时刻只有一个线程能够访问共享的资源。互斥量类型声明为pthread_mutex_t数据类型,在中有具体的定义。原创 2013-06-25 23:31:07 · 22109 阅读 · 1 评论 -
Linux进程同步之记录锁(fcntl)
记录锁相当于线程同步中读写锁的一种扩展类型,可以用来对有亲缘或无亲缘关系的进程进行文件读与写的同步,通过fcntl函数来执行上锁操作。尽管读写锁也可以通过在共享内存区来进行进程的同步,但是fcntl记录上锁往往更容易使用,且效率更高。记录锁的功能:当一个进程正在读或修改文件的某个部分是,它可以阻止其他进程修改同一文件区。对于这个功能阐述我认为有三点要解释的:记录锁不仅仅可以用来同步不同原创 2013-06-28 16:04:53 · 8765 阅读 · 4 评论 -
Linux线程同步之读写锁(rwlock)
读写锁和互斥量(互斥锁)很类似,是另一种线程同步机制,但不属于POSIX标准,可以用来同步同一进程中的各个线程。当然如果一个读写锁存放在多个进程共享的某个内存区中,那么还可以用来进行进程间的同步,和互斥量不同的是:互斥量会把试图进入已保护的临界区的线程都阻塞;然而读写锁会视当前进入临界区的线程和请求进入临界区的线程的属性来判断是否允许线程进入。相对互斥量只有加锁和不加锁两种状态,读写锁有三原创 2013-06-26 00:07:10 · 27650 阅读 · 8 评论 -
Linux进程同步之POSIX信号量
POSIX信号量是属于POSIX标准系统接口定义的实时扩展部分。在SUS(Single UNIX Specification)单一规范中,定义的XSI IPC中也同样定义了人们通常称为System V信号量的系统接口。信号量作为进程间同步的工具是很常用的一种同步IPC类型。在《UNIX网络编程 卷2:进程间通信》的前言第二页与第1版的区别中作者提到“POSIX IPC函数时大势所趋,因为他们比原创 2013-07-01 22:14:15 · 19657 阅读 · 1 评论 -
Linux进程通信之System V共享内存
前面已经介绍过了POSIX共享内存区,System V共享内存区在概念上类似POSIX共享内存区,POSIX共享内存区的使用是调用shm_open创建共享内存区后调用mmap进行内存区的映射,而System V共享内存区则是调用shmget创建共享内存区然后调用shmat进行内存区的映射。对每个System V共享内存区,内核会维护一个shmid_ds的数据结构,Linux 2.6.18 中的原创 2013-08-13 22:21:02 · 3838 阅读 · 0 评论 -
Linux进程通信之System V消息队列
System V消息队列是Open Group定义的XSI,不属于POSIX标准。System V IPC的历史相对很早,在上个世70年代后期有贝尔实验室的分支机构开发,80年代加入System V的系统内核中,后来商用UNIX系统基本都加入了System V IPC的功能。System V消息队列相对于POSIX消息队列的区别主要是:POSIX消息队列的读操作总是返回消息队列中优原创 2013-08-08 08:53:41 · 5969 阅读 · 2 评论 -
Linux进程同步之System V 信号量
System V信号量是不属于POSIX标准,它属于SUS(Single UNIX Specification)单一规范中的扩展定义。它和POSIX信号量一样都提供基本的信号量功能操作。System V信号量相对于POSIX信号量最大的区别是在信号量的操作复杂度。在POSIX信号量中说过,根据信号量取值(代表可用资源的数目)的不同,POSIX信号量可以分为:二值信号量:信号量的值只原创 2013-07-04 00:26:53 · 7541 阅读 · 3 评论 -
Linux线程同步之条件变量
条件变量变量也是出自POSIX线程标准,另一种线程同步机制,。主要用来等待某个条件的发生。可以用来同步同一进程中的各个线程。当然如果一个条件变量存放在多个进程共享的某个内存区中,那么还可以通过条件变量来进行进程间的同步。每个条件变量总是和一个互斥量相关联,条件本身是由互斥量保护的,线程在改变条件状态之间必须要锁住互斥量。条件变量相对于互斥量最大的优点在于允许线程以无竞争的方式等待条件的发生。当原创 2013-06-25 23:49:33 · 8155 阅读 · 0 评论 -
C标准I/O缓冲区:全缓冲和行缓冲
ISO C标准I/O提供了全缓冲和行缓冲全缓冲:在进行I/O操作时,只有当I/O缓冲区被填满时,才进行真正的I/O操作。所以对于全缓冲的缓冲区可由标准I/O例程自动刷新,即当缓冲区填满时,还有一种方法就是调用函数fflush进行刷新。行缓冲:在I/O操作时,输入输出遇到换行符时进行,进行真正的I/O操作。对于行缓冲,标准I/O每一行缓冲区的长度是固定的,所以只要填满了缓冲区,即使没有遇到换原创 2012-09-24 11:02:00 · 3571 阅读 · 1 评论 -
线程的分离状态(detached state)
说到线程的分离状态,我认为,之所以会有这个状态,是因为系统对某些线程的终止状态根本不感兴趣导致的。我们知道,进程中的线程可以调用:int pthread_join(pthread_t tid, void **rval_ptr);来等待某个线程的终止,获得该线程的终止状态,并收回所占的资源。如果对线程的返回状态不感兴趣,可以将rval_ptr设置为NULL。也可以调用:int原创 2012-10-04 23:40:53 · 2665 阅读 · 1 评论 -
进程信号的未决状态(pending status)
这两天看了apue有关进程信号的部分,觉得未决状态这个词很是不一般,呵呵。一开始当我看到这个词,我不理解,什么意思呢,读了好几遍。不知道是书里面讲的晦涩难懂,还是脑子越来越不行了,就是没有搞明白。后来看到后面的例子,然后再回想一下,终于清楚了!下面记录一下吧。定义:信号产生和传递之间的时间间隔内,称此信号是未决的;简单的说就是:一个已经产生的信号,但是还没有传递给任何进程,此时该信号的状态原创 2012-10-04 21:07:31 · 3486 阅读 · 0 评论 -
TCP连接的建立和关闭详解
本文梳理了TCP连接的建立和关闭的一些细节,以及TCP连接的各种特殊状态的说明原创 2017-04-07 10:29:18 · 5524 阅读 · 0 评论