Linux学习笔记8

介绍man命令

在Linux中,man命令用于查看系统手册页(manual pages)。系统手册页是关于各种Linux命令、函数库以及系统调用的详尽文档,能够提供关于命令的使用方法、参数说明、示例以及其他相关信息

可以利用man xxx的命令去查找某个函数某个命令的用法

inode

每一个文件都有一个索引节点inode,inode 是由文件系统提供的唯一数值编址,这个数
值称为inode 编号。索引节点是唯一的,同一个系统下,每一个索引节点对应一个文件(目录
也可以当做文件),可以把inode理解成身份证号。

可以用“ls -i”去查看索引节点

man去查询测试mkdir文件

先在终端输入命令“man 2 mkdir”,之后下拉找到

再往下的SEE ALSO会介绍相关的函数

测试代码

#include<stdio.h>//mkdir函数头文件
#include<sys/stat.h>
#include<sys/types.h>
int main(int argc,char *argv[]){
int ret;
//检测参数
if(argc <2)
{printf("\n Please input file path\n");return 1;}
//使用mkdir函数新建目录
ret = mkdir(argv[1],0777);
if(ret<0)
{printf("mkdir %s failed!\n",argv[1]);return 1;}
printf("mkdir %s suceces!\n",argv[1]);
return 0;}

代码分析:

main里的参数: argc 是命令行参数的数量,argv 是一个指向参数字符串数组的指针

if语句检查命令行参数的数量,如果少于 2 个(即没有输入文件路径),则打印提示信息并返回 1,表示程序运行出错

注释:命令行参数的数量是指在运行程序时通过命令行输入的参数的个数,其中第一个参数通常是程序的名称(例如 ./myprogram),后续的参数可以是用户自定义的,所以按理我们应该会输入文件路径,加上原有的文件名称,应该是有两个命令行参数

argv[1] 是第二个命令行参数,即用户输入的文件路径

之后可以用U盘拷贝到开发板的方法去运行这个测试程序

使用man 学习link 函数

在Linux系统中,硬链接是一种特殊的文件链接方式,它允许一个文件拥有多个不同的文件名,但实际上它们都指向同一个inode,比如目录1和2的索引节点是一样的,这两个其实都是指向同一个文件,就像一个人有学号和名字一样,指的都是同一个人,这种情况就是属于linux 文件中的硬链接。

和硬链接对应的是软链接,也可以叫符号链接或者symlinks,软连接不是文件系统的文件
名和inode 的映射,而是一种指针。换句话说,符号链接就像是一个快捷方式,它指向另一个文件或目录

link函数:

使用命令“man 2 link”,之后有

int link(const char *oldpath, const char *newpath);
参数*oldpath:已有的文件路径。
参数*newpath:新建的硬链接文件路径。

