C++笔记——linux系统编程入门

Linux下C++开发 Linux属于多用户多任务操作系统,而Windows属于单用户多任务操作系统Linux一切皆文件目录结构bin存储二进制可执行文件dev存放的是外接设备,例如磁盘,光盘等。在其中的外接设备是不能直接被使用的,需要挂载etc主要存储一些配置文件home表示除了root用户以外,其它用户的家目录,类似于Windows下的User/用户目录proc全称process,表示进程,该目录存储的是Linux运行时候的进程root该目录是root用户自己的家目录sbin全称。 阅读详情

linux系统编程入门

GCC

  1. GCC(GNU Complier Collection,GNU编译器套件)
  2. GCC可以编译c、c++、java、Go、Ada、objective-C语言

GCC工作流

在这里插入图片描述

静态库

  1. 库文件是计算机上一种文件,看成一种代码仓库,提供一些可以直接拿来用的变量、函数或类
  2. 库是一种特殊的程序,只是不能单独运行
  3. 静态库:在程序链接阶段被复制到了程序中

静态库制作

  1. 命名规则
    在这里插入图片描述
  2. 制作规则
    在这里插入图片描述

静态库使用

  1. 创建一个.h头文件,里面声明我们要封装的那些函数
  2. 使用gcc把我们的.c文件编译成.o文件
  3. 使用ar rcs 制作成静态库
  4. 在我们自己的程序中包含静态库的头文件
  5. 编译我们自己的程序
  6. 把库给别人使用的时候,需要把 .a 和 .h文件都需要给别人

动态库

  1. 库文件是计算机上一种文件,看成一种代码仓库,提供一些可以直接拿来用的变量、函数或类
  2. 库是一种特殊的程序,只是不能单独运行
  3. 动态库:链接阶段没有被复制到程序时中,在运行时动态加载到内存中使用

动态库制作

  1. 命名规则
    在这里插入图片描述
    在这里插入图片描述

动态库使用

  1. 创建一个.h头文件,里面声明我们要封装的那些函数
  2. 使用gcc把我们的.c文件编译成.o文件
  3. 使用gcc -shared 制作成动态库
  4. 在我们自己的程序中包含动态库的头文件
  5. 编译我们自己的程序
  6. 把库给别人使用的时候,需要把 .so 和 .h文件都需要给别人

静态库和动态库优缺点

静态库

  1. 建议较小的库可以做成静态库
    在这里插入图片描述

动态库

在这里插入图片描述

文件IO

标准C库IO函数

  1. 包含头文件 #include <stdio.h>
  2. C的IO在手册第3章,使用 man 3 fopen 命令就可以查看fopen的手册,其他类似
    在这里插入图片描述
  3. 标准库函数和linux库函数的关系是调用给与被调用的关系,使用标准c库函数的时候,其底层也是调用的linux库函数。
    在这里插入图片描述

linux系统IO函数

  1. linux系统IO在手册第二章,使用 man 2 open 命令就可以查看open的手册,其他类似
    在这里插入图片描述

perror打印错误信息

  1. 他是在c标准库中的,使用方法
#include <stdio.h>
	perror("test");
//这个函数打印的是最近的报错信息,比如要监测stat函数是否执行成功,就把这句放在stat函数之后,他的参数是一个字符串,随便啥都行,写了这个参数,报错信息就会接着这个字符串打印,比较方便看

虚拟地址空间

  1. 我们说的内存地址其实一般都是说的虚拟内存地址,而不是直接说的物理内存地址
  2. MMU这个模块就完成虚拟内存和物理内存之间的映射
    在这里插入图片描述

文件描述符

  1. 文件描述符表是一个数组,最大1024,也就是说一个进程最多可以打开1024个文件
  2. 他的逻辑是,每次打开一个新文件时候,都会从表里找空闲的最小的那个去指向这个文件
  3. Linux中一切皆文件,包括设备,其实也是虚拟成文件去管理的,
    在这里插入图片描述

linux库函数open打开文件

在这里插入图片描述

linux库函数open创建新文件

  1. 新创建的文件需要给一个用户权限,通过ll命令就可以查看文件权限
  2. 每个文件的的用户权限分为三部分,当前用户权限+当前组用户权限+其他用户权限
  3. 每个用户的权限用一个8进制数表示,比如 rwx 那就是111 对应10进制就是7
    在这里插入图片描述

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

linux库函数read 和 write

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

