首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux系统编程(3)

[3]信号 (2)System 5 IPC对象进程间通信方式   [1]消息队列   [2]共享内存   [3]信号灯集 (3)socket通信 (4)Android系统中增加...Binder进程间通信方式 Linux 支持以上所有进程间通信方式 三 管道进程间通信 (1)无名管道 特点: 只能用于具有亲缘关系进程间通信(具有亲缘关系的进程具有数据拷贝动作...返回值: 成功返回0,失败返回-1 (2)管道读写规则  读端存在  ,写管道 ---->只要管道没有满,都可以写入数据到管道 读端不存在,写管道 ---->此时写管道没有意义,操作系统会发送...管道中没有数据,读阻塞 写端不存在,读管道 ---->此时管道中读取数据,管道中没有数据,此时不阻塞,立即返回,返回值0 (3)有名管道 特点:可以用于任意进程间通信,它是一种特殊的文件,在文件系统存在名字...SIGSTOP 不能忽略 捕捉   当进程收到信号,此时执行的信号处理函数  默认   大部分信号对进程的默认操作方式都是杀死进程   子进程状态发生改变的时候,操作系统向父进程发送

1K20

Linux系统进程编程(二)

哈哈哈,听到僵尸两个字是不是有点小害怕,言归正传,在Linux系统中,我们要明白:进程在运行时是需要消耗系统资源(内存、IO),进程终止时理应完全释放这些资源(如果进程消亡后仍然没有释放相应资源则这些资源就丢失了...),所以linux系统设计时规定:每一个进程退出时,操作系统会自动回收这个进程涉及到的所有的资源(譬如malloc申请的内容没有free时,当前进程结束时这个内存会被释放,譬如open打开的文件没有close...但是操作系统只是回收了这个进程工作时消耗的内存和IO,而并没有回收这个进程本身占用的内存(8KB,主要是task_struct和栈内存),因为进程本身的8KB内存操作系统不能回收需要别人来辅助回收,因此我们每个进程都需要一个帮助它收尸的人...同时,linux系统规定:所有的孤儿进程都自动成为一个特殊进程(进程1,也就是init进程)的子进程。...\n", getpid()); return 0; } 输出结果: 说明:这里父进程先运行死掉了,但是我们后面并没有发现特殊进程init为1,而是908,这其实是跟ubuntu系统有关系的,真实是为

1.6K10
您找到你想要的搜索结果了吗?
是的
没有找到

Linux系统编程Linux背景知识

目录 前言 1.操作系统(os) 2.Linux发展史 2.1UNIX发展史 2.2Linux发展史 3.Linux开源 4.Linux官网 5.企业应用现状 6.Linux发行版本 7.结语 1.操作系统...这是操作系统的根本要义!! Linux操作系统是一个免费且开源的操作系统,它基于Unix操作系统。...操作系统可以分为不同的类型,常见的操作系统包括Windows、macOS、Linux等。 2.Linux发展史 在这里简要介绍Linux的发展史。要说Linux,还得从UNIX开始介绍。...严格来讲,Linux只是操作系统内核本身,但通常采用“Linux内核”来表达该意思。而Linux则常用来指基于Linux内核的完整操作系统,它包括GUI组件和许多其他实用工具。...国内如中标麒麟Linux、红旗Linux、深度Linux系统软件厂商都推出的Linux桌面操作系统,目前已经在政府、企业、OEM等领域得到了广泛应用。

9510

Linux系统编程:基本IO系统调用

文件描述符 表示 宏 0 标准输入(stdin) STDIN_FILENO 1 标准输出(stdout) STDOUT_FINENO 2 标准错误(stderr) STDERR_FILENO 遵循Linux...open()系统调用 对文件进行读写之前,必须先打开文件。Linux提供了系统调用open()。...read()系统调用 文件打开后,就能够读文件了。read()是最基础、最常见的读取文件的机制。...系统调用write()时,数据从用户空间的缓冲区中拷贝到了内核空间的缓冲区,但并没有立即把数据写入磁盘中,这称为延迟写。延迟写的问题在于,如果在数据真正写入磁盘之前系统崩溃了,则数据可能丢失。...Linux系统也支持强制文件立即写入磁盘上,这在后面介绍。 close()系统调用 程序完成文件的读写后,调用close函数关闭文件描述符与文件之间的连接,使得文件描述符可以被重用。

3K30

【高级编程Linux read系统调用

比如 fork、clone、execve、exit等 那为什么一定要用系统调用来访问操作系统的内容呢,其实这可以看做对内核的保护,linux分为用户空间和内核空间,而用户空间是不允许访问内核空间的数据的...引入 cache 层的目的是为了提高 linux 操作系统对磁盘访问的性能。 Cache 层在内存中缓存了磁盘上的部分数据。...文件的page cache结构 在 Linux 操作系统中,当应用程序需要读取文件中的数据时,操作系统先分配一些内存,将数据从存储设备读入到这些内存中,然后再将数据分发给应用程序;当需要往文件 中写数据时...Linux内核中文件预读算法的具体过程是这样的:对于每个文件的第一个读请求,系统读入所请求的页面并读入紧随其后的少数几个页面(不少于一 个页面,通常是三个页面),这时的预读称为同步预读。...为了满足普遍性要求,linux使用定义在linux/fs.h中的结构体address_space结构体描述页高速缓存中的页面。

6K110

Linux系统下进程编程(一)

,记得刚开始学编程的时候,那时候就是从这里开始萌芽的。那么写了这么多函数,为啥要从这里开始“进门”呢,个人理解就是一种规定。...系统里面编程,它也是要准备一些前期工作的:它要有编译链接时的引导代码-------操作系统下的应用程序其实在main执行前也需要先执行一段引导代码才能去执行main,我们写应用程序时不用考虑引导代码的问题...所以说,程序在编译连接时链接器,运行时加载器,这两个东西对程序运行原理非常重要。下面是查看它怎样链接形成的过程: 2、上面说的是程序的开始,那么程序的结束是怎样来终止的呢?...在我们Linux系统有一些函数可以获得进程号:getpid(获得当前进程的ID)、getppid(获得父进程ID)、getuid(获取当前进程的用户ID,比如root用户或是普通用户)、geteuid(...它一般在Linux启动时开始执行,系统关闭时才结束。

2.4K10

Linux系统编程】进程状态

因为这两个状态是操作系统中进程比较核心的两个状态,当然还有一个运行状态它相对比较好理解,我们后面针对具体的Linux操作系统去讲解。...而我们上面了解的内容其实就是基于操作系统这门课程来说的,可以认为它对于所有具体的操作系统都是成立的,可能比较抽象。 而我们下面呢,要针对一款具体的操作系统——Linux来学习一下进程的状态。...看看Linux内核源代码怎么说 一个进程可以有多个状态(在Linux内核里,进程有时候也叫做任务),那首先我们可以来看一下在kernel源代码里关于进程状态的定义: /* * The task state...此时,操作系统路过。 作为系统的管理者,它发现此时系统的内存资源已经非常紧张了,如果再有进程就要挂了,但是此时操作系统却发现你这个进程却不在运行队列里,而是啥也不干在这里等。...所以,为了方便子进程退出后父进程或操作系统获取该进程的退出结果,Linux进程退出时,进程一般不会立即死亡,而是要维持一个Z状态即——僵尸状态。 等这个进程真正被回收了,它的状态就会变成X死亡状态。

15510

Linux系统编程Linux编辑器——vim

从这篇文章开始,我们要来学习一些Linux中的开发工具。 这篇文章,我们先来学习一下Linux中的文本编辑器——vim。 1....但是我们要学的大部分命令其实都是在命令模式下的指令。 4.1 命令模式命令集 那下面,我就边演示边给大家讲解命令模式下命令集 首先来一个 复制粘贴 现在我的光标在第5行。...我当前这个用户之所以用不了sudo,是因为我并不在系统的信任列表里面。 如果一个新的普通用户无法使用 sudo,有可能是因为该用户还没有被添加到授权列表中,或者没有正确配置 sudo 权限。...sudo 的目的是确保系统的安全性,避免普通用户在没有适当权限的情况下执行危险或敏感的操作。只有经过授权的用户才可以使用 sudo,并且需要提供自己的密码来进行身份验证。...我们vim打开对应的/etc/sudoers这个文件: 然后怎么添加呢?

17510

Linux系统开发: 学习Linux下网络编程

SOCK_STREAM 表明我们的是TCP协议 (字节流) SOCK_DGRAM 表明我们的是UDP协议 (数据报) int protocol:指定通信协议类型。...这等效于调用shutdown两次:第一次调用时SHUT_RD,第二次调用时SHUT_WR。...shutdown(tcp_client_fd,SHUT_WR); //TCP半关闭,保证缓冲区内的数据全部写完 直接强制关闭连接示例: int close(int fd); 1.9 查看Linux系统当前的网络连接...信号 3.8 获取网络底层缓冲区发送剩余字节数 在网络编程时,发送方调用write(fd)将报文发送的时候实际上只是写入了内核的write buffer。...linux提供了ioctl(fd, SIOCOUTQ, &count)方法来查询一个tcp socket的write buffer是否清空。发送方一般可以这个方法来判断对端是否收到报文。

3.4K21

看我 Linux 带娃,培养编程兴趣

什么玩笔者的是 Ubuntu 系统,首先分析一下:让娃看视频,或者看一些色彩丰富的画面,不太合适,还是要以保护视力为重;娃还小,还在认数字认字母的阶段,所以键盘操作为主比较合适,顺便认认数字和字母;...fortune | cowsay,你就会得到一只特别有文化的奶牛~~banner + lolcat 彩色横幅sudo apt install lolcat sysvbanner -ybanner "Linux...你甚至可以 fortune | lolcat 打印出一首彩色的诗~~结语「编程要从娃娃抓起」,这话没错,但是属于 100% 正确的废话,没什么。关键是怎么抓啊?...作为码农,看了市面上各种少儿编程班,也许是鄙视链心理作祟,总觉得是忽悠人的,但是自己又没什么方法。粗面上大概打算先从硬件入手,再过渡到软件。...5分钟get少儿编程全规划》,里面总结的东西笔者比较赞同,也有一些借鉴意义,有兴趣的同学可以看看。

44210

Linux编程系统里的僵尸们)

下图给出Linux进程从被创建(生)到被回收(死)的全部状态,以及这些状态发生转换时的条件: ?...3,刚被创建的进程都处于“就绪”状态,等待系统调度,内核中的函数sched( )被称为调度器,他会根据各种参数来选择一个等待的进程去占用CPU。...时间片耗光的情况下如果进程还没有结束,那么会被系统重新放入等待队列中等待。另外,正处于“执行态”的进程即使时间片没有耗光,也可能被别的更高优先级的进程“抢占”CPU,被迫重新回到等到队列中等待。...当进程所等待的资源变得可获取时,又会被系统置为TASK_RUNNING状态重新就绪排队。...5,当进程收到SIGSTOP或者SIGTSTP中的其中一个信号时,状态会被置为TASK_STOPPED,此时被称为“暂停态”,该状态下的进程不再参与调度,但系统资源不释放,直到收到SIGCONT信号后被重新置为就绪态

1.3K20

Linux系统编程】基础指令(三)

2.date指令 用法: date [选项] [+格式] 功能: date指令是在Linux和Unix系统中用于显示和设置系统日期和时间的命令。...它可以显示当前的日期和时间,也可以用于设置系统的日期和时间。 例如: 以下是一些常见的date指令用法示例: ✨1. 显示当前日期和时间: date 结果如下: ✨2....设置系统日期和时间(需要root权限): date -s "" date -s //设置当前时间,只有root权限才能设置,其他只能查看。...3.cal指令 语法: cal [选项][月份][年份] 功能: cal指令是在Linux和Unix操作系统中用于显示指定月份的日历的命令。...基础指令,加上之前的Linux基础指令一和Linux基础指令二,常见的Linux基础指令更新就到这里啦~以上就是今天的所有内容啦 ~ 完结撒花 ~

7110

Linux系统编程】粘滞位详解

上一篇文章我们学习了Linux权限相关的内容,这篇文章,我们再来学习一个知识点——粘滞位。 1....那在Linux中,这个共享目录一般是由root提供的,只要root把权限放开,那其他普通用户就可以以other的身份去访问这个目录了。 2....那我们可以切换成root去创建,当然后面如果sudo能用的话我们可以直接sudo 此时我就创建好了一个公共目录public。...显然是不合理的,那为了解决这个不科学的问题,Linux就引入了粘滞位的概念。(因此我们也应该知道,粘滞位只能给目录添加) 3....当一个目录被设置为"粘滞位"(chmod +t),则该目录下的文件只能由 超级管理员(root)删除 该目录的所有者(一般就是root)删除 该文件的所有者删除

14610

Linux系统编程】基础指令(二)

1.man指令 在Linux中,man指令用于查看系统命令、库函数和配置文件的帮助手册。 Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。...解释一下,man手册一般可以分为8章节(第9章非标准) 常用的节号有: 1:用户命令(用户可以直接使用的命令) 2:系统调用(操作系统提供的接口函数) 3:库函数(C语言库中的函数) 4:设备文件...(设备文件的帮助文档) 5:配置文件(配置文件的帮助文档) 6:游戏(Linux系统中的一些小游戏) 7:惯例与协议(Linux系统的惯例和协议) 8:系统管理命令(管理员可以使用的命令)...系统下常用的命令,经常用来备份文件或者目录。...基础指令,后续将会继续介绍更多的Linux指令,以上就是今天的所有内容啦 ~ 完结撒花 ~

9510

Linux 下Input系统应用编程实战

这里还是以最常用的操作系统Linux来进行讲解 在Linux内核中,有非常多的子系统,用于管理很多设备,比如显示系统,输入子系统,音频子系统,电源管理子系统,时钟管理子系统等等,本节我们重点关注Linux...输入子系统Linux内核用于管理各种输入设备 (键盘,鼠标,遥控杆,书写板等等 )的部分,用户通过输入子系统进行内核,命令行,图形接口之间的交换。...在Linux的输入子系统中,分三块进行管理,分别是: input core(输入系统核心层), drivers(输入系统驱动层)和 event handlers(输入系统事件层),如此说来感觉太抽象,我们来看图...Linux系统为我们提供了这个输入系统操作相关的头文件:#include 在这个文件中,我们可以找到这个结构体: 1//用于描述一个输入事件 2struct input_event...然后,USB线连接你的开发板,然后用adb命令将ft5x0x_tp push到system/bin/目录下,这个目录是Android的根文件系统下的一个命令,很多命令都在这个目录下。

2.6K30

Linux系统——shell脚本编程基础介绍

Linux系统——shell脚本编程基础介绍 1、什么是shell 它是一个命令解释器,在linux/unix操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种操作输出的结果..., version 4.1.2(1)-release(x86_64-redhat-linux-gnu) Copyright(C) 2009 Free Software Foundation, Inc....There is NOWARRANTY, to the extent permitted by law. 3、shell脚本编辑规范 通常在编辑器(vi/vim)中编写,由linux命令、bashshell.../usr/bin/expect 非交互式语言 由于centos和redhat linux默认的shell是bash,你可以加,也可以不加,为了规范加上最好 2、加上作者信息与版本信息与功能 3、...backup~]# echo $NAME beijing 显示和取消环境变量 [root@backup~]# env HOSTNAME=backup SELINUX_ROLE_REQUESTED= TERM=linux

2.1K10
领券