![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Unix & Linux
文章平均质量分 80
justaipanda
这个作者很懒,什么都没留下…
展开
-
Unix环境高级编程学习笔记(三) 文件与目录
文件系统(file system)Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。从图中可以看出,一个硬盘可以划分为很多个分区,而每个分区则可以有一个文件系统。每个文件系统由逻辑块的序列组成,一个逻辑盘空间一般划分为几个用途各不相同的部分,即引导块、超级块、原创 2012-08-02 21:01:00 · 3234 阅读 · 0 评论 -
Unix环境高级编程学习笔记(十一) 网络IPC:套接字
Socket 描述符socket 主要用于运行在不同服务器上的进程之间通信(服务器通过网络相连),也可以用于在同一服务器上的进程之间通信。而 Socket 描述符则是 Socket 的唯一标识,其本质是一种特殊的文件描述符。创建 Socket 描述符 的函数声明如下:int socket(int domain, int type, int protocol); domain 参数原创 2012-09-04 11:26:49 · 3330 阅读 · 0 评论 -
Unix环境高级编程学习笔记(八) 线程同步
从上一篇学习笔记中,我们了解到线程的特性,以及该如何创建线程,终止线程,设置线程属性等,今天我们将来看一看多线程模式下的资源竞争问题。互斥量当某个资源,存在多个线程对它进行访问时,为了维护数据的一致性,我们可以对它加锁,使得同一时间只有一个线程在访问该资源。其中,最常见的锁是互斥量phtread_mutext_t。该结构的初始化有两种方式,分为静态初始化和动态初始化。当该类型的变量被声明为原创 2012-08-23 16:26:24 · 2281 阅读 · 0 评论 -
Unix环境高级编程学习笔记(七) 多线程
线程概述线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。 为什么有了进程的概念后,还要再引入线程呢?使用多线原创 2012-08-23 12:13:47 · 5784 阅读 · 1 评论 -
Unix环境高级编程学习笔记(十) 进程间通信
匿名管道(pipes)匿名管道是一种未命名的、单向管道,通常用来在一个父进程和一个子进程之间传输数据。匿名的管道只能实现本地机器上两个进程间的通信,而不能实现跨网络的通信。使用pipes函数来创建管道:int pipe(int filedes[2]);该函数通过参数返回两个文件描述符,filedes[0] 用于读,filedes[1] 用于写,事实上,从 filedes[0] 中读原创 2012-09-01 17:11:31 · 2337 阅读 · 0 评论 -
Unix环境高级编程学习笔记(九) 高级IO
fcntl 记录锁很多时候,当我们有多个进程要访问同一个文件的时候,为了防止多进程访问导致的不一致,我们就要考虑进程间的同步问题了。fcntl是一个非常强大的函数,在这里我们可以使用它来给文件的某一个部分上锁。先来看一下它的声明:int fcntl(int filedes, int cmd, ... /* struct flock *flockptr */ );很显然,这是一个拥有原创 2012-08-28 17:30:19 · 7643 阅读 · 0 评论 -
Unix环境高级编程学习笔记(二) 文件IO
进程表谈linux下的文件操作,我们首先需要了解进程表,这是被每个进程所维护的一张打开文件的映射表,参照下图。索引值是文件描述符,与之相关联的节点包含fd flag以及一个指向file table的指针。其中fd flag主要包含close-on-exec标记,该标记的作用在于当开辟其他进程调用exec()族函数时,如果该标记的最后一位被置1,则在调用exec函数之前将为exec族函数原创 2012-08-01 16:28:27 · 3528 阅读 · 0 评论 -
Unix环境高级编程学习笔记(六) 信号机制
信号机制概述UNIX 系统的信号 ( signa l) , 是通知进程发生了异步事件的一种机制, 很多重要的应用进程都需要处理信 号。在 U N IX 系统中, 信号的主要用途是当系统出现 突发情况, 比如硬件异常、 用户键入了某些终端键都 会使系统给相关进程发送信号。 除了系统默认的信号处理和忽略以外, 用户还可以自定义信号处理函数, 以便执行一些必要操作, 比如程序执行异常应终止时, 可原创 2012-08-16 22:15:09 · 2207 阅读 · 0 评论 -
Unix环境高级编程学习笔记(一) 初窥
exec系函数Posix标准制定的exec系列的函数主要有六个,它们的声明新式如下:int execl(const char *path, const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const ch原创 2012-07-30 22:04:19 · 3574 阅读 · 2 评论 -
Unix环境高级编程学习笔记(五) 进程控制
fork 函数fork函数用于创建子进程,先看其声明方式:pid_t fork(void);该函数如果执行成功,则会返回两次,对于父进程,返回其子进程的ID,对于子进程,返回0。进程创建成功后,子进程会拷贝父进程的地址空间,包括数据空间,堆和栈。但这在许多情况下会不必要的耗费很多资源,所以现在的实现一般都采用了一种叫做“copy-on-write (COW)”的技术。在这种技术下,原创 2012-08-08 22:45:16 · 1984 阅读 · 1 评论 -
Unix环境高级编程学习笔记(四) 进程环境
C程序的内存布局首先看下面这个图,有个大致的概念:每一个C程序都有自己独立的地址空间,它们包含五个部分:1. 代码段(Text segment)存放程序的执行代码,即使在多进程的环境下,它也只有一份。2. 初始化数据段(Initialized data segment)例如初始化的全局变量int maxcount = 99;3. 未初始化的数据段(Unini原创 2012-08-05 22:27:34 · 2298 阅读 · 1 评论 -
Unix环境高级编程学习笔记(十二) 高级进程间通信
基于流的管道(STREAMS-Based Pipes)所谓基于流的管道实际上就是一种全双工管道,它必须在基于流的系统上才能实现,linux 默认对它是不支持的,而同样的逻辑,我们通常可以用基于 UNIX domain 的 socket 来实现,所以这里对它只作简单介绍。关于流机制,我在 Unix环境高级编程学习笔记(九) 高级IO中曾经介绍过,知道可以在流首处加入处理模块,对于基于流的原创 2012-09-08 18:48:34 · 3823 阅读 · 0 评论