文件拷贝demo

  1. 打开要拷贝的文件
    在这里插入图片描述
  2. 创建一个新的文件
    在这里插入图片描述
  3. 循环读写操作
    在这里插入图片描述
  4. 关闭文件
    在这里插入图片描述

linux系统库函数lseek函数

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

  1. 应用在拓展文件长度的时候,通过上面的操作之后,文件空间还不会相应的增大,这个时候还需要再写一个数据到文件中,文件才会相应的扩大,通过lseek增加的那部分空间上放的都是空数据。
  2. 比如原来有10个字节,leek增加100字节,在后面又写入一个字节,那文件最终就是111字节,其中的那100自己放的是空数据。

linux库函数stat 和 lstat

  1. stat函数,用来获取文件的信息
    1.

  2. 用来获取软链接文件的信息,比如 b 文件是 a 文件的软链接,那么使用 stat 去获取 b 的信息,得到的其实是 a 的信息,如果想要获取 b 的信息,那就许哟啊用lstat
    在这里插入图片描述

  3. stat中的结构体
    在这里插入图片描述

  4. 结构体中这个mode_t的说明
    在这里插入图片描述

linux库函数文件属性操作函数

在这里插入图片描述

access—判断文件是否存在或者判断文件权限

在这里插入图片描述

chmod—修改文件权限

在这里插入图片描述

chown—修改文件所有者或者所在组

  1. 如何查看系统内所有用户的id和组id:gedit /etc/passwd
  2. 如何查看某一用户的id:id lenovo (这里以lenovo用户举例)

truncate—修改文件大小

  1. 扩大的尺寸填充一些空数据
  2. 缩小的尺寸会被删掉
    在这里插入图片描述

linux库函数目录操作函数

在这里插入图片描述

  1. mkdir:创建文件夹
  2. rmdir:删除空文件夹
  3. rename:重命名文件夹
  4. chdir:改变当前进程的工作目录
    在这里插入图片描述6. getpwd:获取当前进程的工作目录
    在这里插入图片描述

目录遍历函数

在这里插入图片描述

  1. opendir—打开目录
    在这里插入图片描述
  2. readdir—读取目录中数据
    在这里插入图片描述
    在这里插入图片描述

dup 和 dup2 函数

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

fcntl函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
用来获取、设置文件描述符的flag
在这里插入图片描述

Linux C++ 当 accept 函数接收到新连接时,使用 std::thread 创建新线程,控制器需要协调线程的创建和执行,将 handleClient 函数分配到新线程中运行,同时使用 detach 操作,这涉及到操作系统的线程调度,也是控制器的重要体现。运算器和控制器的操作反映在程序的执行逻辑和计算操作中,合理的程序结构和算法可以提高运算器的效率,控制器的合理调度可以确保程序的正确执行顺序和资源的合理利用。变量 lines 和 line 存储在内存中,文件的内容也会存储在内存中(存储在 lines 向量中)。 阅读详情

相关推荐

【C++】Linux系统编程入门

提示:以下是本篇文章正文内容,下面案例可供参考。

love_boke的博客 2006

linux下C++编程学习

前言(废话,可略过):之前一直在windows下做C++编程,后来换后台工作接触到linux下C++开发。期间磨磨唧唧浪费了很多时间。记录下历程,给后来的小伙伴提个醒,免得浪费宝贵时间。 一、关于换系统 如果windows下习惯了快捷键操作系统,尽可能少的使用鼠标,那么,linux就是你的理想。作为C++程序员,不会用linux真的是太糟糕了(很多地方看到这个观点,此处不做辩论...

fx_odyssey的博客 2万+

牛客网C++项目-Linux高并发服务器开发之第一章:Linux系统编程入门 学习笔记

自用,不建议阅读,因为内容较为基础且繁杂,更多的是通过观看视频教学留下印象,这篇博文也是为了此后方便查找、补充相关知识点

farewellyi的博客 3465

在Linux中写C、C++代码(嵌入式入门必学)

介绍了linux中书写C和C++代码的使用。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 9141

Linux下C++编程基础

一、前提 以下环境均采用VMWare虚拟机安装CentOS6.6环境下编程。 想要在Linux上进行编辑,必须学会Linux基本编辑命令和其他基本命令 学习路径:Linux系统基础一 有编程基础。 二、安装编译器,并开始第一程序 1.安装编译器gcc &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp; g++ yum install gcc //安装gcc yum install gcc-c++ //安装g++ 2.编写第一个...

王涛的博客 4万+

【专栏必读】王道考研408操作系统+Linux系统编程万字笔记使用说明及章节导航

王道408考研操作系统)第一章计算机系统概述-第一节1、2:操作系统概念、概念和特征1:理解fork的作用prinf("还没有执行fork函数的本进程为:%d\n" , getpid());//其返回值是pid类型的 sleep(1);if(ret > 0) //父进程返回的是子进程ID {printf("我是父进程,我的id是:%d,我的孩子id是%d\n" , getpid() , ret);sleep(1);} } else if(ret == 0) //子进程fork返回值是0 {.........

