Linux
文章平均质量分 63
g33_N
这个作者很懒,什么都没留下…
展开
-
Linux进程间通信——信号量
信号量:是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。 信号量的操作: 创建信号量:int createSem(int nsems); 获取信号量:int getSem()原创 2017-03-10 22:44:55 · 693 阅读 · 0 评论 -
Linux进程间通信之消息队列
进程间通信 消息队列实现comm.h#ifndef _COMM_H_#define _COMM_H_#include#include#include#include#include#define PATHNAME "."#define PROJ_ID 0x666#define SIZE 128#define SERVER_TYPE 1#define CLIENT_TYPE 2struct msg原创 2017-02-28 18:08:16 · 461 阅读 · 0 评论 -
Linux中signal()函数详解
signal()函数: 第一个参数是要捕捉的信号(查看信号:kill -l,9号SIGKILL信号不能被捕捉); 第二个参数表示我们要对信号进行的处理方式。 信号的处理方式一般有三种: (1)忽略此信号(SIG_IGN):#include<stdio.h>#include<signal.h>int main(){ signal(2,SIG_IGN); while(1原创 2017-04-14 19:06:58 · 8351 阅读 · 1 评论 -
Linux中模拟实现sleep函数
sleep函数原理:当前进程挂起指定时间后继续运行 1、进程挂起 pause():进程挂起,直到收到一个信号,只有出错返回。 2、计时机制() alarm():设定⼀一个闹钟,也就是告诉内核在seconds秒之后给当前进程发 SIGALRM信号, 该信号的默认处理动作是终⽌止当前进程。这个函数的返回值是0或者是以前设定的闹钟时间还余下 的秒数. 具体实现代码如下:#include原创 2017-04-27 17:45:46 · 804 阅读 · 0 评论 -
线程安全与可重入函数
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的,或者多个线程之间的切换不会导致该接口的执行结果存在二义性。 线程安全问题都是由全局变量及静态变量引起的。 若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写原创 2017-04-18 16:54:04 · 317 阅读 · 0 评论 -
kill(),raise(),abort()函数向进程发送信号
信号的产生有3种方式: (1)通过终端快捷键产生信号(比如Ctrl+c,Ctrl+\等); (2)调用系统函数向进程发送信号(kill() ,raise(),abort()); (3)由软件条件产生信号(alarm(),SIGALRM); 下面我们详细介绍(2)调用系统函数向进程发送信号: kill():向指定进程发送信号 int kill(pid_t pid,int sig)进程一:原创 2017-04-14 21:00:11 · 4454 阅读 · 1 评论 -
守护进程(精灵进程)&调用fork一次和两次的区别
守护进程也称精灵进程(Daemon),是运⾏在后台的一种特殊进程。它独⽴立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它自成进程组,自成绘画,不受用户登录注销的影响。凡是TPGID⼀栏写着-1的都是没有控制终端的进程,也就是守护进程创建一个守护进程需要调用setsid()函数:该函数调用成功时返回新创建的Session的id(其实也就是当前进程的id),出错返回-1。注意,调用这个函原创 2017-05-10 17:14:18 · 916 阅读 · 0 评论 -
CentOSvim配置
配置vim,首先进入~/.vrmc文件,在文件中添加如下命令:1.设置行号 set nu2. 语法高亮,可以加线条,也可整行高亮,颜色可调 set coursorLine hi CursorLine cterm=NONE ctermbg=darkred ctermfg=white hi CursorColumn cterm=NONE ctermbg=darkred原创 2017-02-17 19:40:59 · 458 阅读 · 0 评论 -
简易HTTP服务器
HTTP协议的主要特点如下: 1.支持客户/服务器模式。 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。 3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 4.无连接:无连原创 2017-07-18 12:27:17 · 3046 阅读 · 2 评论 -
多线程编程
关于线程: 1、线程是调度的基本单位 2、进程是系统分配资源的基本单位 3、线程是在进程内部(地址空间)运行的 4、在Linux下,使用进程模拟线程,并没有真正意义上的线程,也称轻量级进程(LWP) 5、线程之间共享的部分: 地址空间、函数调用、全局变量、文件描述符表、每种信号的处理方式、当前工作目录、用户id,组id原创 2017-03-23 15:40:28 · 259 阅读 · 0 评论 -
死锁的产生与避免
死锁产生的原因: 1、竞争资源,系统提供的资源数量有限,不能满足每个进程的需求; 2、多到程序运行时,进程推进顺序不合理; 产生死锁的必要条件: 1、互斥条件:资源是独占的且排他使用。进程互斥使用资源,即任意时刻一个资源只能给一个进程使用,其他进程若申请一个资源,而该资源被另一个进程占有时,则申请者等待,直到资源被占用者释放。 2、不可剥夺条件:进程所使用的原创 2017-03-29 22:02:51 · 369 阅读 · 0 评论 -
关于find命令
初涉Linux,先来整理一下有关find的几个简单的命令1.按照名称查找find -name test.cfind -name test.c2.查找当前目录下所有文件名以.c 结尾的文件,注意*的写法(要么写在双引号之内,要么加\)find -name \*.cfind -name "*.c"3.按照时间查找 1)以小时原创 2016-07-14 13:53:39 · 397 阅读 · 0 评论 -
Linux进程间通信之内存共享
共享内存:使得多个进程可以访问同⼀一块内存空间,是最快的可⽤的IPC形式。是针对其他通信机制运⾏行效率较低⽽而设计的。往往与其它通信机制,如信号量结合使⽤用,来达到进程间的同步及互斥。 内存共享的实现: 1、创建共享内存 使用函数shmget,原型为: int shmget(key_t key, size_t size, int shmflg); 参数key:key_t key原创 2017-03-16 19:31:34 · 483 阅读 · 0 评论 -
Linux模拟shell的实现
shell用fork建立新进程,用exex在新进程中运行用户指定的程序,最后shell用wait命令等待新进程结束。wait系统调用同时从内核取得退出状态或者信号序号以告知子进程是如何结束的。1 #include 2 #include 3 #include 4 #include 5 #include 6 int main() 7 { 8 printf("[g33@localhost myShell]$"); 9 fflush(stdout); 10原创 2017-02-23 18:25:29 · 636 阅读 · 0 评论 -
Linux匿名管道和命名管道模拟实现
命名管道:Client.c 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 int main() 8 { 9 int fd = open(".原创 2017-02-23 18:19:58 · 623 阅读 · 0 评论 -
atexit()注册终止函数和t权限
1.atexit()函数 atexit()注册终止函数,函数注册的函数应为不接受任何参数的void函数,exit()调用函数的顺序与函数注册的顺序正好相反。1 #include 2 #include 3 void fun1() 4 { 5 printf("this is fun1()\n"); 6 } 7 void fun2() 8 { 9原创 2017-02-19 20:52:47 · 947 阅读 · 0 评论 -
centOS常见的进程调度算法
无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行,常见的进程调度算法有:FIFO(先进先出调度算法),时间片轮转算法(RR),最高级优先级算法(HPF),多级队列反馈法;1.先进先出算法(FIFO):按照进程进入就绪队列的先转载 2017-02-19 12:29:03 · 1866 阅读 · 0 评论 -
task_strcut结构体
在Linux中每一个进程都是由task_strcut结构体定义的,要想了解每一个进程的详细信息,首先就得清楚task_struct结构体。structtask_struct { volatile long state; //说明了该进程是否可以执行,还是可中断等信息unsigned long flags; //Flage是进程号,在调用fork()时给出intsi转载 2017-02-17 20:18:29 · 391 阅读 · 0 评论 -
Linux-进度条
要想写出一个完整的进度条,首先得明白进度条的实现原理,其中主要有3点,如下:(1)关于回车和换行:回车:\r ,表示光标重新回到本行开头,r->return; 换行:\n,表示光标跳到下一行,n->newline;(2)关于fllush(stdout):到在printf()函数之后使用fllush(stdout)意思是将要输出的内容立刻输出;当使用printf原创 2017-02-16 19:55:33 · 597 阅读 · 0 评论 -
atime,mtime,ctime以及find指令
在Linux中使用stat命令来查看文件的详细信息。 如图所示会出现3类时间,分别是Access,Modify,Change。Access time:表示我们最后一次访问文件的时间;使用cat 命令访问文件,此时Atime会改变,而其他两个时间不会改变,如图所示: Modify time:表示我们最后一次修改文件的时间;使用echo命令修改文件内容,Mtime时间会改变原创 2017-02-15 12:20:21 · 603 阅读 · 0 评论 -
shell脚本实现希尔排序
#!/bin/bashecho "please input a number list"read -a arrsize=${#arr[@]}gap=$sizewhile [ $gap -gt 1 ]do ((gap=(gap/3)+1)) for((i=gap;i<size;i+=gap)) do let temp=${arr[$i]}原创 2017-08-07 21:20:43 · 610 阅读 · 0 评论