
linux系统编程
文章平均质量分 85
big_bit
这个作者很懒,什么都没留下…
展开
-
linux系统编程之进程(一):进程与程序
(转自)作者:mickole 出处:http://www.cnblogs.com/mickole/本节目标:什么是程序什么是进程进程数据结构进程与程序区别与联系一,什么是程序?程序是完成特定任务的一系列指令集合二,什么是进程?从用户的角度来看进程是程序的一次动态执行过程从操作系统的核心来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位转载 2016-04-26 17:04:46 · 290 阅读 · 0 评论 -
进程间通信之XSI IPC
XSI IPC源自于系统V的IPC功能。有三种IPC我们称作XSI IPC,即消息队列、信号量以及共享存储器,它们之间有很多相似之处。1、标识符和键每个内核中的IPC结构(消息队列、信号量或共享存储段)都用一个非负整数的标识符(identifier)加以引用。例如,为了对一个消息队列发送或取消息,只需要知道其队列标识符。与文件描述符不同,IPC标识符不是小的整数。当一个IP转载 2016-05-19 10:37:16 · 531 阅读 · 0 评论 -
线程之线程的创建
在传统的UNIX进程模型中,每个进程只有一个控制线程。从概念上讲,这与基于线程的模型中只包含一个线程是相同的。在POSIX线程(pthread)的情况下,程序开始运行时,它也是以单进程中的单个控制线程启动的,在创建多个控制线程以前,程序的行为与传统的进程并没有什么区别。新增的线程可以通过调用pthread_create函数创建。#include int pthread_create(pt转载 2016-05-08 20:57:26 · 496 阅读 · 0 评论 -
线程之线程终止
如果进程中的任一线程调用了exit、_Exit或者_exit,那么整个进程就会终止。与此类似,如果信号的默认动作是终止进程,那么,把该信号发送到线程会终止整个进程。单个线程可以通过下列三种方式退出,在不终止整个进程的情况下停止它的控制流。(1)线程只是从启动例程中返回,返回值是线程的退出码。(2)线程可以被同一进程中的其他线程取消。(3)线程调用pthread_ex转载 2016-05-09 18:26:22 · 586 阅读 · 0 评论 -
线程之线程同步
前言当多个控制线程共享相同的内存时,需要确保每个线程看到一致的数据视图。如果每个线程使用的变量都是其他线程不会读取或修改的,那么就不会存在一致性问题。同样地,如果变量是只读的,多个线程同时读取该变量也不会有一致性问题。但是,当某个线程可以修改变量,而其他线程也可以读取或修改这个变量的时候,就需要对这些线程进行同步,以确保它们在访问变量的存储内容时不会访问到无效的数值。当一个线程修改转载 2016-05-09 21:25:33 · 1846 阅读 · 0 评论 -
XSI IPC之消息队列实例
学习apue消息队列, 想搞明白几个函数用法, 就写了一个小程序让自己感受一下IPC发送端:#include #include #include #include /* 发送端:测试IPC之消息队列有关函数 */#define BUFSIZE 1024struct my_msg{ long my_type; //msg type ch原创 2016-05-20 17:19:40 · 498 阅读 · 0 评论 -
进程间通信之消息队列
消息队列是消息的链接表,存放在内核中并由消息队列标识符标识。在本节中,我们把消息队列简称为队列(queue),其标识符为队列ID(queue ID)。msgget用于创建一个新队列或打开一个现存的队列。msgsnd将新消息添加到队列尾端。每个消息包含一个正长整型类型字段,一个非负长度以及实际数据字节(对应于长度),所有这些都在将消息添加到队列时,传送给msgsnd。msgrcv用于从队列中转载 2016-05-20 17:29:39 · 314 阅读 · 0 评论 -
Linux进程间通信——使用信号量
转自:http://blog.youkuaiyun.com/ljianhui/article/details/10243617这篇文章将讲述别一种进程间通信的机制——信号量。注意请不要把它与之前所说的信号混淆起来,信号与信号量是不同的两种事物。有关信号的更多内容,可以阅读我的另一篇文章:Linux进程间通信——使用信号。下面就进入信号量的讲解。一、什么是信号量为了防止出现因转载 2016-05-21 19:03:17 · 503 阅读 · 0 评论 -
未完成的作业
1.查询atoi等函数,并且实现原创 2016-05-19 10:06:45 · 314 阅读 · 0 评论 -
线程同步-生产者消费者问题
在进行多线程编程时,难免还要碰到两个问题,那就线程间的互斥与同步:线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放原创 2016-05-09 21:26:53 · 17008 阅读 · 1 评论 -
标准IO与文件IO 的区别
先来了解下什么是标准IO以及文件IO。标准IO:标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义,具有一定的可移植性。标准IO库处理很多细节。例如缓存分配,以优化长度执行IO等。标准的IO提供了三种类型的缓存。(1)全缓存:当填满标准IO缓存后才进行实际的IO操作。 (2)行缓存:当输入或输出中遇到新行符时,标准I转载 2016-07-01 21:44:17 · 27278 阅读 · 1 评论 -
errno、stderr、perror函数和strerror函数
errno表示错误代码。 记录系统的最后一次错误代码。代码是一个int型的值,在errno.h中定义。系统每一次出错都会对应一个出错代码,例如12表示“Cannot allocate memory"。stderr是linux(unix)标准出错输出。linux中的一个进程启动时,都会打开三个文件:标准输入、标准输出和标准出错处理。通常这三个文件都与终端联系。这三个文件分别对应文件描述符转载 2016-07-27 19:42:55 · 8716 阅读 · 1 评论 -
【IPC通信】命名管道FIFO
前面学习过(匿名)管道(见前面博客),匿名管道只能用于有亲缘关系的各个进程之间,为了解决这个限制,UNIX系统进而引入了FIFO,也称为有名管道(named pipe)。FIFO(first in, first out),是一个半双工数据流,也即一个半双工管道。不同于匿名管道的是,每个FIFO有一个路径名(或文件名)与之关联,也即FIFO的名字。有了名字,无亲缘关系的进程间就可以通过管道进转载 2016-05-20 19:56:50 · 358 阅读 · 0 评论 -
sigsuspend()函数 解释
1)头文件:#include 2)一个保护临界区代码的错误实例:(sigprocmask()和pause()实现)#include #include #include void handler(int sig) //信号处理函数的实现{ printf("SIGINT sig");}int main(){ sigset_t new,o转载 2016-05-08 16:37:59 · 13781 阅读 · 1 评论 -
进程间通信之FIFO
FIFO有时被称为命名管道。管道只能由相关进程使用,这些相关进程的共同祖先进程创建了管道。但是,通过FIFO,不相关的进程也能交换数据。FIFO是一种文件类型(参考http://www.cnblogs.com/nufangrensheng/p/3501533.html)。stat结构(http://www.cnblogs.com/nufangrensheng/p/3501385.html)转载 2016-05-18 21:38:19 · 535 阅读 · 0 评论 -
linux系统编程之进程(二):进程生命周期与PCB(进程控制块)
(转自)作者:mickole 出处:http://www.cnblogs.com/mickole/本节目标:进程状态变迁进程控制块进程创建进程撤消终止进程的五种方法一,进程状态变迁进程的三种基本状态就绪(Ready)状态当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。执行(Runnin转载 2016-04-26 17:13:35 · 657 阅读 · 0 评论 -
linux系统编程之进程(三):进程复制fork,孤儿进程,僵尸进程
(转自)作者:mickole 出处:http://www.cnblogs.com/mickole/本节目标:复制进程映像fork系统调用孤儿进程、僵尸进程写时复制一,进程复制(或产生) 使用fork函数得到的子进程从父进程的继承了整个进程的地址空间,包括:进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设置、进程优先级、进程组号、当前工作目录转载 2016-04-26 19:46:55 · 375 阅读 · 0 评论 -
linux系统编程之进程(四):进程退出exit,_exit区别即atexit函数
(转自)作者:mickole 出处:http://www.cnblogs.com/mickole/一,进程终止有5种方式:正常退出:从main函数返回调用exit调用_exit异常退出:调用abort由信号终止二,exit和_exit区别:关于_exit(): #include void _转载 2016-04-26 19:52:17 · 435 阅读 · 0 评论 -
linux 时间函数解释
从系统时钟获取时间方式time_t time(time_t* timer)得到从标准计时点(一般是1970年1月1日午夜)到当前时间的秒数。clock_t clock(void)得到从程序启动到此次函数调用时累计的毫秒数。函数名称: localtime函数原型: struct tm *localtime(const time_转载 2016-05-10 11:02:43 · 757 阅读 · 0 评论 -
线程之线程取消(pthread_cancel)
基本概念pthread_cancel调用并不等待线程终止,它只提出请求。线程在取消请求(pthread_cancel)发出后会继续运行,直到到达某个取消点(CancellationPoint)。取消点是线程检查是否被取消并按照请求进行动作的一个位置.与线程取消相关的pthread函数int pthread_cancel(pthread_t thread)发送终止信号给t转载 2016-05-09 16:08:27 · 1110 阅读 · 0 评论 -
线程控制-sigwait函数和相关函数解释
首先看这篇文章学习线程和信号:http://www.cnblogs.com/clover-toeic/p/4126594.html然后我写了一个小程序#include #include #include /* 测试与线程有关的信号函数 */sigset_t new_mask , old_mask;void *thread_func( void *arg );in原创 2016-05-12 09:06:47 · 1560 阅读 · 0 评论 -
高级IO-fcntl记录锁
首先学习文章:http://www.cnblogs.com/nufangrensheng/p/3554168.html 和http://blog.youkuaiyun.com/anonymalias/article/details/9197641然后写代码验证#include #include /* 测试记录锁相关的操作 */int main(int argc , char *ar原创 2016-05-12 22:20:50 · 383 阅读 · 0 评论 -
C语言文件读写操作中缓冲区问题和setbuf函数详解
清除和设置文件缓冲区(1).清除文件缓冲区函数: int fflush(FILE *stream); int flushall(); fflush()函数将清除由stream指向的文件缓冲区里的内容,常用于写完一些数据后,立即用该函数清除缓冲区,以免误操作时,破坏原来的数据。 flushall()将清除所有打开文件所对应的文件缓冲区。(2).设置文件缓冲区函数 void setbu转载 2016-05-03 15:53:46 · 10077 阅读 · 2 评论 -
墙上时钟时间 ,用户cpu时间 ,系统cpu时间
一、 墙上时钟时间 ,用户cpu时间 ,系统cpu时间定义与联系时钟时间(墙上时钟时间wall clock time):从进程从开始运行到结束,时钟走过的时间,这其中包含了进程在阻塞和等待状态的时间。用户CPU时间:就是用户的进程获得了CPU资源以后,在用户态执行的时间。系统CPU时间:用户进程获得了CPU资源以后,在内核态的执行时间。 进程的三种状态为转载 2016-05-03 17:07:13 · 3477 阅读 · 0 评论 -
APUE笔记:alarm和pause竞争
笔记批注:APUE 10.10节 函数alarm和pause。在书P269 有这样一段话:(3) 在第一次调用alarm和pause之间有一个竞争条件。在一个繁忙的系统,有可能在我们调用pause之前超时,并调用了信号处理程序,如果发生了这种情况,则在调用pause后,如果没有捕捉到其他信号,调用者将被永远挂起。 而解决的办法是用longjmp和setjmp。我看了代码后,就想着可不可以使原创 2016-05-05 19:10:32 · 444 阅读 · 0 评论 -
IO多路复用之select总结
1、基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。 (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。 (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用转载 2016-05-17 16:57:40 · 401 阅读 · 0 评论 -
sigprocmask函数总结
首先看它的作用:一个进程的信号屏蔽字规定了当前阻塞而给该进程的信号集。调用函数sigprocmask可以检测或更改其信号屏蔽字,或者在一个步骤中同时执行这两个操作。#include int sigprocmask( int how, const sigset_t *restrict set, sigset_t *restrict oset );返回值:若成功则返回0,若出错原创 2016-05-07 16:29:33 · 21282 阅读 · 10 评论 -
多线程的代价及上下文切换
多线程的代价 使用多线程往往可以获得更大的吞吐率和更短的响应时间,但是,使用多线程不一定就比单线程程序跑的快,这取决于我们程序设计者的能力以及应用场景的不同。不要为了多线程而多线程,而应考虑具体的应用场景和开发实力,使用多线程就是希望能够获得更快的处理速度和利用闲置的处理能力,如果没带来任何好处还带来了复杂性和一些定时炸弹,那还傻逼了吗?只有在使用多线程给我们带来的好处转载 2016-08-04 19:41:27 · 12890 阅读 · 0 评论