快乐江湖的博客 3万+

C++web服务器项目学习笔记-第1章 Linux系统编程入门

GCC 原名为 GNU C语言编译器 (GNU C Compiler)GCC (GNU Compiler Collection,GNU编译器套件)是由 GNU 开发的编程语言译器。GNU 编译器套件包括 C、C++、Objective-C、Java、Ada 和 Go 语言前端,也包括了这些语言的库 (如 libstdc++,libgcj等)GCC 不仅支持 C 的许多“方言”,也可以区别不同的 C 语言标准,可以使用命令行选项来控制编译器在翻译源代码时应该遵循哪个 C 标准。

moran的博客 1382

聊聊我是如何编程入门的

对于编程而言,可以做项目就算编程入门了,做到以下四点我觉得就可以入手做一些项目: 需要掌握至少一门编程语言,例如,C/C++或者Java; 需要学习数据结构与算法,至少掌握常见的数据结构与算法; 需要学习数据库知识,因为做项目几乎离不开数据库,数据库必须掌握; 掌握一门技能,例如后端开发、web开发、移动端开发、人工智能等; 当然上道后,还需要进一步精进,可以学习操作系统,计算机网络,计算机组织原理、汇编等相关专业课程。 就我个人而言,本科是电子信息专业,读研是通信与信息系统,在计算机学院,也不完全是计

编程与实战的博客 9532

《C++高并发服务器笔记——第一章Linux系统编程入门》

接下来进行预处理操作(test.c为需要预处理的源代码,test.i为要生成的目标代码)汇编操作(生成汇编代码)生成而二进制文件将生成的代码进行链接定义指定的宏(DEBUG为需要定义的宏)gcc test . c - o test - DDEBUG //或者 gcc test . c - o test - D DEBUG展示全部警告实际操作,将add.c div.c mult.c sub.c打包生成我们的静态库,头文件head.h不需要先生成.o文件生成我们的静态库。

z2812470857的博客 1363

weblogic 集群搭建,双机部署,相关问题记录

4.5.集群搭建1 参考网址https://wenku.baidu.com/view/76365129cd1755270722192e453610661ed95aa4.html IP地址 端口 角色 192.168.1.160 9001 AdminServer ...

zl386119974的专栏 1669

SCU【C】程序设计基础期末安全项目lab2-Deadbeef-writeup(附题目&源码)

项目名称(本质:栈溢出攻击)【源码在文首】和lab1一样,此题又是美国卡耐基梅隆大学的平时作业哈哈哈! 项目要求是把栈溢出,强行更改函数返回值,输出0xdeadbeef。

2301_79586491的博客 1544

古月居ROS入门21讲学习笔记——一 基础概述

