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

【高级编程】Linux read系统调用

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

6.2K110

Linux C语言高级编程之网络编程!

,因此以后编程时建议从1025开始使用。...字节序 在嵌入式开发中,大端(Big-endian)系统和小端系统(Little-endian)是一个很重要的概念。...小端系统:将低位字节的数据存放在低位内存地址的系统; 大端系统:将低位字节的数据存放在高位内存地址的系统; 小端系统中按照地址从小到大依次为:0x78 0x56 0x34 0x12 大端系统中按照地址从小到大依次为...:0x12 0x34 0x56 0x78 一般来说,在网络编程中需要将所有发送到网络中的多字节整数先转换为网络字节序再发送,将所有从网络中接收过来的多字节整数先转换为主机字节序再解析,而网络字节序本质就是大端系统的字节序...总结:以上概念都是网络编程中最常见最基础的知识点,这些都需要大家掌握。另预告一下,下一章将讲解非常重要的SOCKET网络编程,希望大家多多关注。

5.4K90
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【高级编程】linux进程间通信总结

    PIPES 管道是UNIX系统IPC的最古老形式,并且所有的UNIX系统都提供此通信机制。但管道有两个局限性: 历史上,它们是半双工的,现在某些系统提供全双工管道。 它们只能在共有祖先的进程间使用。...如果要互相通信的几个进程没有从公共祖先那里继承文件描述符,可以使用FIFO,文件系统中的路径名是全局的,各进程都可以访问,因此可以用文件系统中的路径名来标识一个IPC通道。...XSI IPC XSI(System Interface and Headers),代表一种Unix系统的标准,为unix系统定义一个界面。...在linux中,可以使用sysctl命令观察和修改内核配置参数。还可以运行ipcs -l以显示IPC的相关限制。...另一个问题是这些IPC结构在文件系统中没有名字,为了支持他们不得不添加了十几条全新的系统调用。 因为这些IPC不使用文件描述符,所以不能使用多路转换I/O函数:select或poll。

    2K70

    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.8K10

    Linux系统编程基础

    Linux不是一个具体的操作系统,而是一类操作系统的总称,具体版本成为发行版。...Red Hat:目前被IBM收购,收费版,目前最大的Linux供应商 CentOS: Red Hat退出的免费版 Ubuntu:界面比较友好 虚拟机 学习Linux系统,就需要有一个可用的Linux系统...我们也不能将自己系统换成Linux系统,因为Linux系统并不适合日常办公使用,所以我们需要借助虚拟机来获得可用的Linux系统环境进行学习。 什么是虚拟机?...借助虚拟化技术,我们可以在系统中,通过软件:模拟计算机硬件,并给虚拟硬件安装真实的操作系统。 这样,就可以在电脑中,虚拟出一个完整的电脑,以供我们学习Linux系统。...对于操作系统的使用,有2种使用形式: 图形化页面使用操作系统 以命令的形式使用操作系统 不论是Windows还是Linux亦或是MacOS系统,都是支持这两种使用形式。

    11910

    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背景知识

    目录 前言 1.操作系统(os) 2.Linux发展史 2.1UNIX发展史 2.2Linux发展史 3.Linux开源 4.Linux官网 5.企业应用现状 6.Linux发行版本 7.结语 1.操作系统...这是操作系统的根本要义!! Linux操作系统是一个免费且开源的操作系统,它基于Unix操作系统。...它包括了高级的文件管理器和基于TCP/IP网络协议的网络特点。现在TCP/IP被Internet所使用。BSD Release 4.2被许多厂商所采用,例如SUN Microsystem。...国内如中标麒麟Linux、红旗Linux、深度Linux等系统软件厂商都推出的Linux桌面操作系统,目前已经在政府、企业、OEM等领域得到了广泛应用。...Arch Linux:面向高级用户和技术爱好者的发行版,注重简单性和自定义性。 openSUSE:可用于桌面、服务器和嵌入式设备的稳定和灵活的发行版。

    16510

    【Linux系统编程】二、Linux进程概念

    书上称之为 PCB(process control block),而 Linux 操作系统下的 PCB 是: task_struct ​ 我们现在思考一个问题,我们写的程序是放在磁盘中的,当我们想要运行它的时候...因为操作系统不只是要运行这个程序,操作系统还得运行其他重要的或者不必要的程序,而我们又知道执行程序是要被加载到内存中的,这个时候操作系统就需要做管理了,必须知道这些程序的属性来进行管理,比如优先级、状态...在 Linux 中描述进程的结构体叫做 task_struct。 task_struct 是 Linux 内核的一种数据结构,它会被装载到 RAM(内存) 里并且包含着进程的信息。...2、通过访问 /proc 系统文件夹查看 ​ /proc 是 Linux 下专门用来存放进程的文件夹! ​ 其中这些数字文件夹,其实就是以 PID 为名称的进程! ​...被父子进程共享,数据各自开辟空间,私有一份(采用写时拷贝)~ fork() 之后,父子进程会执行后续代码,但是执行的先后次序这个是无法预料的~ 通过 fork() 的返回值 与 if语句分流,我们可以实现多进程编程

    2200

    【Linux系统编程】Linux环境的搭建

    系统编程 若有问题 评论区见 欢迎大家点赞收藏⭐文章 1.Linux 背景介绍 说起Linux,我们必须先要提起UNIX UNIX 发展的历史 1968 年,一些来自通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫...它包括了高级的文件管理器和基于 TCP/IP 网络协议的网络特点。现在 TCP/IP 被 Internet 所使用。...Torvalds 绝对没有想到他设想的一种能够针对高级业余爱好者和黑客们的操作系统已经产生,这就是人们所称的Linux 。...国内如中标麒麟Linux、红旗 Linux、深度Linux等系统软件厂商都推出的Linux桌面操作系统,目前已经在政府、企业、 OEM等领域得 到了广泛应用。...debian这款操作系统无疑并不适合新手用 户,而是适合系统管理员和高级用户。 Ubuntu Ubuntu是Debian的一款衍生版,也是当今最受欢迎的免费操作系统。

    11010

    Linux高级文件系统管理

    如果您的 Linux 服务器有多个用户经常存取数据时,为了维护所有使用者在硬盘容量的公平使用,磁盘配额 (Quota) 就是一项非常有用的工具,另外,如果你的用户常常抱怨磁盘容量不够用,那么更进阶的文件系统就得要学习...,本章我们会介绍磁盘阵列 (RAID),及逻辑卷轴文件系统 (LVM),这些工具都可以帮助你管理与维护使用者可用的磁盘容量.Quota 磁盘配额配置Quota 这个玩意儿就字面上的意思来看,就是有多少『...以 Linux 来说,就是有多少容量限制的意思,我们可以使用 quota 来让磁盘的容量使用较为公平,下面我们会介绍什么是 quota 然后以一个完整的范例来介绍 quota 的使用作用.由于Linux...是一个多用户管理的操作系统,而Linux默认情况下并不限制每个用户使用磁盘空间的大小,假如某个用户疏忽或者恶意占满磁盘空间,将导致系统磁盘无法写入甚至崩溃;为了保证系统磁 盘的有足够的剩余空间,我们需要对用户和组进行磁盘空间使用限制...20K 0K 0K 2 0 0LVM 逻辑卷管理器LVM(Logical Volume Manager)逻辑卷管理,它是Linux

    2.2K20

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

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

    3.1K30

    Linux系统下进程编程(一)

    ,记得刚开始学编程的时候,那时候就是从这里开始萌芽的。那么写了这么多函数,为啥要从这里开始“进门”呢,个人理解就是一种规定。...系统里面编程,它也是要准备一些前期工作的:它要有编译链接时的引导代码-------操作系统下的应用程序其实在main执行前也需要先执行一段引导代码才能去执行main,我们写应用程序时不用考虑引导代码的问题...另外,这里的可执行文件既可以是二进制文件,也可以是Linux下任何可执行脚本文件。)来运行)加载器负责将这个程序加载到内存中去执行这个程序。...在我们Linux系统有一些函数可以获得进程号:getpid(获得当前进程的ID)、getppid(获得父进程ID)、getuid(获取当前进程的用户ID,比如root用户或是普通用户)、geteuid(...它一般在Linux启动时开始执行,系统关闭时才结束。

    2.5K10

    初识Linux · 系统编程done

    前言: 本文作为Linux系统编程的收尾工作,介绍的是些零碎的概念,比如死锁,可重入函数,自旋锁,读写锁等,其中死锁概念要重要些,对于自旋锁,读写锁来说都没有那么重要,所以咱们了解一下即可。...但需要注意的是,并不是所有的资源都可以改造成可共享使用的资源,并且为了系统安全,很多地方还必须保护这种互斥性。因此,很多时候都无法破坏互斥条件。...但这种方法可能导致前一阶段工作的失效,并且反复地申请和释放资源会增加系统开销,降低系统吞吐量。...NULL); pthread_join(t3, NULL); pthread_join(t4, NULL); //pthread_spin_destroy(&lock); } 以上,或者说初识Linux...系统编程的文章就更新完了,大部分文章介绍的不是那么清楚的,博主会重制Linux系统编程的,算是对博主自己的一个交代啦,敬请期待!!

    4600

    【Linux系统编程】进程状态

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

    22310

    Python 高级编程

    Python高级编程 生成式(推导式) 用于创建list的生成式 1 >>> list(range(1,11)) 2 3 [1,2,3,4,5,6,7,8,9,10] 常见用法 1 >>>...同步IO下系统需要切换线程,让操作系统可以在IO过程中执行其他的东西。 这样虽然代码是符合人类的思维习惯但是由于大量的线程切换带来了大量的性能的浪费,尤其是IO密集型的程序。 所以人们发明了异步IO。...一般来讲:阻塞IO模型、非阻塞IO模型、IO复用模型(select/poll/epoll)、信号驱动IO模型都属于同步IO 概念来自于《UNIX网络编程卷1》 lambda表达式与函数式编程 lambda...表达式实际上就是一种匿名函数,在GUI编程中用处很大。...API 通过ctypes模块可以直接调用到操作系统API 如下示例,调用Windows系统中的user32.dll库中的mouse_event函数,移动当前屏幕鼠标箭头的位置 1 import ctypes

    1.3K70

    【Linux高级IO】掌握Linux高效编程:深入探索多路转接select机制

    掌握这些高级I/O机制,不仅能够帮助我们更好地理解和优化系统性能,还能在开发高并发、高性能的应用程序时游刃有余。 select机制,则是Linux中处理多路复用I/O的一种经典方法。...让我们携手踏上这段探索之旅,一同揭开Linux高级I/O与select机制的神秘面纱。...非阻塞IO:fcntl fcntl 是 Linux 系统编程中一个非常重要的函数,全称为 File Control,即文件控制。...高级I/O与select机制的学习之旅,我们不难发现,这些技术不仅是系统编程中的关键要素,更是提升应用程序性能和稳定性的有力武器。...最后,让我们携手开启系统编程的新篇章,继续深入探索Linux的奥秘,共同推动技术的进步和发展。在未来的日子里,愿我们都能在技术的海洋中畅游,收获满满的知识与智慧。再见!

    10710

    Linux高级

    对于vim命令,如果在你的linux系统上没有安装,需要我们自己安装。...在Linux系统中,安装软件的方式主要有四种,这四种安装方式的特点如下: 安装方式 特点 二进制发布包安装 软件已经针对具体平台编译打包发布,只要解压,修改配置即可。...在linux操作系统下,我们常将软件安装在自定义的目录下,例如soft文件下 操作步骤: 1、在/usr/local目录下创建自定义soft目录 2、使用FinalShell自带的上传工具将jdk的二进制发布包上传到...操作系统下,启动tomcat为:startup.sh 5.查看linux的所有进程命令为:ps -aux | grep tomcat (**注意:"|" 为linux的管道符)若出现 tommcat.start...即表示启动成功,如下图 安装好tomcat后,我们可以在windows访问tomcat会出现访问失败,这是因为linux系统本身的防火墙原因,解决方法有两个,第一为:关闭防火墙(不安全) 第二为:

    6110
    领券