Linux系统编程
杨博东的博客
阿里云数据库-NoSQL组,开源贡献者,Valkey Contributor,Valkey-Java Client Maintainer。
展开
-
执行新程序 execve()
新程序的执行一:execve()之所以叫新程序的执行,原因是这部分内容一般发生在fork()和vfork()之后,在子进程中通过系统调用execve()可以将新程序加载到子进程的内存空间。这个操作会丢弃原来的子进程execve()之后的部分,而子进程的栈、数据会被新进程的相应部分所替换。即除了进程ID之外,这个进程已经与原来的进程没有关系了。 举个例子:在shell(shell也是一个进程)中执行原创 2015-12-06 20:26:01 · 8265 阅读 · 1 评论 -
linux&c 进程控制 课后习题
(声明:本篇博客只是博主自己的理解,加以整理,目的是总结刚学过的进程知识,不一定绝对正确,非常愿意听客官您提出宝贵意见。)Q1:进程中的全局数据段(全局变量),局部数据段(局部变量),静态数据段的分别位于哪个内存地址空间? 答:对于进程的概念,我把它理解一个可执行程序进行的实体,我们c语言代码在变成可执行文件的过程中都会经历下面4步(以我们大家接触的第一个c语言程序“helloworld”为例)原创 2016-01-18 23:01:35 · 887 阅读 · 0 评论 -
Linux&c 文件操作,线程进程控制,网络编程,简单知识点梳理
一:文件操作 在linux下,一切皆文件,目录是文件,称为目录文件,内容是该目录的目录项(但是目录只有内核可以编辑,超级用户也不可以编辑),设备也是设备文件,在/dev存放的就是一些设备文件,linux的文件系统(VFS:虚拟文件系统:提供一种机制,将各种不同的文件系统结合起来,并且提供统一的应用程序编程接口,我们可以不用考虑针对不同的文件系统去采用不同的读写方式)主要用于管理文件存储空间的分配,原创 2015-09-01 22:01:27 · 1199 阅读 · 0 评论 -
Linux&C open creat read write lseek 函数用法总结
一:五个函数的参数以及返回值。 函数 参数 返回值 open (文件名,打开方式以及读写方式,文件的权限)原创 2015-08-04 21:07:36 · 984 阅读 · 0 评论 -
fork()和vfork()的区别,signal函数用法,exec()系列函数的用法小结
一:fork()和vfork()的区别: fork()函数可以创建子进程,有两个返回值,即调用一次返回两个值,一个是父进程调用fork()后的返回值,该返回值是刚刚创建的子进程的ID;另一个是子进程调用fork()后的返回值,该返回值为0。 vfork与fork不同的地方在于: 使用fork()创建子进程时:子进程只是完全复制父进程的资源,并且哪个进程先运行取决于系统的调度原创 2015-08-04 21:07:44 · 979 阅读 · 0 评论 -
线程创建,属性设置与获得,等待线程结束,线程中fork,以及执行exec()
这篇博客的形式我想以分析代码不同情况为主: 点击(此处)折叠或打开 #includestdio.h> #includepthread.h> #includetime.h> #includeunistd.h>原创 2015-08-04 21:07:57 · 694 阅读 · 0 评论 -
线程私有数据TSD——一键多值技术,线程同步中的互斥锁和条件变量
一:线程私有数据:线程是轻量级进程,进程在fork()之后,子进程不继承父进程的锁和警告,别的基本上都会继承,而vfork()与fork()不同的地方在于vfork()之后的进程会共享父进程的地址空间,但是有了写实复制(fork()之后的子进程也不会直接复制父进程的地址空间在另一块内存,除非子进程修改了某种信息,才会在内存中为它重新复制一块区域)的出现之后,vfork()基本上就没什么作用了。但是线原创 2015-08-04 22:43:19 · 1687 阅读 · 0 评论 -
Linux&C 线程控制 课后习题
Q1:多线程与多进程相比有什么优势? 多进程程序耗费的资源大,因为fork()的时候子进程需要继承父进程的几乎所有东西,但是多线程程序线程只继承一部分,即自己的私有数据,例如自己的线程ID,一组寄存器,堆栈,信号屏蔽字,errno值,调度优先级 多进程的程序之间的数据相互独立,所以通信之间就必须要专门的通信方式,但是多线程之间共享数据空间,所以线程之间通信变的方便。 多进程之间被分原创 2015-08-06 00:08:04 · 2628 阅读 · 2 评论 -
Linux&C ——信号以及信号处理
一:linux信号的简单介绍。 信号提供给我们一种异步处理事件的方法,由于进程之间彼此的地址空间是独立的,所以进程之间的通信就需要特殊的机制,而信号是进程之间唯一的异步通信方式。我们平时可以接触到的信号来源一般有:用户从键盘键入、一些硬件的异常、用户使用kill命令或者函数发送或者当系统检原创 2015-09-07 20:36:06 · 974 阅读 · 0 评论 -
Linux&C———进程间通信
管道和有名管道 消息队列 共享内存 信号 套接字 由于进程之间的并不会像线程那样共享地址空间和数据空间,所以进程之间就必须有自己特有的通信方式,这篇博客主要介绍自己了解到的几种进程之间的通信方式,内容讲的比较浅,目的相当于做学习笔记. 一:管道和有名管道 管道是一种半双工的通信方式(即数据只能单方面流动),TCP协议提供的就是一种全双工的通信方式,并且管道只能在具有亲缘关系原创 2015-09-14 20:02:00 · 776 阅读 · 0 评论 -
什么是进程?
我们以”HelloWorld.c”这个最简单的c语言程序为例来给大家介绍到底什么是进程。 程序就是最简单的”HelloWorld.c”,我们想要运行它,执行”gcc HelloWorld.c -o HelloWorld”之后,再./HelloWorld,屏幕上就会显示”Hello World!”的输出了,现在我们将这个过程细化,我们知道一个c语言程序的执行过程分为以下几步:预处理->编译->汇编-原创 2015-11-01 18:55:15 · 757 阅读 · 0 评论 -
父进程等待子进程结束 waitpid wait
我们一直在强调一个概念就是进程是一个程序执行的实例,是内核在虚拟概念下创建的实体,它实例化的体现在用户态就是程序代码和代码使用的变量(存储空间),在内核态就是内核为我们每个进程所保存的数据结构(状态信息)等。 当一个进程由于某种原因停止时,内核并不是直接将为它保存的状态信息从内核移除,相反,进程会一直被保持在一种已经终止的状态,直到被它的父进程回收,当父进程回收已经终止的子进程时,内核会将子进程的原创 2015-11-09 17:02:08 · 18135 阅读 · 0 评论 -
说线程
其实要我说线程,我是不知道说什么的,我不能清晰的说出线程的历史,只是大致了解过(从LinuxThreads 到 NPTL和NGPT之争);我也不知道线程在内核层面是具体怎样的形态,只是知道内核是不会区分线程和进程的,而且线程和进程一样也是task_struct结构体,而且会以线程组的形式存在(主线程即进程就是组长);我也不能算一个入门的多线程服务端编程的c++程序员,因为一个是对c++所知甚少,还有原创 2016-08-09 00:51:43 · 1442 阅读 · 3 评论