Linux系统编程
小虾米_2018
专注于C、C++、嵌入式系统、网络、驱动编程~
展开
-
linux时间和日期函数
历史上,UNX系统使用过两种不同的时间值日历时间。该值是自协调世界时( Coordinated Universal Time,UTC)1970年1月1日00:000这个特定时间以来所经过的秒数累计值(早期的手册称UTC为格林尼治标准时间)。这些时间值可用于记录文件最近一次的修改时间等。系统基本数据类型time_t用于保存这种时间值。 进程时间。也被称为CPU时间,用以度量进程使用的中央处理器...原创 2019-04-19 17:55:24 · 1864 阅读 · 0 评论 -
linux线程与fork
当线程调用fork函数时,就为子进程创建了整个进程地址空间的副本,子进程通过继承整个地址空间的副本,也会将父进程的互斥里、读写锁、条件变里的状态继承过来。也就是说,如果父进程中互斥里是锁着的,那么在子进程中互斥里也是锁着的(尽管子进程自己还没有来得及lock),这是非常不安全的,因为不是子进程自己锁住的,它无法解锁。实例代码:#include "apue.h"#include &l...原创 2019-04-25 10:24:57 · 709 阅读 · 0 评论 -
linux高级IO
同步、异步,阻塞和非阻塞等概念同步和异步同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由调用者主动等待这个调用的结果。而异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有...原创 2019-06-03 12:07:22 · 522 阅读 · 0 评论 -
Linux进程
程序和进程程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu、内存、打开的文件、设备、锁....) 进程,是一个抽象的概念,与操作系统原理联系紧密。进程是活跃的程序,占用系统资源。在内存中执行。(程序运行起来,产生一个进程) 站在程序员的角度来说:进程是执行一系列指令的过程。 站在操作系统的角度来说:进程是系统资源分配的基本单位。 程序 → 剧本(纸) 进程 → 戏(...原创 2019-06-03 12:07:50 · 729 阅读 · 0 评论 -
进程组、会话、守护进程
进程组概念和特性进程组,也称之为作业。BSD于1980年前后向Unix中增加的一个新特性。代表一个或多个进程的集合。每个进程都属于一个进程组。在waitpid函数和kill函数的参数中都曾使用到。操作系统设计的进程组的概念,是为了简化对多个进程的管理。 当父进程,创建子进程的时候,默认子进程与父进程属于同一进程组。进程组ID==第一个进程ID(组长进程)。所以,组长进程标识:其进程组ID...原创 2019-05-28 12:55:26 · 278 阅读 · 0 评论 -
fork和vfork区别
fork()与vfock()都是创建一个进程,那他们有什么区别呢?总结有以下三点区别:fork ():子进程拷贝父进程的数据段,代码段 ;vfork ():子进程与父进程共享数据段 fork ()父子进程的执行次序不确定;vfork 保证子进程先运行,在调用exec或exit之前与父进程数据是共享的,在它调用exec或exit 之后父进程才可能被调度运行。如果在调用这两个函数之前子进程...原创 2019-05-21 12:39:54 · 1322 阅读 · 0 评论 -
PCB与进程分配资源、虚拟内存与物理内存、进程共享
一、PCB与进程分配资源PCBPCB(progress control block),进程控制块。这里先不讨论PCB是什么,其实进程这个概念本身就是一个很难理解的概念,当一个可执行程序被系统执行了以后,就变成了一个进程。那么这个进程中到底有什么东西呢,系统究竟给这个进程分配了哪些资源?另外,进程在内存中的存储是怎么样的? 对于一个进程,它在被执行前其实是一个可执行程序。这个程序是被放在磁...原创 2019-05-17 13:59:44 · 4880 阅读 · 3 评论 -
时序竞态
时序竞态什么是时序竞态?将同一个程序执行两次,正常情况下,前后两次执行得到的结果应该是一样的。但由于系统资源竞争的原因,前后两次执行的结果有可能得到不一样的结果,这个现象就是时序竞态。pause函数函数原型:int pause(void);函数作用:进程调用pause函数时,会造成进程主动挂起(处于阻塞状态,并主动放弃CPU),并且等待信号将其唤醒。返回值:我们知道,信号的...原创 2019-05-23 16:14:46 · 382 阅读 · 0 评论 -
linux线程属性
线程属性本节作为指引性介绍,linux下线程的属性是可以根据实际项目需要,进行设置,之前我们讨论的线程都是采用线程的默认属性,默认属性已经可以解决绝大多数开发时遇到的问题。如我们对程序的性能提出更高的要求那么需要设置线程属性,比如可以通过设置线程栈的大小来降低内存的使用,增加最大线程个数。 typedef struct{ int detachstate; //线程的分离状态 ...原创 2019-05-28 12:54:14 · 1800 阅读 · 0 评论 -
Linux线程详解
并行和并发的区别1. 并发(concurrency):在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥。(并发是指同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上有多个进程被同时执行的效果--宏观上并行,针对单核处理器)互斥:进程间相互排斥的使用临界资源的现象,就叫互斥。 ...原创 2019-06-03 12:06:33 · 39090 阅读 · 8 评论 -
ftok()函数解析
ftok消息队列、信号灯、共享内存常用在Linux服务端编程的进程间通信环境中。而此三类编程函数在实际项目中都是用System V IPC函数实现的。System V IPC函数名称和说明如下表15-1所示。表15-1 System V IPC函数 消息队列 信号灯 共享内存区 头文件 ...原创 2019-04-15 15:48:53 · 1336 阅读 · 0 评论 -
理解 Linux 的硬链接与软链接
Linux 的文件与目录现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程创建信息的逻辑单元可被多个进程并发使用。在 UNIX 系统中,操作系统为磁盘上的文本与图像、鼠标与键盘等输入设备及网络交互等 I/O 操作设计了一组通用 API,使他们被处理时均可统一使用字节流方式。换言之,UNIX 系统中除进程之外的一切皆是文件,而 Linux 保持了这一特性。为了便于文件的管理...原创 2019-03-25 21:55:45 · 420 阅读 · 0 评论 -
fork两次如何避免僵尸进程
在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD 信号处理函数调用waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程,无法正常结束,此时即使是root身份kill-9也 不能杀死僵尸进程。补救办法是杀死僵尸进程的父进程(僵尸进程的父进程必然存在),僵尸进程成为"孤儿进程",过继给1号进程init,init...原创 2019-03-31 16:28:52 · 1481 阅读 · 1 评论 -
Linux中exec族函数解析
1.exec函数说明fork函数是用于创建一个子进程,该子进程几乎是父进程的副本,而有时我们希望子进程去执行另外的程序,exec函数族就提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新程序的内容替换了。另外,这里的可执行文件既可以是二进制文件,也可以...原创 2019-04-01 16:09:19 · 665 阅读 · 0 评论 -
信号
信号的概念信号在我们的生活中随处可见, 如:古代战争中摔杯为号;现代战争中的信号弹;体育比赛中使用的信号枪......他们都有共性:1. 简单 2. 不能携带大量信息 3. 满足某个特设条件才发送。 信号是信息的载体,Linux/UNIX 环境下,古老、经典的通信方式, 现下依然是主要的通信手段。 Unix早期版本就提供了信号机制,但不可靠,信号可能丢失。Berkeley 和 AT&a...原创 2019-06-03 12:06:59 · 999 阅读 · 0 评论 -
进程间通信方式(管道、信号、信号量、共享内存、消息队列)
进程间通信(IPC)介绍Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。...原创 2019-06-03 12:06:24 · 1619 阅读 · 0 评论 -
linux线程同步
同步概念所谓同步,即同时起步,协调一致。不同的对象,对“同步”的理解方式略有不同。如,设备同步,是指在两个设备之间规定一个共同的时间参考;数据库同步,是指让两个或多个数据库内容保持一致,或者按需要部分保持一致;文件同步,是指让两个或多个文件夹里的文件保持一致。等等 而编程中、通信中所说的同步与生活中大家印象中的同步概念略有差异。“同”字应是指协同、协助、互相配合。主旨在协同步调,按预定的先后...原创 2019-06-03 12:06:44 · 1517 阅读 · 0 评论 -
Linux进程与线程的区别(经典)
Linux进程与线程的区别转载 2019-04-17 21:44:02 · 717 阅读 · 0 评论 -
无锁编程技术及实现
1.基于锁的编程的缺点多线程编程是多CPU系统在中应用最广泛的一种编程方式,在传统的多线程编程中,多线程之间一般用各种锁的机制来保证正确的对共享资源(shareresources)进行访问和操作。 在多线程编程中只要需要共享某些数据,就应当将对它的访问串行化。比如像++count(count是整型变量)这样的简单操作也得加锁,因为即便是增量操作这样的操作,,实际上也是分三步进行的:读、改、...原创 2019-08-05 14:34:34 · 1013 阅读 · 0 评论