Linux
史蒂芬、胖虎
这个作者很懒,什么都没留下…
展开
-
IO多路复用之select复用详解
目录一、select API二、文件描述符就绪条件三、程序示例1、标准输入读取键盘2、改进多客户端并发访问服务器 IO多路复用技术使得程序运行时可同时监听多个文件描述符,对于现实中出现的实际情况有重要意义。多路复用通过三中不同的系统调用——select、poll、epoll来实现,通常来说以下情况需要使用多路复用:客户端同时处理多个客户端请求;客户端程序需要同时处理用户操作和网络连接;TCP服务器同时处理监听socket和连接socket;服务器同时处理UDP和TCP请求;服务器同时监听多个原创 2020-07-16 11:35:26 · 944 阅读 · 0 评论 -
进程间通信机制(IPC)--共享内存
目录共享内存原理介绍共享内存API介绍ftok()获取关键字shmget()创建或获取共享标识符shmat()映射共享空间shmctl()共享空间管理shmdt断开共享连接示例代码 回忆一下前面所介绍的几种进程间通信方式的特点:信号相当于软中断,当系统发送某个被设置的信号时就会立刻去执行该信号所对应的程序块,以信号标志的方式完成进程间的通信,不能够发送数据。管道在发送数据方面起到了很好的...原创 2020-03-28 20:19:32 · 357 阅读 · 0 评论 -
进程间通信机制(IPC)--消息队列
目录消息队列原理消息队列API介绍ftok()获取关键字msgget()创建或访问消息队列msgsnd()添加到消息队列消息队列原理 首先消息队列(Message Queue)通过这个词首先能了解到的是队列这个先进先出数据结构,该方式可以从一个进程向另一个进程发送数据块,且每个数据块都被认为含有一个数据类型,所接受的进程可独立地接受不同数据类型的数据,可通过发送消息来避免管道的同步和阻塞问题...原创 2020-03-28 13:51:45 · 327 阅读 · 0 评论 -
进程间通信机制(IPC)--信号量
目录信号量原理介绍信号量API介绍ftok()获取关键字semget()创建或获取信号量semctl()控制操作信号量集semop()完成信号量PV操作示例代码信号量原理介绍 在前面的几篇文章中有介绍到信号、管道、和命名socket,其中可以传送数据的通信方式是管道和命名socket,而信号和信号量虽然实现方式不同,但是他们都是不能够传递数据,通过信号的方式来执行指定操作。在进程间通信中我们...原创 2020-03-26 23:51:09 · 545 阅读 · 0 评论 -
进程间通信机制(IPC)--命名socket
目录socket套接字TCP/IP协议集 在前面所介绍的几种进程间通信(信号、管道)中所通信的进程都需要在一台计算机上,而socket域进行的通信方式,不仅可以在一台计算机,而且可以是通过网络所连接的不同计算机,这种方式称为命名socket或者UNIX域socket,这也是一种进程间通信的方式,UNIX域数据报服务是可靠的,不会传递出错也不会丢失信息。其提供两类套接字:字节流套接字(strea...原创 2020-03-24 20:14:24 · 595 阅读 · 0 评论 -
进程间通信机制(IPC)--管道(pipe、fifo)
目录无名管道(pipe)命名管道(fifo) 进程间通信的概念及目的在上一篇文章:进程间通信机制(IPC)–信号。 本文介绍的是用来实现进程间相互发送非常短小的,频率很高的的消息方法:管道(pipe)和命名管道(fifo),主要适用于两个进程间的通信。还是要提一下为什么要有进程间通信,因为每个进程各自有不同的地址空间,其数据段、代码段、堆栈段相互独立,因此进程间要交换数据需要借助内核,在内...原创 2020-03-18 00:23:49 · 554 阅读 · 0 评论 -
进程间通信机制(IPC)--信号
目录进程通信的概念及目的信号(Signal)信号API介绍信号的安装进程通信的概念及目的 进程间通信就是在不同进程间传播或交换信息,在linux下的系统编程中,父进程可以通过fork()系统调用来创建一个子进程,之后他们将运行各自的程序代码。一般而言进程的用户空间相互独立,不能互相访问,可如果多个进程间需要协同处理某个任务时这就需要操作系统进程间的同步和数据交流。 进程间通信的目的:...原创 2020-03-15 23:27:07 · 568 阅读 · 0 评论 -
网络编程I/O多路复用select、poll、epoll总结
目录I/O多路复用概念相关API介绍1、select多路复用2、poll多路复用2、epoll多路复用 首先通过一个形象的例子来更好的了解处理网络编程的多种机制: 假如你是一个老师,让20名同学取做一道题,然后检查完学生做的结果才能下课,对于这个过程你可以有下面几个方式:按照顺序逐个检查,先检查甲同学,再检查乙同学,然后丙、丁···,如果中间的同学要思考很久那么就会影响下课的时间。也就...原创 2020-03-13 11:23:20 · 375 阅读 · 0 评论 -
Linux如何处理僵尸进程
目录(一)什么是僵尸进程(二)僵尸进程目的(三)僵尸进程的处理1、wait()函数2、waitpid()函数3、wait与waitpid区别(四)僵尸进程的避免(一)什么是僵尸进程 在一个程序调用了exit系统调用时内核会释放该进程的存储区,打开的文件等,但内核回味每个终止的子程序保存一定的信息量其中包含该进程的进程ID,进程的终止状态,以及该进程使用的CPU时间,这类信息父进程可通过wai...原创 2020-03-11 14:51:54 · 5605 阅读 · 0 评论 -
Linux下写时拷贝技术(copy-on-write)
目录(一)cow概述(二)cow详述1、fork()2、写时拷贝3、vfork()(一)cow概述 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后会调用exec系统调用,出于效率考虑,linux引用的写时拷贝技术,也就是只有进程空间的各段内容要发生变化时才会将父进程的内容复制一份给子进程(关于fork()函数在https://blog.csdn.net/...原创 2020-03-11 11:23:38 · 448 阅读 · 0 评论 -
主机序和网络序及其转换函数
目录主机字节序网络字节序 在物联网或者网络通信的过程中难免会发生数据的交换,因为每台主机不同,其存储数据方式可能为大端存储(Big endian)和小端存储(Little endian),因此在数据传输的过程中是以网络字节序为标准顺序,考虑与协议的一致性,在程序发送数据包的过程中,将主机字节序转为网络字节序,收到数据包的主机再将网络字节序转为该主机的主机字节序,从而完成两台主机的通信。因此掌握...原创 2020-03-05 14:40:26 · 1307 阅读 · 0 评论 -
简述五种网络I/O模型
目录同步与异步阻塞与非阻塞(一)阻塞IO模型(Blocking I/O)(二)非阻塞IO模型(Non-blocking I/O)(三)IO多路复用模型(IO muitiplexing)(四)信号驱动IO模型(Asynchronous IO)(五)异步IO模型(Asynchronous IO) 在介绍五种模型之前我们先来了解几个概念:同步与异步 同步与异步的概念描述是用户线程与内核的交互方...原创 2020-03-05 02:22:46 · 871 阅读 · 0 评论 -
linux下多线程编程入门总结
目录(一)并行和并发的区别(二)多线程的概念及优缺点(三)创建线程`pthread_create()创建线程`pthread_join`()阻塞回收`pthread_detach`()线程分离`pthread_exit()`单线程退出`pthread_cancel()`创建线程(四)进程与线程控制语句对比(一)并行和并发的区别 并行的反义词是串行,假如有一个10万数据量的数组让我们挑出这里的最...原创 2020-03-02 02:40:28 · 629 阅读 · 0 评论 -
getopt和getopt_long函数的参数解析
目录getopt()函数getopt_long()函数getopt_long_only() 函数 当在做嵌入式开发或网络编程时,通常会因为产品型号不同,或者监听的端口号不同需要对程序进行修改,因此为了提高代码重用性,我们可以在执行程序时出传入相应的命令行参数,减少对源码的修改。在linux 中有提供了三种函数可以对命令行参数进行处理:getopt()、getopt_long()、getopt_...原创 2020-03-01 17:28:46 · 849 阅读 · 0 评论 -
多线程编程warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 错误解决
在多线程编程中使用thread_start(pthread_t * thread_id, THREAD_BODY * thread_workbody, void *thread_arg); 创建子线程时因为最后一个参数需要是指向子线程的文件描述符(int类型)的指针,因此调用时我们会将文件描述符强转为(void *)类型,可能是系统不同的原因在int类型强转为void类型指针会出现:w...原创 2020-02-27 15:39:54 · 5969 阅读 · 1 评论 -
浅析UNIX下系统调用fork()函数
- 介绍fork()系统调用用于创建一个新进程,称为子进程,他与进程(成为系统调用fork的进程)同时运行,此进程称为父进程。创建新的子进程后,两个进程将执行fork()系统调用之后的下一条指令。子进程使用相同得pc(程序计数器),相同的CPU寄存器,在父进程中使用的相同打开文件。其返回值如下: 1. 负值:创建子进程失败。 2. 零:返回到新创建的子进程。 3. 正值:返回父进程...原创 2020-02-24 17:49:34 · 1338 阅读 · 0 评论 -
linux下git基本操作(码云)
一、前言1.码云有什么用?码云是开源中国社区2013年推出的基于Git的代码托管服务,此外还提供代码在线查看、历史版本查看、Fork、Pull Request、打包下载任意版本等方便管理、开发、协作的功能。2.版本和版本控制系统版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息记录下来,每次文件的改变,文件的版本号都将增加。软件系统的版本号由三部分...原创 2020-02-24 13:43:12 · 1114 阅读 · 1 评论