《Unix环境高级编程》笔记

基础

Unix操作系统体系结构

操作系统就是一种软件,它管理控制计算机的硬件资源,提供程序运行的环境,这种软件又被称为内核(Kernel)。内核提供的接口被称为系统调用(System call), 公共函数库建立在系统调用之上,应用程序可以使用公共函数库也可以自己执行系统调用。Shell是一个特殊的应用程序,为其他程序提供了接口。

《Unix环境高级编程》笔记

文件与目录

文件系统中所有东西的起点都是根目录(root),这个目录的名称是”/”。创建新目录时,会自动创建两个文件名 . (点)和 .. (点点)。点指向当前目录,点点指向父目录。以斜线开头的路径名称为绝对路径名(absolute pathname),否则称为相对路径名(relative pathname)。相对路径名指向相对于当前目录的文件。所有进程都有一个工作目录,所有相对路径名从工作目录开始解释。

输入与输出

  • 文件描述符
    文件描述符(file descriptor)通常是一个小的非负整数,内核用以标识一个特定进程正在访问的文件。当内核打开一个现有文件或创建一个新文件时,都会返回一个文件描述符。
  • 标准输入,标准输出,标准错误
    每当运行一个新程序,shell都将为其打开3个文件描述符,即标准输入(standard input),标准输入(standard output)和标准错误(standard error)。如果不做特殊处理,三个文件描述符都将链接向终端,当然他们也可以被重定向到某个文件,例如 ls > file.txt
  • 不带缓冲的I/O
    函数open, read, write, lseek, close提供了不带缓冲的I/O
  • 标准I/O
    标准I/O为不带缓冲的I/O提供了带缓冲的接口。最熟悉的标准I/O函数是 printf

程序和进程

程序是存储在磁盘上某个目录中的可执行文件,内核使用 exec函数,将程序读入内存,并执行。程序的执行实例被称为进程(process),unix系统保证每个进程都有一个唯一的非负数字标识符,称为进程id。有三个用于进程控制的主要函数, fork, execwaitpid。一个进程内的所有线程共享同一地址空间,文件描述符,栈和与进程相关的属性,因为他们能访问同一存储区,所以各个线程在访问共享数据时需要采取同步措施来避免不一致性。线程也用id标识,但此id只在该进程内起作用。

用户标识

用户ID为0的用户为根用户(root),根用户对系统有自由地支配权,有些操作系统功能只向根用户提供。

信号

信号(signal)用于通知进程发生了某种情况。例如,除零操作将触发SIGFPE信号(浮点异常)发送给该进程。进程有三种方式处理信号,1)忽略信号,2)按照系统默认方式处理,例如除零的默认处理是终止该进程
3)提供函数,信号发生时调用该函数。
终端键盘上有两种产生信号的方法,一个是中断键(Ctrl + C 或 Delete), 和退出键(Ctrl + \)。调用 kill函数,可以从一个进程向另一个进程发送信号,这需要确保你是被kill进程的所有者或者根用户。

Original: https://www.cnblogs.com/rachel-aoao/p/16445401.html
Author: rachel_aoao
Title: 《Unix环境高级编程》笔记

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/601177/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MySQL 学习笔记(五)–mysqldump

    mysqldump 与 –set-gtid-purged 设置 (1) mysqldump The mysqldump client utility performs …

    数据库 2023年6月16日
    0105
  • Java中的SPI原理浅谈

    在面向对象的程序设计中,模块之间交互采用接口编程,通常情况下调用方不需要知道被调用方的内部实现细节,因为一旦涉及到了具体实现,如果需要换一种实现就需要修改代码,这违反了程序设计的&…

    数据库 2023年6月14日
    072
  • 你的 SQL 还在回表查询吗?快给它安排覆盖索引

    什么是回表查询 小伙伴们可以先看这篇文章了解下什么是聚集索引和辅助索引:Are You OK?主键、聚集索引、辅助索引,简单回顾下,聚集索引的叶子节点包含完整的行数据,而非聚集索引…

    数据库 2023年5月24日
    088
  • Mysql_事务_存储过程_触发器

    一、什么是事务? 事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库…

    数据库 2023年6月11日
    096
  • [spring]spring静态代理和aop

    10.代理模式 代理模式的分类: 静态代理 动态代理 关系分析 抽象角色:一般会使用接口或者抽象类 真实角色:被代理的角色 代理角色:代理真实的角色,做一些附属的操作 客户:访问代…

    数据库 2023年6月16日
    093
  • 4. 事务和锁

    404. 抱歉,您访问的资源不存在。 可能是URL不正确,或者对应的内容已经被删除,或者处于隐私状态。 [En] It may be that the URL is incorre…

    数据库 2023年5月24日
    083
  • Mock.js的简单使用

    Mock.js的简单使用 简述 Mock.js 是一款 模拟数据生成器,旨在帮助前端攻城师独立于后端进行开发,帮助编写单元测试。 功能 根据数据模板生成模拟数据。 模拟 Ajax …

    数据库 2023年6月11日
    0121
  • 在laravel中使用pipeline管道提升redis读写速度

    可能有些小伙伴使用redis读写数据在需要循环使用的场景会发现效率并不是很高 于是我分享一个pipeline管道方法 我们这里用12万条数据做测试,首先来试试写入操作,看看用常规方…

    数据库 2023年6月14日
    0104
  • MySQL视图

    视图 常见的数据库对象 视图概述 为什么使用视图 可以帮助我们使用表中的 部分数据,对其修改可以改变原来表中的值 可以简化查询 控制数据的访问(权限) 视图的理解 视图是一个本身没…

    数据库 2023年5月24日
    074
  • python中的cls和self区别

    self:Always use self for the first argument to instance methods self是作为类进行实例化传递的第一个参数,也就是我…

    数据库 2023年6月6日
    067
  • MySQL快速创建800w条测试数据表&深度分页

    MySQL快速创建800w条测试数据表&深度分页 如果一条一条插入普通表的话,效率太低下,但内存表插入速度是很快的,可以先建立一张内存表,插入数据后,在导入到普通表中。 1…

    数据库 2023年6月14日
    098
  • Eureka详解系列(二)–如何使用Eureka(原生API,无Spring)

    简介 通过上一篇博客 Eureka详解系列(一)–先谈谈负载均衡器 ,我们知道了 Eureka 是什么以及为什么要使用它,今天,我们开始研究如何使用 Eureka。 在…

    数据库 2023年6月6日
    0111
  • Docker安装部署Mysql8(以作数据持久化)

    1.创建容器并进行持久化处理 #拉取镜像 docker pull mysql:8.0.20 #启动镜像,用于拷贝配置文件到宿主机 docker run -p 3306:3306 -…

    数据库 2023年6月11日
    0106
  • MySQL启动过程详解三:Innodb存储引擎的启动

    Innodb启动过程如下: 初始化innobase_hton,它是一个handlerton类型的指针,以便在server层能够调用存储引擎的接口。 Innodb相关参数的检车和初始…

    数据库 2023年6月9日
    095
  • jdbc-使用java连接mysql

    package com.cqust; import com.mysql.jdbc.Driver; import java.sql.Connection;import java.sq…

    数据库 2023年5月24日
    063
  • LeetCode 14. 最长公共前缀

    编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入:strs = [“flower&#8…

    数据库 2023年6月11日
    065
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球