Muduo源码分析一: Poller类 + EpollPoller类详解

前言 最近开始看陈硕大佬的muduo, 在这里记下所学到的知识叭. 第一次写关于阅读源代码的博客, 可能更多的是通过注释的方式来解释作者的思路, 如果有任何的疑问或意见, 欢迎评论. 正文 Poller介绍 eventloop类中有一个成员叫做poller_, 这个poller_负责着所有的IO事...

2019-06-02 19:16:01

阅读数 21

评论数 0

TCP 协议中的窗口管理

交互式通信 在网络传输中, 有些数据包中的内容很多, 甚至和MSS的大小相同, 而有些数据包中的内容仅仅只有一字节. 所以数据包大小差异巨大. 若是数据过小的包太过于多的话, 就会造成网络利用率不高, 原因是要花费许多字节来构成TCP等协议头部. 在ssh中, 当我们敲下一个字符, 客户端获取输入...

2019-05-18 00:15:08

阅读数 16

评论数 0

TCP 协议中的超时重传以及SACK选项

TCP协议中的超时重传以及SACK选项 超时重传 RTO 发送者发送数据包后, 启动重传定时器, 重传定时器到期时所花费的时间. RTT 一个数据包发送并确认所花费的时间. 关于计算RTO的算法 经典算法 首先计算一个平滑的RTT来设置为SRTT, 然后设置一个常量 alpha(称为平滑因子,...

2019-05-14 00:18:03

阅读数 28

评论数 0

myshell实现Sudo三部曲 : crypt函数和getpass函数

上一章, 我们讲了如何获取加密密码, 现在我们要做的就是输入密码, 然后验证. 在这一部分, 我们要学习两个函数: crypt()和getpass() crypt() 原型: char *crypt(const char *key, const char *salt); key是要加密...

2018-08-02 17:24:58

阅读数 78

评论数 0

myshell实现Sudo三部曲 : 阴影口令

在上篇博客中,我们讲了设置用户位的作用, 有了seteuid这个函数, 我们就可以实现从普通用户权限转变为root权限. 但是我们的shell还需要密码验证模块. 要实现这个模块, 我们必须先得到用户密码. 在linux中, 有一个通常称为阴影口令(shadow password)的文件, 这个...

2018-08-01 17:07:47

阅读数 58

评论数 0

myshell实现Sudo三部曲 : Linux更改用户ID

前言 在Linux系统中,特权和访问控制都是基于用户ID和组ID的. 当程序想要访问当前不允许访问的资源时, 它就需要改变用户ID或组ID. 使得新ID具有合适的特权或访问权限. 在设计程序的时候, 我们应该使用最小特权模型, 最小特权模型表示, 我们程序应该只具有完成目的任务的最小特权. ...

2018-07-31 11:21:29

阅读数 264

评论数 0

Valgrind调试代码时的一些错误提示解析

最近在写代码的时候, 发现了极其严重的内存泄漏. 卢神帮我找bug时, 使用了valgrind这个软件. Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具. 下面解析一些常见的错误 : 1. ==3185== Use of uninitialised...

2018-07-29 22:46:10

阅读数 282

评论数 0

linux 文件操作杂记

文件操作杂记 在linux 学习中,文件操作是一个十分重要的模块. 通常, 我们使用open()来打开文件. 其实在open()的背后, 有好多有(fu)趣(za)的事情发生. open()函数背后的系统调用相当复杂, 文章下面有链接, 可以详细理解. 我们主要来讲一下文件描述符和文...

2018-07-29 14:27:05

阅读数 88

评论数 0

Linux消息队列实现对话

消息队列是消息的连接表, 存储在内核中, 由消息标识符标识. 要使用它, 我们先要建立一个结构体 typedef struct mymsgbuf { long mtype; char msg[BUF_SIZE]; }MSGBUF; 创建一个消息队列, 是用msgget()函...

2018-06-11 00:47:10

阅读数 246

评论数 0

有名管道实现进程间的对话

有名管道是进程间通信的一种方式。要实现进程间的对话,我们先要设置一个server进程, 它负责创建有名管道,实现发送信息和获取信息。 server端的代码如下: #include <stdio.h> #include ...

2018-06-01 01:00:09

阅读数 71

评论数 0

dup函数被人忽略的特性

在学习进程通信的时候, 有个语句实在让人疑惑 /* 使用dup来重定向stdin程序片段 */ close(0); dup(fd); // 两行代码完成了对stdin的重定向 我们都知道dup函数:int dup(int __fd), 他的返回值是当前可用文件描述符中最小数值. 在上述代码中...

2018-05-26 01:35:12

阅读数 172

评论数 0

用C实现Linux shell

学习了进程一章之后, 可以尝试着写一个自己的shell 程序目标 单个命令: ls 带-l到多个参数的命令: ls -l /temp 带一个输出重定向的命令: ls -l > a 带一个输入重定向的命令: wc -c < a ...

2018-05-25 01:01:46

阅读数 992

评论数 0

Linux僵尸进程和孤儿进程

程序运行到结尾的时候,有两种情况。子进程先退出,或者父进程先退出。 如果父进程先退出的话,那么子进程就会变成孤儿进程,最后被init接管,我们来看一个例子。 #include <stdio.h> #include &l...

2018-03-15 18:22:24

阅读数 108

评论数 0

C语言静态变量初始化问题

    以前在学习C语言中,看到了这么一行代码: static int arr[100];   这是一行很正常的代码,但是我“细心”的发现作者在使用它的时候并没有初始化。书上的解释是,用static修饰的变量会自动初始化。   为什么会被初始化呢?首先我们看一段话: 可执行程序...

2018-02-10 12:45:45

阅读数 2279

评论数 0

va_list简单介绍及初步实现printf函数

VA_LIST 是在C语言中解决变参问题的一组宏,所在头文件:#include ,用于获取不确定个数的参数。 C语言中的函数形参是从右向左压栈的,以此来保证栈顶是第一个参数 C语言中形参的这种存储结构使得我们可以用指针来寻找参数 用法: 首先在函数中定义一个va_list型...

2017-11-20 21:56:18

阅读数 420

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