
Linux
文章平均质量分 67
smx_dd
这个作者很懒,什么都没留下…
展开
-
【Linux】共享内存
共享内存允许两个或更多进程访问同一块内存,当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改。因为所有进程共享同一块内存,共享内存在各种进程间通信方式中具有最高的效率。访问共享内存区域和访问进程独有的内存区域一样快,并不需要通过系统调用或者其它需要切入内核的过程来完成。同时它也避免了对数据的各种不必要的复制。因为系统内核没有对访问共享内存进行同步,必须提供自己的同步措施。例如,...原创 2019-03-16 16:05:37 · 407 阅读 · 0 评论 -
IO多路转接之select函数详解
IO多路转接之select:函数功能:监视描述符集合中的描述符状态变化。程序会在select函数等待,直到有描述符就绪。函数原型:int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);参数:nfds:当前描述符集合最大描述符+1read...原创 2018-12-17 18:44:46 · 714 阅读 · 0 评论 -
【Linux】线程基本概念及相关操作
程序的一个执行路线就叫做线程,线程是一个进程内部的一个控制序列。一个进程至少有一个线程。我们通过一幅图来了解下一线程和进程的关系我们通过图片可以清楚的理解为什么说线程是程序的一个执行路线。线程又被称作是轻量级进程。那么我们可以理解,在一个进程下,多个线程之间的很多资源是共享的,比如地址空间(包括代码段,数据段,如果定义一个函数或者全局变量,在各个线程都可以调用)。除此之外还共享以下...原创 2018-12-19 15:12:06 · 212 阅读 · 1 评论 -
IO多路转接之epoll详解
关于对epoll的概念我们可以参考《Linux高性能服务器编程》:epoll是特有的IO复用函数。它在实现上和select、poll有很大差异。首先,epoll使用一组函数来完成任务,而不是单个函数。其次,epoll把用户所关心的文件描述符上的事件放在内核里的一个事件表中,从而无须像select和poll那样每次调用都要重复传入文件描述符集或事件集(轮询)。但epoll需要使用一个额外的文件描述符...原创 2018-12-20 18:23:28 · 462 阅读 · 0 评论 -
【Linux】进程间关系和守护进程
进程组:进程组是一个或多个进程的集合。通常与一个作业相关联,可以接收来自同一终端的各种信号。我们知道,每个进程都有一个进程ID存放在task_struct中,进程组也有进程组ID,是唯一的。一个线程组拥有主线程,主线程ID就是线程组ID,类似地,进程组也有一个组长进程,组长进程的ID就是进程组ID。组长进程可以创建一个进程组,创建组中的进程,然后终止。只要某一个进程存在,进程组就存在,不会随着...原创 2018-12-26 19:03:06 · 195 阅读 · 0 评论 -
Linux 下获得系统时间
话不多说直接放代码。#include <stdio.h>#include <time.h>#include <sys/time.h> int main (void){ struct timeval tv; time_t time; char str_t[30] = {0}; gettimeofday (&a...原创 2018-12-31 17:33:43 · 329 阅读 · 0 评论 -
【Linux】管道
管道是Linux中进程间通信的一种方式,从一个进程连接到另一个进程的一个数据流称为一个管道。管道具有半双工,单向通信的特点。匿名管道#include <unistd.h>功能:创建一匿名管道原型int pipe(int fd[2]);参数fd:文件描述符数组,用于接收函数返回的两个文件描述符。其中fd[0]表示读端, fd[1]表示写端返回值:成功返回0,失败返回...原创 2019-02-28 17:01:48 · 307 阅读 · 0 评论 -
【Linux】静态库和动态库
静态库与动态库静态库文件后缀为.a程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。动态库文件后缀为.so程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码。在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到...原创 2019-02-27 22:43:20 · 228 阅读 · 0 评论 -
【Linux】基础IO
C标准库的文件IO接口FILE * fopen(const char * path,const char * mode);fopen函数为打开一个文件,path是要打开的文件名,mode则是打开文件的方式,返回类型为文件流指针,若打开失败则返回NULLmode的几种形式:r 以只读方式打开文件,该文件必须存在 r+ 以读/写方式打开文件,该文件必须存在 w...原创 2019-02-27 16:49:45 · 208 阅读 · 0 评论 -
【Linux】进程控制
进程创建fork()函数创建一个子进程#include <unistd.h>pid_t fork(void);返回值:子进程中返回0,父进程返回子进程id,出错返回-1。进程调用fork函数执行时,控制转移到内核中的fork代码,内核执行以下内容:1. 分配新的内存块和内核数据结构给子进程。2. 将父进程部分数据结构内容拷贝至子进程。3. 添加子进程到系统进程列...原创 2019-02-25 18:34:49 · 262 阅读 · 0 评论 -
【Linux】进程概念
在我们讲解进程之前,首先对操作系统做一个解释,操作系统是用来管理软硬件资源的,可以为应用程序提供一个良好的执行环境。在整个计算机中,操作系统的定位就相当于管理者。我们如何理解管理这个词呢,很简单,就是先描述(利用结构体)被管理的对象,然后将被管理的对象组织起来(利用像链表等高效的数据结构),总结一下就是:先描述,后组织。进程进程是程序的一个执行实例,是占用资源的基本单位。进程的所有信息...原创 2019-02-22 17:51:38 · 194 阅读 · 0 评论 -
【Linux】线程同步与互斥
线程互斥相关概念临界资源:多线程执行流共享的资源就叫做临界资源。临界区:每个线程内部,访问临界资源的代码,就叫做临界区。互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用。原子性:不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么未完成。大部分情况下,线程使⽤的数据都是局部变量,变量的地址空间在线程栈空间内,这种情况,变量归属单个线...原创 2019-03-03 23:45:55 · 210 阅读 · 0 评论