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

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
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值