
linux
文章平均质量分 82
coolwriter
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
makefile模板
CC = gccCXX = g++LINK = g++CFLAGS = -g -Wall -O2TARGET = mk0SRCS = $(wildcard *.cpp)SRCS += $(wildcard *.c)CXX_OBJS = $(patsubst %.cpp, %.o, $(wildcard *.cpp))C_OBJS =...原创 2018-08-05 21:34:10 · 440 阅读 · 0 评论 -
阻塞IO与非阻塞IO
阻塞IO, 当前进程因不满足一些条件,而被挂起,即阻塞,cpu改去服务其它进程, read一个普通文件,就马上执行,read一个鼠标,可是鼠标没有动,于是就阻塞了, 阻塞的好处, 利于os性能的发挥,cpu发挥高,虽然个体的费了点时间,但是总的效率得到了提高,阻塞在多路IO的时候,缺陷就出来了,比如2路IO分别要读键盘和鼠标,阻塞在鼠标,可是鼠标没动,然后键盘输入也没用, 非阻塞IO...原创 2018-05-22 17:08:27 · 486 阅读 · 0 评论 -
多线程死锁
一、死锁的定义多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而,并发执行也带来了新的问题——死锁。所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。下面我们通过一些实例来说明死锁现象。先看生活中的一个实例,2个人一起吃饭但是只有一双筷子,2人轮流吃(同时拥有2只筷子才能吃)。某一个时候,一个拿了左筷子,一人拿了右筷子,2个人都同...转载 2018-05-21 11:32:54 · 179 阅读 · 0 评论 -
信号之block,pending,handler
信号的概念为了理解信号,先从我们最熟悉的场景说起: 1. ⽤户输⼊命令,在Shell下启动⼀个前台进程。 2. ⽤户按下Ctrl-C,这个键盘输⼊产⽣⼀个硬件中断。 3. 如果CPU当前正在执⾏这个进程的代码,则该进程的⽤户空间代码暂停执⾏,CPU从⽤户态 切换到内核态处理硬件中断。 4. 终端驱动程序将Ctrl-C解释成⼀个SIGINT信号,记在该进程的PCB中(也可以说发送了...转载 2018-05-07 10:42:55 · 403 阅读 · 0 评论 -
大端小端与网络字节序
在裘宗燕翻译的《程序设计实践》里,这对术语并没有翻译为“大端”和小端,而是“高尾端”和“低尾端”,这就好理解了:如果把一个数看成一个字符串,比如11223344看成"11223344",末尾是个'\0','11'到'44'个占用一个存储单元,那么它的尾端很显然是44,前面的高还是低就表示尾端放在高地址还是低地址,它在内存中的放法非常直观,如下图:#include <iostream>...原创 2018-05-13 14:59:26 · 2624 阅读 · 0 评论 -
Linux线程(一)
注意:在Linux上线程函数位于libpthread共享库中,因此在编译时要加上-lpthread选项。 1.线程概念 1)线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运...转载 2018-05-05 19:57:17 · 187 阅读 · 0 评论 -
可重入函数 、线程安全
一、线程安全 线程安全:如果一个函数在同一时刻可以被多个线程安全的调用,就称该函数是线程安全的。不需要共享时,请为每个线程提供一个专用的数据副本。如果共享非常重要,则提供显式同步,以确保程序以确定的方式操作。通过将过程包含在语句中来锁定和解除锁定互斥,可以使不安全过程变成线程安全过程,而且可以进行串行化。 很多函数并不是线程安全的,因为他们返回的数据是存放在静态的内存缓冲区中的。通过修改接口,由调...转载 2018-05-05 19:30:53 · 309 阅读 · 0 评论 -
Linux信号
1.信号的基本概念: ①信号是很短的消息 ②标准信号:标准信号没有给参数、消息或是其他相随的信息留有空间 ③通常使用一个数字来标识一个信号 ④信号可以被发送到一个进程或一组进程。 2.信号的目的: ①让进程知道已经发生了一个特定的事件 ②强迫进程执行它自己代码中的信号处理程序 a.很多应用程序提供自己的信号处理程序 b.系统也会定义一些缺省的信号处理程序信号举例: “Ctrl+c”组合键 在Lin...转载 2018-05-05 19:17:39 · 158 阅读 · 0 评论 -
atexit函数
atexit函数函数名: atexit 头文件:#include#include<stdio.h>#include<stdlib.h>void fun1(){ printf("fun1():");}void fun2(){ printf("fun2():");}void fun3(){ printf("fun3():");}v...转载 2018-05-05 19:16:28 · 252 阅读 · 0 评论 -
守护进程
守护进程-----也就是常说的Daemon进程,是linux后台的服务进程,是一个生存期较长的进程,独立于终端并且周期性的执行某种任务或等待处理某些任务。守护进程在系统引 导时载入时启动,在系统关闭时终止。linux下的许多系统服务都是守护进程完成的。守护进程还能完成许多系统任务,如作业规划进程crond,打印进程lqd(d就是 ...转载 2018-05-05 14:37:39 · 1001 阅读 · 0 评论 -
exec系列函数
一,exec替换进程映像 在进程的创建上Unix采用了一个独特的方法,它将进程创建与加载一个新进程映象分离。这样的好处是有更多的余地对两种操作进行管理。当我们创建了一个进程之后,通常将子进程替换成新的进程映象,这可以用exec系列的函数来进行。当然,exec系列的函数也可以将当前进程替换掉。例如:在shell命令行执行ps命令,实际上是shell进程调用fork复制一个新的子进程,在利用...转载 2018-05-04 20:58:36 · 4526 阅读 · 1 评论 -
rand和srand随机函数的用法
函数说明 : rand()的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定的范围里可看成是随机的。原创 2017-11-27 17:30:00 · 629 阅读 · 0 评论 -
进程间通信(IPC)
进程间通信(IPC)介绍进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。以Linux中的C语言编程为例。一、管道管道,通常指无名管道,是 UNIX 系统IPC最古老...转载 2018-05-28 09:44:27 · 260 阅读 · 0 评论 -
linux内存映射mmap原理分析
linux内存映射mmap原理分析转自:http://blog.csdn.net/yusiguyuan/article/details/23388771 内存映射,简而言之就是将用户空间的一段内存区域映射到内核空间,映射成功后,用户对这段内存区域的修改可以直接反映到内核空间,同样,内核空间对这段区域的修改也直接反映用户空间。那么对于内核空间<---->用户空间两者之间需要大量数据传输等...转载 2018-05-29 10:41:44 · 13702 阅读 · 0 评论 -
epoll IO多路复用模型实现机制
在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序。在大数据、高并发、集群等一些名词唱得火热之年代,select和poll的用武之地越来越有限,风头已经被epoll占尽。本文便来介绍epoll的实现机制,并附带讲解一下select和poll。通过对比其不同的实现机制,真正理解为何epoll能实现高并发。select...转载 2018-08-05 16:53:02 · 322 阅读 · 0 评论 -
回调函数
C语言中的回调函数(Callback Function)1 定义和使用场合回调函数是指 使用者自己定义一个函数,实现这个函数的程序内容,然后把这个函数(入口地址)作为参数传入别人(或系统)的函数中,由别人(或系统)的函数在运行时来调用的函数。函数是你实现的,但由别人(或系统)的函数在运行时通过参数传递的方式调用,这就是所谓的回调函数。简单来说,就是由别人的函数运行期间来回调你实现的函数。...转载 2018-08-04 10:33:15 · 263 阅读 · 0 评论 -
LRU(Least recently used,最近最少使用)算法
常见的缓存算法 LRU (Least recently used) 最近最少使用,如果数据最近被访问过,那么将来被访问的几率也更高。 LFU (Least frequently used) 最不经常使用,如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小。 FIFO (Fist in first out) 先进先出, 如果一个数据最先进入缓存中,则应该最早淘汰...原创 2018-07-24 09:46:05 · 2828 阅读 · 0 评论 -
linux 内存分配 伙伴算法 slab算法
本节,我将介绍linux系统物理内存分配时所用到的技术——伙伴系统和slab缓存。 伙伴系统 使用场景:内核中很多时候要求分配连续页,为快速检测内存中的连续区域,内核采用了一种技术:伙伴系统。原理:系统中的空闲内存总是两两分组,每组中的两个内存块称作伙伴。伙伴的分配可以是彼此独立的。但如果两个小伙伴都是空闲的,内核将其合并为一个更大的内存块,作为下一层次上某个内存块的伙伴。...转载 2018-07-09 15:45:04 · 982 阅读 · 0 评论 -
linux内存管理问题
一、Linux的虚拟内存管理有几个关键概念1.每个进程有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址 2.虚拟地址可通过每个进程的页表与物理地址进行映射,获得真正物理地址 3.如果虚拟地址对应的物理地址不在物理内存中,则产生缺页中断,并真正分配物理地址,同时更新进程的页表;如果此时物理内存已耗尽,则根据内存替换算法淘汰部分页面至物理磁盘中。二、Linux进程虚拟地址分...原创 2018-06-27 10:47:35 · 294 阅读 · 0 评论 -
pthread _cond_wait线程条件等待
通常,和pthread _cond_wait 配对使用的有pthread_cond_signal , 同时还有用于pthread_cond_t初始化的pthread_cond_init,销毁的pthread_cond_destroy函数,还有用于加锁保护的pthread_mutex_lock和pthread_mutex_unlock,稍后会对为什么进行加锁做解释。 初始化条件变量int p...转载 2018-06-12 16:29:14 · 19284 阅读 · 0 评论 -
linux多线程
一、pthread_create原型:int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *),void...原创 2018-05-29 16:17:26 · 499 阅读 · 0 评论 -
linux多线程服务器
上一篇文章使用fork函数实现了多进程并发服务器,但是也提到了一些问题:fork是昂贵的。fork时需要复制父进程的所有资源,包括内存映象、描述字等;目前的实现使用了一种写时拷贝(copy-on-write)技术,可有效避免昂贵的复制问题,但fork仍然是昂贵的;fork子进程后,父子进程间、兄弟进程间的通信需要进程间通信IPC机制,给通信带来了困难;多进程在一定程度上仍然不能有效地利用系统资源;...转载 2018-05-29 15:55:58 · 2689 阅读 · 1 评论 -
linux多进程服务器示例
服务器端#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdlib.h>#include <stdio.h>原创 2018-05-29 15:33:11 · 395 阅读 · 0 评论 -
多进程服务器
前面的话 服务器按处理方式可以分为迭代服务器和并发服务器两类。平常用C写的简单Socket客户端服务器通信,服务器每次只能处理一个客户的请求,它实现简单但效率很低,通常这种服务器被称为迭代服务器。 然而在实际应用中,不可能让一个服务器长时间地为一个客户服务,而需要其具有同时处理 多个客户请求的能力,这种同时可以处理多个客户请求的服务器称为并发服务器,其效率很 高却实现复杂。在实际应用中,并发服务...转载 2018-05-29 15:17:11 · 1687 阅读 · 1 评论 -
fork()、vfork()、clone()的区别
因为生活的复杂,这是一个并行的世界,在同一时刻,会发生很多奇妙的事情,北方下雪,南方下雨,这里在吃饭,那边在睡觉,有人在学习,有人在运动,所以这时一个多彩多姿的世界,每天都发生着很多事情,所以要想很好的表现这个世界,协调完成一件事儿,就得用到多进程或者多线程。所以进程是程序猿一定会接触到的一个东西,他能使我们的程序效率提高,高效的完成多任务,并行执行。下面主要看看产生进程或线程的三个...转载 2018-05-29 14:59:22 · 319 阅读 · 0 评论 -
fopen()函数中参数mode的取值
fopen()函数中参数mode的取值FILE * fopen(const char * path,const char * mode);参数mode字符串则代表着流形态。mode有下列几种形态字符串:r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该文件必须存在。rb+ 读写打开一个二进制文件,只允许读写数据。rt+ 读写打开一个文本文件原创 2017-11-05 15:13:02 · 1625 阅读 · 0 评论 -
scanf 字符串分配内存问题
1.定义字符数组#include <stdio.h>#include <stdlib.h>int main(void) { // your code goes here char str[20]; scanf("%s",str); printf("%s",str); return 0;}完美运行,但是得说明一点,这...原创 2017-11-04 18:09:26 · 999 阅读 · 3 评论 -
IO之阻塞、非阻塞、同步、异步总结
IO之阻塞、非阻塞、同步、异步总结1、前言 在网络编程中,阻塞、非阻塞、同步、异步经常被提到。unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一遍时候,似懂非懂,没有深入理解。网上有详细的分析:http://blog.csdn.net/historyasamirror/article/details/5778378。我结合网上转载 2017-10-15 18:08:19 · 340 阅读 · 0 评论 -
Linux信号简单入门
1.信号简介软中断信号 Signal,简称信号,用来通知进程发生了异步事件,进程之间可以互相通过系统调用 kill 等函数来发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件,但是要注意信号只是用来通知进程发生了什么事件,并不给该进程传递任何数据,例如终端用户键入中断键,会通过信号机制停止当前程序。2.信号的分类信号其实是一种软件中断,它为程序提供了处理异步事件的方法。异转载 2017-09-09 12:09:23 · 464 阅读 · 0 评论 -
设备注册与驱动注册
1.platform虚拟总线总线设备驱动模型主要包含总线、设备、驱动三个部分,总线可以是一条真实存在的总线,例如USB、I2C等典型的设备。但是对于一些设备(内部的设备)可能没有现成的总线。Linux 2.6内核中引入了总线设备驱动模型。总线设备驱动模型与之前的三类驱动(字符、块设备、网络设备)没有必然的联系。设备只是搭载到了总线中。在linux内核中假设存在一条虚拟总线,称之为platform总线原创 2017-09-17 17:54:03 · 4847 阅读 · 0 评论 -
Linux进程通信共享内存
1)共享内存是进程间共享数据的一种最快的方法。 一个进程向共享的内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。2)使用共享内存要注意的是多个进程之间对一个给定存储区访问的互斥。若一个进程正在向共享内存区写数据,则在它做完这一步操作前,别的进程不应当去读、写这些数据原创 2017-09-08 11:38:54 · 385 阅读 · 0 评论 -
Linux常用命令详解
目 录引言 1一、安装和登录 2(一) login 2(二) shutdown 2(三) halt 3(四) reboot 3(五) install 4(六) mount 4(七) umount 6(八) chsh 6(九) exit转载 2017-08-30 17:30:46 · 1546 阅读 · 0 评论 -
make: 警告:检测到时钟错误。您的创建可能是不完整的。
make: 警告:检测到时钟错误。您的创建可能是不完整的。这个问题没关系,时间不一致而已。原创 2017-09-14 16:16:47 · 1266 阅读 · 0 评论 -
linux消息队列
消息队列提供了一种在两个不相关的进程之间传递数据的简单高效的方法原创 2017-09-06 18:24:08 · 733 阅读 · 0 评论 -
fprintf()函数的运用
fprintf()用于文件操作 #include <stdio.h> int fprintf( FILE *stream, const char *format, ... );fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.原创 2017-09-06 16:26:14 · 78187 阅读 · 1 评论 -
linux pipe 无名管道
管道的概念:管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。调用pipe系统函数即可创建一个管道。有如下特质: 1. 其本质是一个伪文件(实为内核缓冲区) 2. 由两个文件描述符引用,一个表示读端,一个表示写端。 3. 规定数据从管道的写端流入管道,从读端流出。原创 2017-09-05 11:12:35 · 630 阅读 · 0 评论 -
linux命名管道
●无名管道 主要用于父进程与子进程之间,或者两个兄弟进程之间。在linux系统中可以通过系统调用建立起一个单向的通信原创 2017-09-05 17:46:52 · 2737 阅读 · 0 评论 -
linux fork函数详解
引言一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一转载 2017-09-03 21:26:23 · 456 阅读 · 0 评论 -
细说ip地址与同一网段
大学的时候有上过计算机网络的课程,IP这块也有一些接触,但向来不是很好学的我,对于一些问题似是而非的态度,感觉知道,但具体的又说不上,今天就花了点时间彻底把这个问题搞清楚,写在这也算是做个记录吧!接下来我们举例说明,如何去判断A和B两个IP是否在同一网段。原创 2017-09-03 09:49:22 · 23330 阅读 · 0 评论 -
linux虚拟内存
Linux 的虚拟内存管理有几个关键概念:每个进程有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址虚拟地址可通过每个进程上页表与物理地址进行映射,获得真正物理地址如果虚拟地址对应物理地址不在物理内存中,则产生缺页中断,真正分配物理地址,同时更新进程的页表;如果此时物理内存已耗尽,则根据内存替换算法淘汰部分页面至物理磁盘中。基于以上认识转载 2017-09-18 17:36:56 · 702 阅读 · 0 评论