随笔分类 -  TCP/IP网络编程

摘要:有名管道 因为匿名管道只能用于有亲缘关系间的进程通信,所以为了没有亲缘关系之间的进程通信,提出了有名管道 有名管道(FIFO)提供了一个路径名与之关联,并以FIFO的文件形式存放在文件系统中,打开方式和普通文件一样。这样进程之间只需要访问该路径,就可以彼此通过FIFO通信。 一旦打开FIFO,就可以 阅读全文
posted @ 2023-02-09 14:57 小秦同学在上学 阅读(44) 评论(0) 推荐(0) 编辑
摘要:管道的读写特点 使用管道时需要注意以下几种特殊的情况(假设都是阻塞IO操作) 所有的指向管道写端的文件描述符都关闭了(即管道写端的文件描述符的引用计数为0)。有进程从管道的读端读数据,那么管道中剩余的数据被读取以后,再次read会返回0,就像读到文件末尾一样。 如果有指向管道写端的文件描述符没有关闭 阅读全文
posted @ 2023-02-09 11:50 小秦同学在上学 阅读(84) 评论(0) 推荐(0) 编辑
摘要:/* - 实现 ps aux | grep *** - 子进程:执行ps aux 子进程结束后,将数据发送给父进程 - 父进程:获取到数据,并进行过滤 - pipe() - execlp():默认把结果输出的标准终端,需要把子进程的stdout_fileno标准输出重定向到管道的写端 dup2 */ 阅读全文
posted @ 2023-02-09 11:11 小秦同学在上学 阅读(22) 评论(0) 推荐(0) 编辑
摘要:/* #include <unistd.h> int pipe(int pipefd[2]); 功能:创建匿名管道,用于进程间通信 参数: - int pipefd[2] 这个数组是一个传出参数 - pipefd[0]对应管道的读端 - pipefd[1]对应管道的写端 返回值: 成功:返回0 失败 阅读全文
posted @ 2023-02-09 10:38 小秦同学在上学 阅读(39) 评论(0) 推荐(0) 编辑
摘要:匿名管道 管道也叫无名(匿名)管道,它是UNIX系统IPC(进程间通信)的最古老形式,所有的UNIX系统都支持这种通信机制。 统计一个目录中文件的数目命令:ls | wc -l。为了执行该命令,shell创建了两个进程来分别执行ls和wc。 上述 | 称之为管道符,会将ls得到的结果通过管道传输给w 阅读全文
posted @ 2023-02-08 22:52 小秦同学在上学 阅读(48) 评论(0) 推荐(0) 编辑
摘要:进程间通信(IPC) 你知道进程间通信方式有哪几种吗? 某种方式具体原理? 进程是一个独立的资源分配单元,不同进程之间是独立的,没有关联,不能在一个进程直接访问另一个进程的资源 但是进程不是孤立的,不同的进程需要进行信息的交互与状态的传递,因此需要进程间通信 ####进程间通信目的 数据传输:一个进 阅读全文
posted @ 2023-02-08 22:14 小秦同学在上学 阅读(23) 评论(0) 推荐(0) 编辑
摘要:进程退出 #include<stdlib.h> void exit(int status); #include<unistd.h> void _exit(int status); status:是进程退出时的一个状态信息。父进程回收子进程资源的时候可以获取到 exit()在进程推出前刷新IO缓冲区 阅读全文
posted @ 2023-02-08 22:04 小秦同学在上学 阅读(43) 评论(0) 推荐(0) 编辑
摘要:exec函数族 一般先创建一个子进程,再在子进程中调用exec函数族 会根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,即在调用进程内部执行一个可执行文件 exec函数族执行成功后不会返回,因为调用进程的实体,包括代码段、数据段和堆栈都已经被新的内容取代,只留下进程ID等表面上的信息,只 阅读全文
posted @ 2023-02-08 21:07 小秦同学在上学 阅读(19) 评论(0) 推荐(0) 编辑
摘要:父子进程之间的关系 ####不同点 fork函数的返回值不同 父进程中:>0 返回的是子进程ID 子进程中:=0 PCB中的一些数据 当前进程的id pid 当前进程的父进程的id ppid 信号集 共同点 某些状态下:子进程刚被创建出来,还没有执行写操作 用户区的数据 文件描述符表 父子进程对变量 阅读全文
posted @ 2023-02-08 20:37 小秦同学在上学 阅读(42) 评论(0) 推荐(0) 编辑
摘要:fork进程创建 创建子进程,会复制当前的父进程 子进程和父进程运行在分开的内存空间,但是在fork()时两者有相同的内容 fork:用于创建子进程 #include <sys/types.h> #include <unistd.h> pid_t fork(void); 作用:用于创建子进程 返回值 阅读全文
posted @ 2023-02-08 20:15 小秦同学在上学 阅读(19) 评论(0) 推荐(0) 编辑
摘要:程序和进程 程序:(文件) 进程:(资源) 并行与并发 并行:同一时刻,有多条指令在多个处理器上同时执行 并发:在同一时刻只能有一条指令执行,但多个进程指令被快速轮换,使得宏观上具有多个进程同时执行的效果 进程控制块 为了管理进程,内核为每个进程分配一个进程控制块,进程控制块为task_struct 阅读全文
posted @ 2023-02-08 17:39 小秦同学在上学 阅读(20) 评论(0) 推荐(0) 编辑
摘要:标准C库: #include <stdio.h> int fseek(FILE *stream, long offset, int whence); Linux库: #include <sys/types.h> #include <unistd.h> off_t lseek(int fd, off_ 阅读全文
posted @ 2023-02-08 16:59 小秦同学在上学 阅读(99) 评论(0) 推荐(0) 编辑
摘要:/* #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); 参数: -fd:文件描述符,open()得到,通过这文件描述符操作某个文件 -buf:需要读取数据存放的地方,数组的地址 -count:指定的数组的大小 返回值 阅读全文
posted @ 2023-02-08 16:43 小秦同学在上学 阅读(9) 评论(0) 推荐(0) 编辑
摘要:文件描述符 程序只占用磁盘空间,不占用内存空间 程序启动后产生进程,进程在内存中 通过fopen()会返回一个文件描述符,用于定位操作文件 文件描述符位于虚拟存储空间的内核区 PCB:进程控制块,用于需要管理的数据 PCB内部有一个数组(文件描述符表,以为一个进程可以同时打开多个文件 在文件描述符表 阅读全文
posted @ 2023-02-08 15:56 小秦同学在上学 阅读(47) 评论(0) 推荐(0) 编辑
摘要:虚拟地址空间 实际上不存在 虚拟内存,用于解决内存不足或段错误 32位机器:2^32 64位机器:2^48 MMU:内存管理单元会讲虚拟地址空间映射到真实地址空间中 用户区:NULL在受保护的地址 栈空间:高地址向低地址存 堆空间:低地址向高地址存 内核区:用户只可以通过系统调用修改内核数据 阅读全文
posted @ 2023-02-08 15:38 小秦同学在上学 阅读(14) 评论(0) 推荐(0) 编辑
摘要:IO I input O output 内存角度 输入:文件读取数据到内存 输出:内存数据写到文件 标准C库IO函数 标准C库IO函数(不属于操作系统,在不同的平台上通过相同的函数调用不同的系统api) 跨平台(可以在windows和linux运行) 效率高 文件描述符:指向已经打开的文件 文件读写 阅读全文
posted @ 2023-02-08 15:21 小秦同学在上学 阅读(18) 评论(0) 推荐(0) 编辑
摘要:GDB GDB是由GNU软件社区提供的调试工具,同GCC配套组成一套完整的开发环境 启动程序,按照自定义要求随性所欲运行程序 在所指定的断点处停止 程序停止时,可以检查程序中所发生的事 可以改变程序,将一个bug产生的影响修正去测试其他的bug 1、编译生成带有调试信息的参数 -g 2、GDB命令的 阅读全文
posted @ 2023-02-08 15:02 小秦同学在上学 阅读(31) 评论(0) 推荐(0) 编辑
摘要:什么是Makefile 工程中的文件不计其数,其按类型、功能和模块放在若干个目录中 Makefile文件定义了一系列的规则来指定哪些文件需要先编译,哪些文件后编译,哪些文件需要重新编译 Makefile带来的好处就是“自动化编译”,一旦写好,可以用make命令整个工具完成自动编译 make是一个命令 阅读全文
posted @ 2023-02-07 21:39 小秦同学在上学 阅读(85) 评论(0) 推荐(0) 编辑
摘要:程序编译成可执行程序的过程 动态库会在链接过程中将自己名字信息打包到可执行文件中,但是不会把自己代码打包过去 静态库则是会将自己的代码直接打包到可执行文件中 静态库的创建 动态库的创建 动态库的api是在运行中查找,一般需要手动改变环境变量 静态库优缺点 静态库的加载速度快 发布程序无需提供静态库, 阅读全文
posted @ 2023-02-07 20:53 小秦同学在上学 阅读(79) 评论(0) 推荐(0) 编辑
摘要:动态库的制作 动态库也称为共享库 注意一定加上 -fpic 动态库加载失败原因: 程序启动之后,程序会把动态库的的内容加载到内存之中,通过ldd命令检查动态库依赖关系 解决动态库加载失败 env 可以查看环境变量 export LD-LTBRARY_PATH=$LD-LTBRARY_PATH:绝对路 阅读全文
posted @ 2023-02-07 20:40 小秦同学在上学 阅读(41) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示