Linux应用层的析解

一、库

1、概述

在用户空间进行编程时会使用许多头文件,比如unistd.h,stdlib.h等等,这里面所有的函数,变量,宏等都处于用户空间,被编译链接在库中。
对于Linux操作系统,库的底层会调用系统调用,这种调用不是通过调用内核函数实现(这样就会出现重定位内核函数名地址的问题),而是将系统调用号(就是一个数值)作为参数通过寄存器传递给内核实现的,80号中断是在用户态就能够触发的中断,每一个系统调用号都会约定好在内核中的函数(即系统调用),显然我们同样可以直接使用此中断和系统调用号直接在系统调用层面编程,但不到一定水平太困难,而且基础功能均实现在了库中(无须自己多此一举),只需要调用库提供的函数就能够基本完成自己的应用。
在一个硬件平台上运行程序,无论是嵌入式平台还是PC平台等,现在基本上都需要动态共享库的支撑。

https://blog.csdn.net/cs2539263027/article/details/78977054
https://blog.csdn.net/caihaitao2000/article/details/81321302

2、C库

  • IPC功能编程API
  • stdio标准输入输出
    • scanf:换行既是触发scanf读取缓冲区的开始,也同时会是缓冲区中的一个字符;数字,字符,字符串;
    • fgets:只针对字符串,会读取换行符,也会存入,自动补结束符。
  • 线程库,-lpthread编译时加上,否则找不到
    • 以互斥锁为例,线程运行到某个位置主动去调用互斥锁函数,判断当前系统是否上锁,这里仅是判断某个锁运行到这里就判断某把锁,它不会知道所谓的共享资源(只有设计者才知道)。
  • socket

3、C库之上

3.1 readline

处理命令行的库。

3.2 BFD库

为上层工具提供一个统一的接口,处理文件格式;

4、库之间的关系

实例:open与fopen的关系

https://www.cnblogs.com/joeblackzqq/archive/2011/04/11/2013010.html
这就展示出来C库的一种组织方式,open是比较低级的,而fopen是比较高级的IO......

二、用户空间程序

->>>对于在启动脚本中运行比如ls这种程序感到奇怪,以为在启动完成后才能运行用户空间的程序,然后启动的一个过程就是用户空间的程序来完成的,因此这就是个相互矛盾的印象。

命令

https://www.cnblogs.com/kex1n/p/5233821.html: 5个查找命令

posted @ 2019-05-05 20:50  点点的本子  阅读(419)  评论(0编辑  收藏  举报