
linux
文章平均质量分 57
dangzhangjing97
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
linux:进程间通信方式-管道、消息队列、共享内存
进程间通信的目的1.数据传输 一个进程需要将它的数据发送给另外一个进程2.资源共享 多个进程之间共享同样的资源3.通知事件 一个进程需要向另外一个进程或另一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知进程)4.进程控制 有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异...原创 2018-09-03 17:44:17 · 408 阅读 · 0 评论 -
linux:gcc编译error:“collect2: ld returned 1 exit status” (Undefined reference )
在linux环境下编译一个工程,不管怎样编译,总是出现以下错误:-bash-4.1$ gcc test.c consumers_producers.c/tmp/ccQzS4PV.o: In function `main':test.c:(.text+0x92): undefined reference to `pthread_create'test.c:(.text+0xf2): u...原创 2018-05-02 17:16:44 · 78305 阅读 · 2 评论 -
linux:进程间通信之信号量(semop & semget & semctl & P & V)
1.信号量怎样实现同步互斥? 信号量并不是让进程间能够直接的发送字符串数据,而是通过自身计数器的性质,来完成进程之间的同步互斥(通过使用信号量来完成令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域,临界区域是指执行数据更新的代码需要独占式的执行,而信号量则是让一个临界区同一时间只有一个线程在访问他,即就是说信号量是用来协调进程对共享资源的访问的一种手段)ps:信号量其实就是...原创 2018-05-01 17:27:17 · 1182 阅读 · 0 评论 -
linux:进程间通信之消息队列
1.消息队列是什么? 消息队列是一个IPC对象,是操作系统提供的一个链表,消息队列提供了一个从一个进程向另一个进程发送一块数据块的方法,每个数据块都被认为是有一个类型,接受者进程接收的数据块可以有不同类型 ps:此处的类型并不是int、char类型2.消息队列的特点?1.可用于双向通信;2.生命周期随内核;3.可用于随意内核; 因为消息队列的生命周期随内核,...原创 2018-04-18 23:02:50 · 332 阅读 · 0 评论 -
进程组&作业&会话&守护进程
一、进程组1.什么是进程组?ps:同进程组中的所有进程,都可以接收来自统一终端的各种信号 一个或多个进程的集合2.组长进程&组长进程ID组长进程:是一个进程组中的组长,每个进程组都有一个组长进程 组长进程ID:进程组ID=进程ID,如果某个进程的这两个ID是相同的,那此进程就是组长进程3.查询组长进程和组长进程ID的命令ps axj|gr...原创 2018-04-22 23:03:02 · 297 阅读 · 0 评论 -
linux:信号之阻塞信号(sigprocmask&sigpending)&捕捉信号(sigaction&signal&pause)
在上一篇博客中,我们认识信号,在此篇博客中我们具体的来看看信号 上一篇博客链接:https://blog.youkuaiyun.com/dangzhangjing97/article/details/79969176一、阻塞信号1.信号的相关概念 信号递达:实际执行信号的处理动作就是信号递达 信号未决:信号从产生到递达之间的状态就是信号未决(未决就是没有解决) 进程可以选...原创 2018-04-17 21:30:26 · 1121 阅读 · 1 评论 -
LInux:进程等待之wait() & waitpid()
进程等待 之前说,子进程退出,父进程如果不管不顾,就可能造成“僵尸进程”的问题,进而造成内存泄露,进而,进程一旦变成僵尸状态,杀人不眨眼的”kill -9”也无能为力,因为谁也没有办法杀死一个已经死去的进程,最后,父进程派给子进程的任务完成的如何,我们需要知道,如子进程运行完成,结果是还是不对,或者是否正常退出,我们需要知道父进程通过进程等待的方式,回收子进程资源,获取子进程退出信息...原创 2018-03-29 17:12:23 · 11986 阅读 · 1 评论 -
linux:信号的初识
一.信号是什么 在生活中,我们也可以能会见到各种各样的信号,比如你正在上课,突然铃声一响,那就意味着下课了,铃声就是一种信号,我们大家都约定好的,只要铃声一响那就代表下课了 在linux中,比如你正在执行一个程序,你突然按下Ctrl -c,程序就会结束执行,这是因为给操作系统发了一个2号信号SIGINT,此信号的作用是中止进程,CPU正在执行代码,收到此信号后就会结束进程,CPU具体...原创 2018-04-17 08:28:36 · 429 阅读 · 0 评论 -
linux:死锁
在实现线程互斥中,我们是使用了互斥锁,那如果不合理的使用互斥锁,会带来什么危害呢?比如加锁之后却忘记解锁,会导致以下结果: 1.内存泄露 2.死锁线程互斥请看上一篇博客:https://blog.youkuaiyun.com/dangzhangjing97/article/details/799471871.死锁是什么 比如你在锁门时,把门锁了,然后出去了,把钥匙丢了,回来...原创 2018-04-15 18:41:50 · 950 阅读 · 0 评论 -
linux:进程间通信之共享内存
1.什么是共享内存? 共享内存时两个进程共享同一块内存,两个进程之间的通信不再牵扯到内核,而是直接在用户状态之间直接通信,即就是进程之间的通信不再通过执行内核的系统调用来传递彼此之间的数据,共享内存其实就是一块简单的内存,需要通信的进程可以随意的在它上面进行写读数据2.共享内存是如何来进行进程间的通信的? 共享内存和管道、消息队列一样,都是两个进程进行通信的桥梁,...原创 2018-04-20 16:26:41 · 471 阅读 · 0 评论 -
linux:线程的同步互斥之生产者&消费者模型
一、.什么是生产者消费者模型?在实际开发过程中,经常会遇到如下场景: 某个模块负责生产数据,这些数据由另一个模块来负责处理,产生数据的模块可以形象的看为生产者,处理数据的模块可以形象的看为消费者,但是生产者生产的东西需要存放在一个地方从而来供消费者使用,存放的地方可以是一个仓库,作为中介,联系啊生产者和消费者生产者把生产的数据存放到缓冲区中,消费者从缓冲区中取出数据,从而就实现了...原创 2018-04-20 16:43:50 · 422 阅读 · 0 评论 -
操作系统:I/O控制方式的分类和各自的优缺点及适用场景
一、I/O控制方式的分类? 1.程序I/O控制方式 2.中断驱动I/O控制方式 3.直接存储器访问DMA控制方式 4.I/O通道控制方式二、四种I/O控制方式的优缺点及适用场景1.程序I/O控制方式(1)优点 控制简单,不需要多硬件支持(2)缺点 CPU利用率低 不能实现设备间的并行工作 无法发现和处理产生的错误...原创 2018-08-05 18:20:23 · 32127 阅读 · 0 评论 -
linux经典面试题:同步的含义(同步与互斥中的同步 & 同步通信与异步通信中的同步)& 阻塞 & 非阻塞
在面试中,我们经常会被面试官问到:请解释一下同步的含义,此时,一定要注意这可能是个坑,注意!!! 在被问到这个问题时,不要急着回答面试官,一定要向面试官确认一下,同步是那个背景的同步,别没问清楚就开始说哦1.同步与异步中的同步 此同步指的是行为的同步 例如一群人在学跳舞,前面还有一个小姐姐在领舞,学舞的人的动作和领舞人的动作是一样的话,此时就是同步的体现2.同步通信与...原创 2018-06-02 21:14:55 · 1297 阅读 · 0 评论 -
linux:套接字编程 (单连接/多进程版本/多线程版本) TCP代码的实现 netstat -anp|grep xxx 命令
1.实现服务器与客户端之间的通信,客户端给服务器发送消息,服务器的作用是把客户端发给自己的消息再给客户端发送回去 服务器端#include<stdio.h>#include<stdlib.h>#include<string.h&am原创 2018-05-14 22:56:22 · 676 阅读 · 0 评论 -
linux:套接字编程 UDP
套接字编程在TCP/IP协议中,IP地址+端口号—->唯一的标识一个进程 IP地址+端口号就是套接字,套接字编程就是两个进程分别有自己的socket,这两个进程的socket组成一对,就唯一的标识了这两个进程之间的连接,然后就可以进行相互的通信了1.实现一个客户端给服务器发送消息,服务器的作用就是回显客户端发给自己的消息server.c (服务器端)#include...原创 2018-05-14 22:42:34 · 806 阅读 · 0 评论 -
sockaddr & sockaddr_in & IPV4地址 & IPV6地址 & inet_addr & inet_ntop & inet_pton & inet_aton & inet_ntoa
1.IPV4地址用socket_in结构体表示;2.IPV4和IPV6地址类型分别定义为常数AF_INET、AF_INET6;3.IPV4和IPV6在定义时定义为struct sockaddr_in*结构,但是socket API的接口接受struct sockaddr*结构,故在使用地址的时候需要强转为struct sockaddr*jiegou,这样的好处就是可以提高代码的通用性,...原创 2018-05-13 22:21:29 · 3408 阅读 · 2 评论 -
linux:读写锁
一、读写锁是什么? 读写锁其实还是一种锁,是给一段临界区代码加锁,但是此加锁是在进行写操作的时候才会互斥,而在进行读的时候是可以共享的进行访问临界区的 ps:读写锁本质上是一种自旋锁二、为什么需要读写锁? 有时候,在多线程中,有一些公共数据修改的机会比较少,而读的机会却是非常多的,此公共数据的操作基本都是读,如果每次操作都给此段代码加锁,太浪费时间了而且也很浪费资源...原创 2018-05-18 19:51:02 · 18781 阅读 · 5 评论 -
Linux: listen() & socket() & bind() & accept() & connect() & recvfrom()&sendto() & recv()&send()详解
以下函数的头文件:#incldue<netinet/in.h>#include<arpa/inet.h&am原创 2018-05-11 14:15:23 · 1751 阅读 · 0 评论 -
linux下如何求一个函数的运行时间(C语言实现)
clock()功能:计算某程序从启动到函数调用占用CPU的时间头文件:#include<stdio.h>clock_t clock(void) clock_t:是一种数据类型,是long int类型返回值:该函数返回的是从程序开始运行到调用clock函数时所打的点数 定义两个clock_t变量begin、end,在调用函数之前调用clock函数,在程序...原创 2018-05-02 20:27:20 · 6883 阅读 · 9 评论 -
linux:分离线程
为什么要分离线程? 1.默认情况下,新创建的线程是joinable的,线程退出后,需对其进行pthread_join操作,否则无法释放资源,从而造成系统泄露 2.如果不关心线程的返回值,join是一种负担,这个时候,我们可以告诉系统,当线程退出时,自动释放线程资源分离线程的目的 让线程自生自灭,自动释放线程释放线程ID为thread的线程 int ...原创 2018-04-09 23:24:51 · 2824 阅读 · 1 评论 -
linux:线程互斥&线程同步
一、线程互斥1.互斥 顾名思义,就是相互排斥,比如你去ATM取钱,你在ATM机里取钱的时候,那别人就不能够再取钱,只能够再外面等待着,取钱这件事就是相互排斥的2.线程互斥是什么? 某一资源同一时刻只能让一个线程使用,假设有多个线程都要访问同一资源,线程互斥就是同一时刻该资源只能被一个线程访问,而其他线程就只能等待3.为什么要有线程互斥? 1.多个...原创 2018-04-15 10:32:33 · 441 阅读 · 0 评论 -
线程等待
为什么需要线程等待? 1.线程的入口函数是有返回值的,有时候需要查看这个结果; 2.这个结果会在线程退出时一直在内存中保存着,直到有其他线程来读取,才会释放; 3.否则,会产生类似于僵尸进程的场景,创建新的线程不会复用刚才退出线程的地址空间。 4.如果没有pthread_join(),主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了,加入pth...原创 2018-04-09 19:49:58 · 472 阅读 · 0 评论 -
exit函数和_exit函数的区别
在谈论exit函数与_exit函数之前,我们先了解一下他们的使用场景,他们是在进程终止中使用的,那什么是进程终止呢?进程终止进程终止的场景: (1)代码运行完毕,结果正确; 即就是进程中的所有代码都已执行完毕,而且运行结果也是你想要得到的,就像司马懿的一生,顺顺利利的结束,实现了自己的人生理想,最后也成为了千古名人 (2)代码运行完毕,结果不正确...原创 2018-03-13 23:51:36 · 925 阅读 · 0 评论 -
fork函数与vfork函数的差别
fork函数头文件:#include<unistd.h>函数原型:pid_t fork(void)功能:它是从已经存在的进程中创建一个新进程, 新进程为子进程,而原来的进程为父进程1.fork函数的返回值情况 ps:子进程返回0,父进程返回子进程的pid。2.父进程与子进程之间的关系 (1)子进程是以父进程为模板的,数据结构一样; (2)代...原创 2018-03-13 00:41:45 · 4487 阅读 · 0 评论 -
Linux中的重定向详解
重定向 重定向就是把一个文件中的内容转换到另一个文件中重定向的现象 代码:#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<fcntl.h>#include<string.h>int main(){ close(1); int...原创 2018-03-22 14:40:07 · 994 阅读 · 0 评论 -
文件描述符
文件描述符是什么? 1.文件描述符是一个整数 Linux进程默认情况下会有3个缺省打开的文件描述符分别是: 标准输入stdin(0) 标准输出stdout(1) 标准错误(2) 2.文件描述符是从0开始的整数怎样得到文件描述符? 当open打开某文件时,如果打开成功,此时的返回值...原创 2018-03-22 14:18:28 · 687 阅读 · 0 评论 -
孤儿进程详解
孤儿进程 所谓孤儿进程,故名思义,和现实生活中的孤儿有点类似,当一个进程的父进程结束时,但是它自己还没有结束,那么这个进程将会成为孤儿进程。最后孤儿进程会被init进程(init进程的pid为1)的进程收养,当然在子进程结束时也会由init进程完成对它的状态收集工作,因此一般来说,孤儿进程并不会有什么危害.思路: 在main函数中,创建子进程,然后让父进程睡眠1s,让子进程先...原创 2018-03-07 22:05:15 · 2753 阅读 · 1 评论 -
僵尸进程
1.什么是僵尸进程 一个进程使用fork()创建子进程,如果子进程退出,而父进程并没有调用wait()或waitpid()获取子进程的状态信息,那么子进程的某些信息如进程描述符仍然保存在系统中,这种进程称之为僵尸进程2.实现僵尸进程 在main函数中,创建子进程,然后让父进程睡眠10s,让子进程先终止(注意和孤儿进程例子的区别),这里子进程结束后父进程没有调用wait()/waitpid...原创 2018-03-10 19:06:12 · 323 阅读 · 0 评论 -
Linux:task_struct剖析
进程原创 2017-12-14 11:50:15 · 631 阅读 · 0 评论 -
Linux彩色进度条和普通进度条
linux彩色进度条原创 2017-12-08 13:10:23 · 668 阅读 · 0 评论 -
fopen函数的详解与fclose函数的详解
fopen()功能:打开一个特定的文件,并把一个流和这个文件相关联头文件:#include<stdio.h>原型: FILE*fopen(const char *path,const char*mode)参数说明:path:是一个字符串,包含欲打开的文件路径及文件名mode:mode字符串则代表着流形态 r->读,该文件必须存在; ...原创 2018-03-20 00:21:01 · 33363 阅读 · 3 评论 -
errno函数与perroe函数与strerror函数
errno函数与perror函数与strerror函数原创 2018-03-20 00:56:55 · 874 阅读 · 0 评论 -
linux:进程间通信之管道
进程间通信的目的: 1.数据传输:一个进程需要将它的数据发送给另一个进程; 2.资源共享:多个进程之间共享同样的资源; 3.通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知进程); 4.进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的...原创 2018-04-01 15:20:14 · 314 阅读 · 0 评论 -
linux:进程ID与线程ID&线程之间共享同一个虚拟地址空间
获得线程ID(此ID是内核级ID)#include<sys/syscall.h>pid_t tid;tid=syscall(SYS_gettid);示例代码:#include<stdio.h>#include<sys/syscall.h>#include<stdlib.h>#include<unistd.h...原创 2018-04-09 00:10:21 · 3281 阅读 · 0 评论 -
Linux:线程&线程创建&线程终止
线程 1.是操作系统能够进行调度的最小单位 2.线程被包含在进程之中,是进程中的实际运作单位 3.一个线程指的是进程中一个单一顺序的控制流 4.一个进程可以并发多个线程,每个线程执行不同的任务比如四个人在一个房子里打麻将,创建一个新进程就相当于是在开一个房间,而创建一个新线程是在原有的房间中增加一个人而已 线程的优点 1.创建一个新的线程的代价要比...原创 2018-04-08 23:55:34 · 7840 阅读 · 0 评论 -
open函数详解与close函数详解
open()头文件:#include<fcntl.h>//在centos6.0中只要此头文件就可以 #include<sys/types.h> #incldue<sys/stat.h>功能:打开和创建文件(建立一个文件描述符,其他的函数可以通过文 件描述符对指定文件进行读取与写入的操作。)原型int o...原创 2018-03-20 20:26:27 · 104453 阅读 · 4 评论 -
行缓冲
观察下面四种场景,看会出现什么现象? 1.#include<stdio.h>int main(){ printf("hello 行缓冲\n"); return 0;}运行结果: ps:字符串”hello 行缓冲”被放到缓冲区之后,遇到换行符”\n”,此内容就会被刷新(即就是此字符串会被显示到屏幕上) 2.#include<stdio.h>...原创 2018-03-20 18:27:38 · 487 阅读 · 0 评论 -
linux笔记
1.输出信息到显示器的三种方法#include<stdio.h>#include<string.h>int main(){ const char*msg="hello fwrite\n"; fwrite(msg,strlen(msg),1,stdout); printf("hello printf\n"); fprintf(stdout...原创 2018-03-20 17:22:26 · 316 阅读 · 0 评论 -
fread函数详解和fwrite函数详解
fread()函数与fwrite函数原创 2018-03-19 23:32:18 · 27512 阅读 · 5 评论 -
write函数的详解与read函数的详解
write()头文件:#include<unistd.h>原型:ssize_t write(int fd,const void*buf,size_t count);参数说明: fd:是文件描述符(write所对应的是写,即就是1) buf:通常是一个字符串,需要写入的字符串 count:是每次写入的字节数返回值: 成功:返回写入的字节数...原创 2018-03-20 00:39:46 · 86720 阅读 · 0 评论