摘要: open函数的使用 函数原型 用法 read函数 参数: fd:文件描述符 buf:存数据的缓冲区 count: 缓冲区大小 返回值 0:读到文件末尾 成功:读到文件 失败: 1,设置errno lseek函数原型 参数: fd:文件描述符 offset:偏移量 whence:起始偏移位置:SEEK 阅读全文
posted @ 2020-03-18 16:55 FANDX 阅读(1593) 评论(0) 推荐(0) 编辑
摘要: gdb基本指令 g:使用该参数可以编译成可以执行文件,得到调试表‘ gcc a.out list: list1 列出源码,根据源码指定,行号进行设置断点 b: b 20 在2 0行设置断点 run/r: 运行程序 n / next : 下一条指令(会越过函数) s / step : 下一条指令 (会 阅读全文
posted @ 2020-03-18 16:53 FANDX 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 一般C语言写的程序可以让其他语言进行调用,比如python, java,等等 c语言有两种库类型,静态库和动态库(共享库) 静态库和动态库的区别 静态库 静态库需要和程序进行一起编译 静态库在原理上是性能比动态库要高的 一般应用在对空间要求较低,而对时间要求的核心程序中 动态库 动态库可以被程序直接 阅读全文
posted @ 2020-03-18 16:50 FANDX 阅读(947) 评论(0) 推荐(0) 编辑
摘要: 进程和程序的区别 程序,只占用磁盘的空间。 进程运行在操作系统之上,占用内存,cpu等系统资源。 并发 同一时间运行多个程序,多个进程同时在运行 单道程序设计 A堵塞,B只能进行等待,即使CPU处于空闲状态,而在人机交互的时候堵塞的时候是必然的结果 多道程序设计 时钟中断,到了指定的时间程序必须中断 阅读全文
posted @ 2020-03-18 16:49 FANDX 阅读(301) 评论(0) 推荐(0) 编辑
摘要: gcc编译的4步骤 预处理 (hollo.c hello.i) 展开宏,头文件 替换编译条件 删除注释,空行,空白 编译 (hello.i hello.s) 检查语法规范 最消耗时间,系统资源最多 汇编 (hello.s hello.o) 将汇编指令翻译成机器指令 链接 (hello.o a.out 阅读全文
posted @ 2020-03-18 16:46 FANDX 阅读(392) 评论(0) 推荐(0) 编辑
摘要: exec函数族 execl, 可以指定路径进行运行自己的程序 execlp, 可以通过自己的环境变量,运行系统程序 execvp, 可以通过传入数组的方式 execlp使用案例 execl的使用 exec函数族的一般规律 exec函数一旦调用成功,就执行新的程序,不返回。只有失败才返回,错误值为 1 阅读全文
posted @ 2020-03-18 16:44 FANDX 阅读(566) 评论(0) 推荐(0) 编辑
摘要: dup和dup2是用来重定向的 例子 dup的使用,主要是保存的作用 dup2的使用,可以打开进行的fd fcntl实现dup2的功能 F_DUPFD() 例子 文件描述符 PCB进程控制模块 成员:文件描述符。 文件描述符:0,1,2,3,4,...... 1023 0 STDIN_FILENO 阅读全文
posted @ 2020-03-18 16:43 FANDX 阅读(662) 评论(0) 推荐(0) 编辑
摘要: 考虑一下步骤 判断命令行参数,获取需要查询的目录 argv[1], 如果没有就算当目录 判断用户指定的是否是目录。 stat S_ISDIR(); 读取目录: opendir() readdir(), 如果读取到目录,那么就可以递归调用自己 拼接目录: sprintf(path, "%s/%s", 阅读全文
posted @ 2020-03-18 16:40 FANDX 阅读(1138) 评论(0) 推荐(0) 编辑
摘要: 使用库函数来进行文件读取 使用系统调用 为什么系统调用要比库函数效率要低 使用strace可以详细看到运行的调用结果,发现调用的次数要少的多 内核缓存有4096字节的大小 用户空间进入内核空间要耗时比较多,但是比内核到磁盘要快 fputc 中有一个字节的缓存区,达到4096之后在会进入到内核空间中 阅读全文
posted @ 2020-03-18 16:38 FANDX 阅读(470) 评论(0) 推荐(0) 编辑
摘要: 进程和进程之间的内存是相对独立的 进程和进程通讯原理 进程和进程之间通讯的方式 管道(使用最简单) 只能用在有血缘关系的进程之中 信号(开销最小) 共享映射区(无血缘关系) 本地套接字(最稳定,实现复杂度最高) 管道 管道必须用在有父子关系的进程中 管道是一种最基本的IPC机制,作用与有血缘关系的进 阅读全文
posted @ 2020-03-18 16:36 FANDX 阅读(1399) 评论(0) 推荐(0) 编辑
摘要: Makefile入门 makefile命名: makefile 或者 Makefile 1个规则 目标:依赖条件 (一个tab缩进)命令 目标的时间必须晚于依赖条件的时间,否则就会更新目标 依赖条件如果不存在,找寻新的规则去产生依赖 makefile会默认把第一条指令当做最终目标 可以使用ALL:a 阅读全文
posted @ 2020-03-18 16:29 FANDX 阅读(398) 评论(0) 推荐(0) 编辑
摘要: fork函数 函数原型 可以创建一个子进程 父进程返回子进程的pid,子进程返回0 getpid()获取当前进程id,getppid()获取父进程的id 循环创建N个子进程模型,每个子进程标识自己的身份 父子进程相同: 刚fork后,data段,text段,堆,栈,环境变量,全局变量,宿主目录位置, 阅读全文
posted @ 2020-03-18 16:24 FANDX 阅读(809) 评论(0) 推荐(1) 编辑
摘要: 传入参数: 1. 指针作为函数参数 2. 通常有const 关键字进行修饰 3. 指针指向有效区域,在函数内部做读操作 传出参数: 1. 指针作为函数参数 2. 在函数内部调用之前,指针指向的空间可以无意义,但是必须有效 3. 在函数内部,做写操作。 4. 函数调用结束后,充当函数返回值 传入传出参 阅读全文
posted @ 2020-03-18 16:23 FANDX 阅读(867) 评论(0) 推荐(0) 编辑
摘要: wait函数(回收子进程) 进程结束,会在内存中存留PCB进程控制块,需要使用wait来回收 函数的3个功能 阻塞等待子进程退出 回收子进程的残留资源 获取子进程的结束状态 pid_t wait(int stat_loc); waitpid函数 pid_t waitpid(pid_t pid, in 阅读全文
posted @ 2020-03-18 16:19 FANDX 阅读(495) 评论(0) 推荐(0) 编辑
摘要: 孤儿进程 正常进程都是fork出来的,父进程比子进程结束,那么这个子进程就会变成孤儿进程,子进程的父进程会成为init进程, init进程是领养父进程 僵尸进程 僵尸进程:进程终止,父进程尚未回收,子进程残留资源(PCB)存放于内核中,变成僵尸进程 僵尸进程进行kill是无效的 杀死父进程可以直接回 阅读全文
posted @ 2020-03-18 16:15 FANDX 阅读(644) 评论(0) 推荐(0) 编辑