#include<studio.h>
#include<unisted.h>
int main(int argc,char *argv[]){
int ret;
if(argc <3)
{
printf("\nPlease input file path\n");
return 1;
}
//测试1ink函数
ret = link(argv[1l,argv[2]);
if(ret){
printf("link failed");
return 1;}
printf("link %s to %s success!\n",argv[1],argv[2]);
return 0;}

编译程序为可执行程序后,将文件拷至U盘,后在开发板上运行,则可见

之后用ls -i可见linktest和linktest.c文件的inode是一样的

Linux里的进程

大家几乎都是先学单片机再来学Linux的,在单片机里,我们知道其实主要是对一些寄存器进行控制,比如在某个寄存器里写入1就可以实现中断等等。而Linux是一种操作系统,和裸机对比起来,操作系统有更多的软件资源,可以调用函数去实现多任务运行,而不是像单片机一样去用中断实现一些操作。

先理解程序,何为程序,就是我们上面的那些例程,如果程序比较大,就可以称为应用

很多人不是很清楚线程,进程和程序的区别:

进程是正在执行的程序,可以把线程理解成轻量级的进程(记住“轻量级”这个特点),而且进程是分配资源的最小单位,属于同一个进程的线程由于没有被单独分配资源,所以它们都是共享进程的资源的(如地址空间等),但是每个线程会拥有独属于自己的栈

在Linux系统里可以通过“top”命令去查看在运行的线程(类似于Windows的任务管理器)

进程id

在n时刻,每个进程都有一个唯一的id,比如进程A在n时刻的id是100(但是假如在n+s时刻,可能会有进程B的进程也是100的情况),进程的id在固定的时刻是唯一的。

进程ID通常是一个正整数值,范围可以根据操作系统的不同而有所不同。在大多数系统中,进程ID从1开始递增,直到达到最大值后再从1重新开始分配(分配的都是已死的进程)。

进程ID为1的进程通常是init进程,它是系统启动时由内核创建的,是第一个用户级进程。除了init 进程,其它进程都是由其它进程创立的。创立新进程的进程叫父进程,新进程叫子进程。

使用命令“man 2 getpid”

橙色部分说明了这两函数:

getpid是获取进程号的            getppid是获取父进程号的’

我们编写测试程序,可以直接定义pid_t id1/id2,之后就直接调用getpid函数和getppid函数

然后可以将测试文件编译成可执行文件,到开发板执行后可以看见进程和其父进程的id

exec 函数族

exec函数族允许我们将当前进程替换为另一个进程,并且新进程可以继承原进程的一些资源

函数族包括

这些exec函数族中的函数实际上是用于在当前进程中执行一个新的程序,当调用这些函数时,当前进程的内容会被替换为新程序的内容,但进程的标识(如进程ID)以及其它一些属性(如进程的父子关系)通常会被保留

fork函数

fork函数会将原始进程(称为父进程)完全复制一份,包括代码、数据、堆栈等。然后,这个复制的进程就成为了新的子进程。父进程和子进程是两个独立的进程,它们各自有自己的内存空间和执行流程

在fork函数调用完成后,会返回两次。对于父进程,fork函数的返回值是子进程的进程ID,而对于子进程,fork函数的返回值是0。这样,通过检查返回值,我们可以确定当前代码正在哪个进程中执行,从而采取不同的操作

#include <stdio.h>
#include <unistd.h>

int main() {
    pid_t pid;  // 进程ID
    int n = 100;  // 初始值

    pid = fork();  // 创建一个新进程

    if (pid == -1) {  // 如果出错
        printf("Error: Failed to create child process.\n");
        return 1;
    }
    else if (pid == 0) {  // 子进程
        printf("Child process: PID=%d, n=%d\n", getpid(), ++n);  // 修改n值,并输出
    }
    else {  // 父进程
        printf("Parent process: PID=%d, n=%d\n", getpid(), n);  // 输出n值
    }

    return 0;
}

会输出

Child process: PID=2678, n=101
Parent process: PID=2677, n=100

n的值其实暗示了我们刚刚所说的“父进程和子进程是两个独立的进程,它们各自有自己的内存空间和执行流程”,子进程修改自己n的值是不会影响父进程的

进程终止exit:

当调用exit函数时,当前进程将会立即终止,并返回操作系统。同时,exit函数还会将终止状态传递给操作系统,供父进程获取

#include <stdio.h>
#include <stdlib.h>

int main() {
    printf("This is before the exit function\n");
    exit(0);
    printf("This is after the exit function\n");  // 这行代码不会执行
    return 0;
}

最后输出“This is before the exit function”

总之,exit函数可以立即终止当前进程,并传递一个状态值给操作系统,用于标识进程的终止状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/678133.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索气象数据的多维度三维可视化:PM2.5、风速与高度分析

探索气象数据的多维度可视化&#xff1a;PM2.5、风速与高度分析 摘要 在现代气象学中&#xff0c;数据可视化是理解复杂气象模式和趋势的关键工具。本文将介绍一种先进的数据可视化技术&#xff0c;它能够将PM2.5浓度、风速和高度等多维度数据以直观和动态的方式展现出来。 …

Facebook与AI:探索人工智能在社交平台上的应用

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;社交媒体平台正利用这些先进技术为用户提供更为个性化和高效的体验。作为全球最大的社交媒体平台之一&#xff0c;Facebook在AI应用领域的探索和实践尤为引人注目。本文将深入探讨Facebook如何在其平台上应用…

23-通过JS代码处理click失效问题

有时候按钮元素已经定位到了&#xff0c;运行也没报错&#xff0c;点击后页面没有反应。这种问题是比较头疼的&#xff0c;因为没有任何报错&#xff0c;只是click事件失效了。本篇用两种方法解决这种诡异的点击事件失效问题。 一、遇到的问题 在百度的搜索设置中&#xff0c;…

VisionPro界面乱序或字体排版异常,字体不适应界面窗口大小

很多人在安装Visionpro后都遇到了一个界面显示异常的问题&#xff1a; 打开visionpro后字体大小不统一,显示不全或显示在其他窗口之上&#xff0c;如下所示。 解决该问题&#xff0c;首先关闭Visionpro软件&#xff0c;右击软件选择属性->兼容性。勾选兼容模式下面的方框。…

2024年6月4日13:48:07-3.8功能说明1.保存草稿2.支持自定义SKU销售规格3.全网爆款企划支持一键提交

创建产品产品保存草稿、自定义编辑规格功能使用手册 尊敬的淘工厂商家&#xff1a; 淘工厂近两个月收到很多商家对淘工厂发品&#xff08;上品&#xff09;效率提升的改进建议&#xff0c;淘工厂本月将针对产品发布页的发品效率提升上线一系列改进功能&#xff0c;希望能加速…

存内计算:硬件的未来,今日已来

引言 存内计算的概念 存内计算&#xff08;In-Memory Computing, IMC&#xff09;是一种创新的计算架构&#xff0c;它颠覆了经典的冯诺依曼范式&#xff0c;其中数据和指令存储与数据处理是分开的。在存内计算模型中&#xff0c;计算单元被直接集成到存储器内部&#xff0c;…

了解CAN功能

了解CAN功能&#xff0c;学习CAN功能&#xff0c;理解CAN和串口的区别&#xff0c;以及它和RS485的相似之处。 1、“多主机”特性 在CAN网络通讯中&#xff0c;无需其它设备同意&#xff0c;每个CAN设备都可以主动向外发送数据&#xff0c;且所有设备都会收到数据&#xff0c…

基于springboot实现智慧校园之家长子系统项目【项目源码】计算机毕业设计

基于springboot实现智慧校园之家长子系统演示 SpringBoot框架介绍 本课题程序开发使用到的框架技术&#xff0c;英文名称缩写是SpringBoot&#xff0c;在JavaWeb开发中使用的流行框架有SSH、SpringBoot、SpringMVC等&#xff0c;作为一个课题程序采用SSH框架也可以&#xff0c…

钙钛矿电池产业化进程加快 狭缝涂布机市场需求空间广阔

钙钛矿电池产业化进程加快 狭缝涂布机市场需求空间广阔 狭缝涂布机即狭缝式涂布设备&#xff0c;是一种将涂料均匀、精密涂布在样品表面的设备。狭缝涂布机通常由涂布模头、喷嘴、刮刀、供液泵、运动平台等部分组成&#xff0c;通过控制供液泵及速率&#xff0c;将涂料从喷嘴挤…

Mendix 创客访谈录|Mendix助力开发高手10日交付复杂应用,且支持移动端呈现

本期创客 莊秉勳 布鲁科技技术顾问 各位Mendix社群的夥伴好&#xff0c;我是莊秉勳&#xff0c;大家也可以叫我Danny。 我大學是資訊科學背景&#xff0c;在與Mendix相遇前&#xff0c;曾在一上市製造企業&#xff0c;擔任軟體工程師&#xff0c;負責企業內部軟體開發&#xf…

【iOS】Runtime

文章目录 前言一、Runtime简介二、NSObject库起源isaisa_t结构体cache_t的具体实现class_data_bits_t的具体实现 三、[self class] 与 [super class]四、消息发送与转发五、Runtime应用场景 前言 之前分part学习了Runtime的内容&#xff0c;但是没有系统的总结&#xff0c;这篇…

如何安装“Whistle客户端”在Windows系统?

一、下载 https://github.com/avwo/whistle-client?tabreadme-ov-file 二、安装 按照正常的应用程序进行安装 三、安装根证书 1、 2、下载证书后&#xff0c;双击证书&#xff0c;根据指引安装证书。证书安装过程&#xff0c;要确保证书存储到受信任的根证书颁发机构下。重…

指纹考勤系统

目录 1.课题研究目的和内容 1.1 课题研究目的 1.2 课题研究内容 2.系统总体方案设计及功能模块介绍 2.1总体方案设计 2.2 ATK-301模块介绍 2.3 TFTLCD显示功能模块介绍 2.4 蜂鸣器报警功能模块介绍 2.5 时钟模块介绍 3.系统硬件设计与实现 3.1 系统硬件电…

深度解析淘宝API接口:功能、限制与最佳实践

在当今日益繁荣的电商领域&#xff0c;淘宝作为中国最大的电子商务平台之一&#xff0c;其API接口为开发者提供了丰富的功能和数据资源。本文将深入解析淘宝API接口的功能、限制&#xff0c;并分享一些最佳实践&#xff0c;帮助开发者更好地理解和使用这些接口。 一、淘宝API接…

迎七一党史知识竞赛答题怎么做

迎七一党史知识竞赛答题&#xff0c;不仅是对于党史知识的检验&#xff0c;更是对于参赛者学习态度和综合能力的考量。在参与这类竞赛时&#xff0c;我们需要做好充分的准备&#xff0c;掌握一定的答题技巧&#xff0c;才能取得好的成绩。 首先&#xff0c;我们要深入了解竞赛…

Exception异常机制详细讲解

目录 一、异常1.1 什么是异常1.2 异常机制的作用1.3 常见的异常2.3 异常的分类1. Error2. Exception① 运行时异常② 编译期异常总结&#xff1a; 二、异常的处理2.1 抛出异常3.1 抛出异常语法3.2 试图捕获异常3.3 捕获异常与抛出异常的区别1. 抛出异常2.捕获异常 三、finally四…

# 全面解剖 消息中间件 RocketMQ-(5)

全面解剖 消息中间件 RocketMQ-&#xff08;5&#xff09; 一、RocketMQ &#xff1a;过滤消息的两种方式 1、Tag 过滤 在大多数情况下&#xff0c;TAG 是一个简单而有用的设计&#xff0c;其可以来选择您想要的消息。 例如: DefaultMoPushconsumer consumer new DefaultM…

新项目来了,JDK 17和JDK 21 该如何选择?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

FPGA Verilog模块化设计入门篇一

随着电子技术的快速发展&#xff0c;现场可编程门阵列&#xff08;FPGA&#xff09;已成为现代电子系统设计中不可或缺的一部分。FPGA的灵活性、可重构性和高性能使得它成为处理复杂算法、加速数据处理和实现特定功能的理想选择。然而&#xff0c;随着系统复杂性的增加&#xf…

抢拍寄售模式:引领行业潮流的新商业引擎

在如今竞争激烈的市场中&#xff0c;企业的成功不仅依赖于产品和服务的质量&#xff0c;更在于能否把握市场趋势&#xff0c;采用创新的商业模式来推动增长。今天&#xff0c;我将详细介绍一种新兴的商业模式——抢拍寄售模式。这种模式以其独特的业务流程和逻辑&#xff0c;正…