Linux编程
文章平均质量分 86
Linux编程相关文章
zsky_01
嵌入式软件工程师,专注于 RTOS、Linux、C/C++。【一起学嵌入式】
展开
-
Linux编程入门(19)-信号(上)
公众号【一起学嵌入式】,专注RTOS、Linux、C引言在 Linux 终端运行一个程序后,如果要终止其运行,会通过键盘输入 Ctrl-C。这背后蕴含着怎样的处理机制呢?其实,当输入 Ctrl-C 后,会产生一个中断信号(SIGINT)。shell 接收到这个信号后,就会结束当前正在执行的工作,并将控制返回到 shell 主循环中,再次向用户呈现 shell 的提示符。本文来学习一下 Linux 中的信号:基本概念以及它的使用。信号是什么信号是 Linux 中一个简单而重要的概念。信号是事件.原创 2022-02-12 12:28:25 · 917 阅读 · 0 评论 -
Linux 一道关于 fork 的笔试题
题目阅读下面的代码,显示终端会打印出几个 hello world?#include <sys/types.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>int main(){ fork(); fork(); fork(); printf("hello world\n"); exit(0);}答案是多少呢?我们一起分析一下。原理分析关于 forkfork原创 2022-01-18 09:35:54 · 788 阅读 · 0 评论 -
Linux编程入门(18)-进程(六)实现 shell
什么是 shellLinux 系统中,shell 是一个特殊的应用程序,它可以管理进程和运行程序。Linux 中有很多种 shell,每种都有自己的风格和优势。常用的 shell 都有三个主要的功能:运行程序例如,ls、cd、date 等都是一些普通程序,用 C 语言编写,并被编译成机器语言。shell 将它们载入内存并运行。也可以认为 shell 是一个程序启动器。管理输入和输出shell 不仅可以运行程序,还可以使用符号 <、> 和 | 将输入、输出重定向。告诉 shell原创 2022-01-02 00:27:18 · 1232 阅读 · 0 评论 -
Linux编程入门(17)-进程(五)运行全新的程序
前两篇文章介绍了进程的创建、退出,以及父进程等待子进程退出等相关内容:进程的创建和退出: Linux编程入门(15)-进程(三)编程 父进程等待子进程: Linux编程入门(16)-进程(四)等待子进程 在进行综合例程之前,还需弄明白一个问题:新创建的进程如何一个全新的程序?前面介绍过,父进程通过调用系统函数 fork() 创建一个子进程,子进程与父进程共用指令码,且子进程从 fork() 返回之后的指令码开始执行。有时候,在创建一个新进程之后,需要执行另一个程序,即运行一个全新的程序原创 2021-12-31 14:12:59 · 627 阅读 · 0 评论 -
Linux编程入门(16)-进程(四)等待子进程
上一篇介绍了进程的创建和退出,以及相关的系统函数。Linux编程入门(15)-进程(三)编程 这篇主要讲讲,子进程退出后,父进程如何获取其退出状态。有的应用程序,需要父进程知道子进程何时终止或退出,以及其返回给父进程的状态值信息。那么,父进程在创建完成子进程后,有没有办法获知子进程的退出状态?答案是肯定的。Linux 提供了系统函数 wait(),用于检测子进程的终止情况。系统函数 wait()系统函数 wait() 主要做两件事:暂停调用它的进程,直到有子进程退出。获取子进程结束时传递原创 2021-12-30 09:30:06 · 1204 阅读 · 3 评论 -
Linux编程入门(15)-进程(三)创建和终止
前面两篇文章学习了进程相关的理论基础,本文开始学习进程编程。Linux编程入门(13)-进程(一)Linux编程入门(14)-进程(二)创建进程系统函数 fork()Linux 提供了系统调用 fork() 用于创建一个新进程,其函数原型为:#include <sys/types.h>#include <unistd.h>pid_t fork(void);如果调用成功,函数 fork() 在父进程中返回子进程的 ID;在子进程中返回 0。若调用失败,则在父进程原创 2021-12-29 09:19:42 · 225 阅读 · 2 评论 -
Linux编程入门(14)-进程(二)
上一篇文章简单介绍了文件系统的基础知识,这篇继续学习文件系统的内容。Linux编程入门(8)-文件系统初步创建文件的过程文件有内容和属性,内核将文件内容存放在数据区,文件属性存放在 i 节点,文件名存放在目录中。创建一个新文件的主要操作步骤如下:1、存储属性先找到一个空的 i 节点,然后内核把文件的信息记录在这个 i 节点中。2、存储数据根据文件内容的大小,申请能够存储这个文件的磁盘块(假如需要 n 个磁盘块)。内核从空闲磁盘块列表中找出 n 个自由块。将文件内容存放在这些自由磁盘块中。3原创 2021-12-28 12:54:29 · 610 阅读 · 0 评论 -
Linux编程入门(13)-进程(一)
学习 Linux 编程,非常重要的一个知识点,便是进程。那进程是什么?如何用进程编写程序呢?让我们逐步揭开进程的面纱,攻克它,使得进程为我所用。基础内容什么是进程运行一个程序意味着将机器指令序列载入内存,然后让 CPU 逐条执行这些指令。进程便是程序运行时的内存空间和设置。还有一种经典定义,进程是一个执行中程序的实例。Linux 在执行一个程序时,内核会将程序指令代码载入虚拟内存,为程序变量分配内存空间,建立记录进程信息的数据结构(如,进程 ID、用户 ID、组 ID、终止状态等)。从内核角度来看原创 2021-12-27 00:28:41 · 649 阅读 · 0 评论 -
Linux编程入门(12)-理解系统调用过程
Linux 提供了具有良好定义、数量有限、直接进入内核的入口点,这些入口点被称为系统调用。前面的文章学习了 Linux 文件以及文件系统操作的基础知识,并介绍了一些系统调用函数。那么应用程序在调用系统函数时,内核的处理流程是怎样的呢?在 Linux 系统中,分为用户空间和内核空间。从系统安全和稳定方面考虑,用户空间的程序不能直接执行内核代码或者操作内核数据。但是,内核以 API 的形式,提供了一系列服务供应用程序访问,是为了从内核获得某项服务或资源。系统调用过程从编程角度来说,系统调用与 C 语言函原创 2021-12-27 00:26:54 · 828 阅读 · 0 评论 -
Linux编程入门(11)-设备文件
前面的文章学习了文件与目录相关的内容,并通过编程来加深理解。本文学习如何对外部设备进行操作的基础知识。在 Linux 系统中,一切皆文件。设备也可以抽象地认为是一种文件。在 Linux 系统中访问外部外部设备,可以将设备当成普通文件,对其进行读写操作。例如,键盘和显示器与普通文件类似。键盘输入的数据能够被程序读取,而一个进程把写入终端的字符显示在屏幕上。每个设备都有一个文件名、一个 i-节点 号、文件所有者、权限位集合以及最近修改时间等内容。设备文件名每个加载到 Linux 机器的设备(终端、鼠标原创 2021-12-22 15:20:39 · 1065 阅读 · 0 评论 -
Linux编程入门(10)-理解目录(实现 pwd)
前两篇文介绍了文件系统的构成和文件系统的工作过程:Linux编程入门(8)-文件系统初步Linux编程入门(9)-文件系统的工作过程这篇来聊聊文件系统的目录结构以及目录树相关的系统调用。原创 2021-12-21 09:57:46 · 236 阅读 · 0 评论 -
Linux编程入门(9)-文件系统的工作过程
Linux编程入门(9)-文件系统的工作过程上一篇文章简单介绍了文件系统的基础知识,这篇继续学习文件系统的内容。原创 2021-12-21 09:54:35 · 355 阅读 · 0 评论 -
Linux编程入门(8)-文件系统初步
文件系统是对常规文件和目录组织的集合。用于创建文件系统的命令是 mkfs。Linux 的强项之一便是支持种类繁多的文件系统 。从 Linux 专有文件 /proc/filesystems 中可以查看当前内核支持的文件系统类型。从用户角度看文件系统从用户角度来看,Linux /Unix 系统将硬盘上的文件组成一棵目录树。每个目录能包含文件或其他目录。通过 tree 指令可以查看某个目录结构管理目录常用指令cd 切换目录mkdir 创建指定目录或多个目录rmdir 删除一个空目录mv原创 2021-12-20 09:23:18 · 453 阅读 · 0 评论 -
Linux编程入门(7)-目录与文件的特殊属性
Linux编程入门(7)-目录与文件的特殊属性回顾前面两篇文章学习了目录和文件的相关属性:Linux编程入门(5)-读取目录(ls 初步实现)Linux编程入门(6)-读取目录与文件的属性(ls 进阶)文件属性信息结构体 struct stat 定义如下:struct stat { dev_t st_dev; /* ID of device containing file */ ino_t st_ino; /* i节点号 */ mod原创 2021-12-15 23:54:16 · 103 阅读 · 0 评论 -
Linux编程入门(6)-读取目录与文件的属性(ls 进阶)
前言上一篇文章学习了如何读取目录内容,并通过编程简单实现了 ls 指令。上篇文章链接为Linux编程入门(5)-读取目录(ls 初步实现)ls 指令如果有选项 -l ,会显示文件的详细信息(如文件大小、文件所有者、修改时间等)。那如何获取这些信息呢?下面,让我们来一起分析、学习。学习目标通过分析指令 ls -l ,来学习 Linux 目录和文件属性相关的知识。代码实验环境操作系统:Ubuntu 18.04 LTS编译器 gcc 版本:gcc (Ubuntu 7.5.0-3ubuntu1~18原创 2021-12-15 23:49:19 · 715 阅读 · 0 评论 -
Linux编程入门(5)-读取目录(ls 初步实现)
学习目标通过分析 ls 指令,来学习 Linux 目录和文件属性相关的知识。代码实验环境操作系统:Ubuntu 18.04 LTS编译器 gcc 版本:gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0ls 指令介绍ls 指令可以列出目录中所有文件的名字,以及这些文件的其他信息。在命令行输入 ls:$ lsbin etc lib media root srv usrboot home原创 2021-12-14 17:41:52 · 1668 阅读 · 0 评论 -
Linux编程入门(4)-改变文件的读写位置
当对某个文件进行操作时,我们可以指定文件的读/写位置吗?答案是:当然可以。让我们一起来学习下,如何设置文件的操作位置。文件读写位置Linux系统每次打开一个文件,内核会用一个指针来记录该文件的偏移量,有时也称为读写偏移量或指针。文件偏移量是指执行下一个 read() 或者 write() 操作的文件起始位置,通常是非负整数,用以度量从文件开始处计算的字节数。文件内第一个字节的偏移量为 0。文件打开时,文件偏移量的值设置为指向文件的开头。以后每次读或者写将自动对其进行调整,以指向已读或已写数据的下一个字原创 2021-12-12 21:40:06 · 2222 阅读 · 0 评论 -
Linux编程入门(3)-文件读写操作(cp指令实现)
学习目标通过分析 cp 指令,来学习 Linux 编程读写文件操作。代码实验环境操作系统:Ubuntu 18.04 LTS编译器gcc版本:gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0cp指令介绍cp 指令主要用于复制文件或者目录。典型用法:cp [options] source dest详细的选项参数说明可以查阅相关资料。此处只介绍 cp 指令复制文件的功能。如果目标文件 dest 不存在,则 cp 会创建这个文件。如果存在,则用 source 文件原创 2021-12-12 21:37:20 · 1499 阅读 · 0 评论 -
Linux编程入门(2)-实现who指令
上一篇简单介绍了Linux系统编程的一些概念知识,从本篇文章开始,从解释系统命令的功能入手,由浅入深,逐步讲解Linux系统编程。建议学习者最好具有一定的C语言基础,了解数组、结构体、指针和链表的概念。代码实验环境操作系统:Ubuntu 18.04 LTS编译器gcc版本:gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0学习目标通过分析who指令,来学习Linux的读文件操作。who指令介绍Linux为多用户操作系统,有时候需要查看系统是否繁忙,某人是否正在使用原创 2021-12-10 09:02:56 · 1507 阅读 · 0 评论 -
Linux编程入门(1)-理解系统编程
操作系统职责:计算机用操作系统来管理所有的资源,并将不同的设备和不同的程序连接起来。操作系统与普通程序一样,在内存中运行。它的特殊之处是,能把普通程序与其他程序或者设备连接起来。原创 2021-12-10 08:00:00 · 382 阅读 · 0 评论 -
Linux编程入门-目录与文件的特殊属性
回顾前面两篇文章学习了目录和文件的相关属性:Linux编程入门(5)-读取目录(ls 初步实现)Linux编程入门(6)-读取目录与文件的属性(ls 进阶)文件属性信息结构体 struct stat 定义如下:struct stat { dev_t st_dev; /* ID of device containing file */ ino_t st_ino; /* i节点号 */ mode_t st_mode; ...原创 2021-11-23 09:18:38 · 186 阅读 · 0 评论