IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux 系统编程 -> 正文阅读

[系统运维]Linux 系统编程

Linux系统编程入门

静态库的制作

Linux中:
静态库的命名格式为:libxxx.a
Windows中:
静态库的命名格式为:libxxx.lib

如何制作一个静态库(Linux):

  1. 用gcc生成.o文件
  2. 用ar工具将.o文件打包:ar rcs libxxx.a xxx.o xxx.o
    其中:
    r: 将文件插入备存文件中
    c:创建备存文件
    s:索引

静态库的使用

  1. 首先利用 g++/gcc 将 .cpp 文件 -c 成 .o 文件
  2. 然后对所有需要处理的 .o文件:ar rcs libxxx.a xx.o xxx.o
  3. 然后最后编译 main.cpp 成可执行文件,同时利用-L(寻找静态库所在的目录) -l(寻找该目录下的所需要的静态库名)
  4. 最后就完成了静态库的使用。

tips:(自言自语)文件在vscode的Linux_coding目录下。

动态库的制作和使用

Linux:
动态库的命名格式为:libxxx.so 是一个可执行文件
Windows:
动态库的命名格式为:libxxx.dll

动态库的制作:

  1. 利用g++得到 .o 文件,得到和位置无关的代码
g++  -c -fpic xxx.cpp xxx.cpp
  1. 通过 g++ 得到动态库
g++ -shared xxx.o  xxx.o -o libxxx.so

在这里插入图片描述
在这里插入图片描述

显示不能打开共享的动态库,找不到这样的文件或者目录。

动态库加载失败的原因及解决方法
g++链接时,动态库的代码不会被打包到可执行程序之中。也就是不能直接 ./main 运行

可以使用 ldd main查看可执行程序的链接情况:
在这里插入图片描述
发现没找到我们需要的这个动态链接库

解决动态库加载失败的问题
法一:临时配置:
在这里插入图片描述
此时利用echo命令,发现环境变量被拼接上去了:
在这里插入图片描述
并且我们使用ldd main去查看路径:
在这里插入图片描述
可以发现现在我们自定义的动态库也可以被找到了

此时我们就解决了动态库加载失败的问题了。

法二:用户配置:

  1. 我们使用cd 到根目录下:
    在这里插入图片描述

  2. 有个.bashrc文件,配置它就好了:

  3. 利用 vim .bashrc 进入该文件,在最后一行加入法一提到的命令:
    在这里插入图片描述

  4. 然后esc,输入:wq保存并退出,为了使其生效:
    在这里插入图片描述
    此时就解决了动态库的加载问题。

静态库和动态库的对比

在这里插入图片描述

静态库和动态库的区别:
来自于连接阶段如何处理,连接成可执行程序。 分别成为静态链接方式动态链接方式
静态库制作过程
动态库制作过程
静态库的优缺点
动态库的优缺点

Makefile

在这里插入图片描述
总结来说:Makefile就是程序化编译及复杂操作的工具,省时省力。

有关Makefile的详细用法,暂时跳过,等到大型工程时再回来学。(学了不用容易忘

GDB调试

什么是GDB

准备工作
一定要记得 -O

g++ -g -Wall prog.cpp -o prog

给程序设置参数:set args +参数
查看设置的参数:show args
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

info break 查看断点信息
break 9 在第九行打断点
在这里插入图片描述

标准C库的文件IO函数和Linux系统IO函数对比

标准C库IO函数
标准C库IO函数带有缓冲区,而LinuxIO函数没有缓冲区。
在这里插入图片描述

open函数

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
    //fd是文件描述符
    int fd  = open("a.txt",O_RDONLY);
    if(fd==-1)
    {
        perror("open");
    }
    //关闭
    close(fd);
    return 0;

}

在这里插入图片描述

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<unistd.h>
#include<stdio.h>
/*
    int open(const char *pathname, int flags, mode_t mode);
    mode & ~umask
*/
int main()
{
    //创建一个新的文件
    int fd = open("crea.txt",O_RDWR | O_CREAT,0777);
    if(fd==-1)
    {
        perror("open");
    }

    //关闭文件描述符
    close(fd);
    return 0;

}

Linux多进程开发

进程概述

并行:在同一时刻,有多条指令在多个处理器上同时执行
并发:在同一时刻,只能有一条指令执行,但是多个指令被快速地轮换执行,使得在宏观上具有多个指令同时执行的效果。但是实际上并不是同时执行的,只是把时间分成若干段,多条指令有序交错执行的宏观表现

进程控制块:
在这里插入图片描述

ulimit -a  //查看内核信息
//unlimit后面加上对应的参数可以修改对应的默认数值,但是一般不建议修改

在这里插入图片描述

进程状态转换

  1. 三态模型:运行态、就绪态、阻塞态
    在这里插入图片描述
  2. 五态模型:新建态、就绪态、运行态、阻塞态、终止态
    在这里插入图片描述
    进入终止态后,这个进程就不会被执行了,但是依然保存在操作系统中等待善后,一旦其他进程完成了对终止态的信息抽取后,操作系统将删除该进程。

在这里插入图片描述
top命令:动态查看进程信息
top -d 0.1 :0.1秒刷新一下

进程创建

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:35:20  更:2022-03-06 13:36:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:12:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码