《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)

大家都在看

  • 第十七章 AOP编程

    1.AOP概念 AOP(Aspect Oriented Programing) 面向切面编程 = Spring动态代理开发 以切面为基本单位的程序开发,通过切面间的相互协同,相互调…

    数据库 2023年6月14日
    082
  • MySQL45讲之备库并行复制策略

    前言 本文主要介绍 MySQL 备库的并行复制策略。 为什么备库需要并行复制 如果主数据库有大量的更新操作,因为主数据库可以并发写入,而从数据库只能在单个线程中执行,那么从数据库的…

    数据库 2023年5月24日
    074
  • MySQL并行复制(MTS)原理(完整版)

    MySQL 5.6并行复制架构 MySQL 5.7并行复制原理 Master 组提交(group commit) 支持并行复制的GTID slave LOGICAL_CLOCK(由…

    数据库 2023年5月24日
    096
  • firewall 命令简单操作

    Firewalld 是维护防火墙策略的守护程序的名称。使用 firewall-cmd 命令与防火墙配置进行交互, 使用区域概念对与系统交互的流量进行分段。网络接口分配给一个或多个区…

    数据库 2023年6月14日
    071
  • 浏览器书签插件配置

    准备远程Git仓库(目前只支持Gitee) 登录后创建仓库(如没有账号请自行注册) 配置Token 进入设置页面配置私人令牌 新增一个令牌(权限) 保存好生成的令牌,此令牌后续无法…

    数据库 2023年6月9日
    073
  • Ubuntu 服务器安装 MySQL 远程数据库

    在 Web 项目中,我们需要使用到远程数据库,开发阶段也需要连接并查看数据库的状况。腾讯云、阿里云等云平台提供了远程数据库,可直接使用;当然也可以自己在部署 Web 的服务器上安装…

    数据库 2023年5月24日
    062
  • Resilience4j 实践

    微服务设计模式 – circuit breaker circuit breaker 熔断器,在很多不同的领域都有这个定义,例如电路里面的熔断器,股票行业里面的熔断,当然…

    数据库 2023年6月11日
    087
  • 我竟然才知道slf4j里还有个MDC

    大家好久不见,我是walking。今天给大家带来一个日志方面的知识——MDC,不知道大家认识不,反正我是最近刚知道的😂 初见MDC 前两天看项目中的代码,无意中看到一个自定义的线程…

    数据库 2023年6月11日
    0141
  • 手把手教你定位线上MySQL锁超时问题,包教包会

    昨晚我在床上睡着了,突然来了一条短信。 [En] I was asleep in bed last night when suddenly a text message came….

    数据库 2023年5月24日
    070
  • 20 年老程序员告诉你的 20 条编码原则

    我从 1999 年就开始了编程生涯,到今年已经有 20 多年了。我先是从 Basic 开始,很快转到了 Pascal 和 C 语言,然后又学习了面向对象编程语言 Delphi 和 …

    数据库 2023年6月14日
    084
  • 数据库设计案例

    简单构建设计数据库 数据库设计案例 描述:简单构建设计数据库 sql代码实现 /* 数据库设计案例 */ — 音乐表 CREATE TABLE Music ( title VAR…

    数据库 2023年6月16日
    092
  • 如何在电脑上配置Vue开发环境

    一,开发环境 : Node JS(npm) Visual Studio Code(前端IDE) 安装NodeJS 下载地址: nodejs中文网 Visual Studio Cod…

    数据库 2023年6月11日
    080
  • 自定义 systemd service

    Red Hat Linux 自 7 版本后 采用systemd 形式取代原先 init ,用户可以参考 系统service 创建自己的service ,以便于日常统一管理,系统se…

    数据库 2023年6月15日
    081
  • docker部署redis集群

    docker部署redis集群 1.0 安装环境 1.1 安装Centos7 Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docke…

    数据库 2023年6月9日
    074
  • Python递归遍历目录并删除文件中的前N行

    1 import os 2 3 # 遍历目录下的所有文件 4 def check_file(file_path): 5 os.chdir(file_path) 6 print(os…

    数据库 2023年6月14日
    073
  • Vue(十一)—key特殊attribute

    预期: number | string | boolean (2.4.2 新增) | symbol (2.5.12 &#x65B…

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