栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux-1

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux-1

Windows上用return 0结束程序~ Linux上用头文件stdlib.h中的exit(0)退出进程。

unistd.h为Linux专有的头文件,包含一些可用的函数(如sleep())。

用方向键可以将执行过的指令调出来。

所有的头文件包含在哪里呢? cd/ -> cd usr -> cd include

/bin~命令 /lib库文件 /usr/include头文件

一、关于printf 刷缓冲区

分析下面两个程序的不同:

程序1会在打印出Hello World!之后睡眠三秒才结束进程。

 程序2会在睡眠三秒后才打印Hello World!结束进程。由于执行printf时将Hello World!放在缓冲区,直到睡眠3秒结束后调用exit(0)程序要结束因此刷新缓冲区才打印出Hello World!

打印:将数据交给内核(操作系统),再由操作系统打印出来。由于我们会不断的由用户态~内核态,为了减少开销提升效率,因此有了缓冲区的存在。

printf 刷缓冲区满足条件:

1.缓冲区放满

2.缓冲区未满,强制刷新缓冲区: n   fflush(stdout)   

3.程序结束exit(0):第一步刷新缓冲区、第二步调用_exit()结束进程

二、主函数的参数(3个)

int main(int argc,char* argv[],char* envp[])

int argc:参数个数(数组argv[]元素个数)

char* argv[]:参数内容(数组中每个元素为指针,指向字符串)

char* envp[]:环境变量

(1)打印参数个数及内容

执行+传参:(类似ls -l)

 (2)打印环境变量(环境变量是从父进程中继承过来的)

由于环境变量末尾为空指针,所以循环条件即为!=NULL。

 三、修炼内功

1.冯诺依曼体系将计算机分成了五大部件:运算器、控制器、存储器、输入设备、输出设备。

2.CPU集成了运算器和控制器。存储器~内存(一旦关机、断电即消失)。硬盘~I/O设备。

eg:main.c在磁盘(硬盘)中存放、编译后的可执行程序main也在磁盘中。 执行程序./main:将磁盘中的main通过总线传输到内存中并占用部分空间,执行完后内存空间释放。

3.内存由内核(操作系统)来管理。

操作系统:管理计算机上的软硬件资源(主要管理内存、进程、文件),为用户提供交互的接口。

4.如何管理内存?

页表:记录物理页(内存4K、4K被划分的)和逻辑页(例如可执行程序被划分的)的对应关系。

通常逻辑页首页地址不为0。

 对应关系不是固定的,每次在分配(运行程序)的时候是操作系统看内存哪里有位置就分配。

调试程序时看到的地址均为逻辑地址!是由于我们不知道物理内存哪里是空闲的,所以无法使用物理内存。

问:如何根据逻辑地址对应物理地址(逻辑页->物理页)?     通过页表:1.找对应关系;2.根据偏移量对应确定。

四、进程、fork()复制进程(子进程)

1.进程

操作系统为每个进程创建了进程控制块(PCB,用来描述进程的属性信息),PCB在操作系统上用结构体(软件层面)struct task_struct来表示。

struct task_struct

{

        int pid; //唯一标识一个进程的进程号

        int status; //进程当前所处的状态:就绪、运行、阻塞

        //.....

{

 2.fork() 复制进程

1)父进程中执行fork()复制当前进程(父进程)的PCB,但进程号pid稍有不同

2)子进程从fork()后接着往下执行,父进程也从fork()返回处接着往下执行。

注意:唯一区别:fork()返回值。

父进程中:fork()返回值为子进程的id号。

规定子进程中:fork()返回值为0。

pid_t ~ int     exit(1)退出代表失败    Linux中必须给源文件有后缀(.c、.cpp)才可以进行编译形成可执行程序。

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/869697.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号