写在前面 本文章为bilibili上学习古月居ROS入门21讲的学习笔记,是一个自己的记录,也希望能帮到想要入门ROS的小伙伴们 个人觉得入门ROS比较好的的免费课程是bilibili大学 上古月居(https://www.bilibili.com/video/BV1zt411G7Vn?from=search&seid=15055874661163835202)和中科院(https://www.bilibili.com/video/BV1mJ411R7Ni?from=search&seid

weixin_45969471的博客 940

【AI深究】合成数据(Synthetic Data)深度解析:原理、算法与工程实践——全网最详细流程|核心原理、主流方法、数学表达、工程实践与细节、未来趋势|GAN、VAE、语言模型LLM合成如GPT

大家好,我是爱酱。本篇延续将会系统梳理合成数据(Synthetic Data)的核心原理、主流方法、数学表达、工程实践与未来趋势,结合数学公式,帮助你全面理解这一AI建模的关键技术。 注:本文章含大量数学算式、详细例子说明及大量代码演示,大量干货,建议先收藏再慢慢观看理解。新频道发展不易,你们的每个赞、收藏跟转发都是我继续分享的动力!

AI人工智能爱酱~你的AI学习好帮手~ 4925

c++判断文件读取结束_Linux系统编程入门学习笔记5-文件IO

一、文件IO的概念文件IO指的就是文件的输入输出。这里的输入输出是从内存的角度出发的,也就是说,输入就是从文件读取数据输入到内存中,输出就是从内存中读取数据输出到文件中。二、C库标准IO函数与Linux系统IO函数的关系C库标准IO函数是在调用Linux系统IO函数的基础上实现的。C库标准IO函数具有缓冲区,读写效率比起直接调用系统IO函数往往更高。二、Linux虚拟地址空间虚拟地址空间并不是真实...

weixin_39619174的博客 412

二维otsu算法python_OpenCV-Python系列之OTSU算法

上一个教程中,我们谈到了关于图像二值化的两种方法,一种是固定阈值法,另一种是自适应阈值法,总的来说,自适应阈值法在某些方面要由于固定阈值法,但还没完,这次我们将隆重介绍我们的重量级选手,也就是OTSU算法(又称为大津算法和最大类间方差法)。最大类间方差法是1979年由日本学者大津提出的,是一种自适应阈值确定的方法,又叫大津法,简称OTSU,是一种基于全局的二值化算法,它是根据图像的灰度特性,将图像...

weixin_28834169的博客 1426

从FedAvg到实战:手把手教你用PyTorch复现联邦学习经典论文实验(MNIST/CIFAR-10)

本文详细介绍了如何使用PyTorch复现联邦学习经典算法FedAvg在MNIST和CIFAR-10数据集上的实验。从环境搭建、数据非IID划分到模型实现和参数聚合,手把手教你掌握联邦学习的核心技术与实战技巧,帮助开发者和研究人员快速实现隐私保护的分布式机器学习方案。

weixin_29053695的博客 253

从零开始学习C++

C++学习规划

HippyKan的博客 208

软件工程案例教程·韩万江【课后习题】

!!!!

weixin_57858263的博客 6419

《Linux 源码趣读》学习

《Linux 源码趣读》学习

青少年趣味编程 2720

leaflet 综合教程170+ 【目录 】(已包含162篇文章)

vue+leaflet系列教程旨在为开发者提供简单快捷的,。在每一个示例中,解释相应的API知识点,做到。注意本示例目录中的内容可能加载是vue+openlayers的示例, 本目录是要加载vue+leaflet的示例,只是内容少,逐渐更新中。

大剑师兰特的GIS世界 1万+

大语言模型原理与工程实践:行业大语言模型的评测:以金融行业大语言模型为例

大语言模型、金融行业、模型评测、自然语言处理、深度学习、Transformer、BERT、GPT 1. 背景介绍 近年来,大语言模型(Large Language Model,LLM)在自然语言处理(Natural Language Processing,NLP)领域取得了突破性的进

AI大模型应用之禅 136

Linux系统编程入门(上)

第一章 Linux系统编程入门(上) 1.1 GCC 1.2 静态库 1.3 动态库 1.4 静态库与动态库的对比 1.5 Makefile

weixin_43412762的博客 1883

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Linux 系统编程从入门到进阶 学习指南

Linux 系统编程从入门到进阶 学习指南

Henry313的博客 3359

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

[cpp]Linux系统编程(到进程)

牛客webserver笔记

记忆超差的本人的博客 1915

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Linux环境使用VScode调试c++程序入门学习

文章写的可操作性很强,适合新手入门,抄录下来,以免网页丢失~vscode是文本编辑而非集成开发环境,需要经过配置才能在其上编译执行代码。本教程将具体详解在linux上配置Visual Studio Code使用GCC C++ 编译器(g++)和GDB调试器的方法(GCC是GNU 编译器集合,GDB则是 GNU调试器)。配置vscode后,将通过在VSCode中编译和调试一个简单的 C++程序告知您具体该如何操作。

CoolGirl 6147

第二章 Linux系统编程入门

看到标题,读者可能会很好奇,这不是网络编程笔记专栏吗,怎么第一篇文章是Linux 系统编程入门,其实原因很简单,在我们学习Linux 网络编程前,需要先学习怎么在 Linux 中进行 C 语言编程,这部分内容属于Linux 系统编程入门的内容,当然,Linux 网络编程也离不开它。一个工程中的源文件不计其数,一般按类型、功能和模块分别放在若干个目录中(例如,源文件存放在src目录,头文件存放在include目录等),Makefile 文件定义了一系列的规则,来指定哪些文件需要先编译,哪些文件需要后编译。

fantasticHQ的博客 913
上一篇: 牛客C++笔记——linux多进程开发
下一篇: 牛客C++笔记——linux多线程开发
MUCH_WAY
博客等级 码龄8年 25粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值