
Linux
文章平均质量分 68
bug_Cat
大学狗一枚
展开
-
使用muduo编写webserver
在muduo的基础上想写个webserver很简单,只需要在他http的基础上进行改进就可以。最好代码仓库:https://github.com/bugcat9/tinyMuduo。原创 2023-02-13 15:41:28 · 1059 阅读 · 0 评论 -
Linux定时器
学习《Linux高性能服务器编程》第十一章定时器,里面介绍了各种网络程序中的定时事件,为了印象深刻一些,多动手多实践,所以记下这个笔记。这一篇主要记录Linux中SIGALRM信号触发的定时器。more。...原创 2022-08-30 11:26:35 · 528 阅读 · 0 评论 -
Linux信号
Linux 下,一个进程给其他进程发送信号的API是kill函数。这个函数把信号sig发送给目标进程;目标进程pidLinux当中信号都大于0,如果sig取值为0,则kill函数不发送任何信号。这种方法可以用来检测目标进程或进程组是否存在,但是这种方法是不可靠的(这种方法不是原子操作)。该函数成功时返回0,失败则返回-1并设置errno。几种可能的errno如表所示。......原创 2022-08-27 12:48:03 · 536 阅读 · 0 评论 -
改变工作目录和根目录
工作目录:进程在哪个路径下被运行起来哪个路径就是进程的工作目录(Current Woring Directory, CWD)之后,进程原先打开的文件描述符依然生效,所以我们可以利用这些早先打开的文件描述符来访问调用。动态分配内存,并将进程的当前工作目录存储在其中。的文件(和目录),因为这些文件(和目录〉并非处于新的根目录之下。之后不能直接访问的文件(和目录),尤其是一些日志文件。参数指向的内存用于存储进程当前工作目录的绝对路径名,其大小由。在内部动态创建的缓存区)的指针,失败则返回。进程的当前工作目录。原创 2022-08-21 21:22:10 · 1323 阅读 · 0 评论 -
进程间关系
Linux下每个进程都隶属于一个进程组,因此它们除了PID信息外,还有进程组ID(PGID)。我们可以用如下函数来获取指定进程PGID该函数成功时返回进程pid所属进程组的PGID,失败则返回-1并设置errno。每个进程组都有一个首领进程,其PGID和PID相同。进程组将一直存在,直到其中所有进程都退出,或者加入到其他进程组。下面的函数用于设置PGID该函数将PID为pid的进程的PGID设置为pgid。如果pid和pgid相同,则由pid指定的进程将被设置为进程组首领;如果pid。原创 2022-08-21 21:21:01 · 440 阅读 · 0 评论 -
UID、EUID、GID和EGID
程序允许任何用户都可以使用它来修改自己的账户信息,但修改账户时程序不得不访问文件。Linux中id真是太多了进程有pid,然后用户还有UID这种,真是有点绕。:它使得运行程序的用户拥有该程序的有效用户的权限(太过官方这种说法感觉)。文件,普通用户是不可写(只有读权限)的,那么用户怎么能够通过。将其编译一下,然后查看查看文件属性,再运行程序,可以看到。程序时,其有效用户就是该程序的。是一样的,但是对于一些程序如。,那么程序有效的用户就会变成。权限,再运行程序,可以看到。权限,再运行程序,可以看到。原创 2022-08-21 21:20:07 · 1583 阅读 · 0 评论 -
Linux系统日志rsyslogd
Linux上使用rsyslogd守护进程接收输出的日志和接收日志。用户进程是通过syslogd函数生成系统日志。该函数将日志输出到一个UNIX本地域socket类型(AF_UNIX)的文件/dev/log中,rsyslogd则监听该文件以获取用户进程的输出。内核日志是如何进行管理的,在这里我们不进行关系。rsyslogd守护进程在接收到或的日志后,会把它们输出至某些特定的日志文件。默认情况下,调试信息会保存至文件,普通信息保存至文件,内核消息则保存至文件。不过,日志信息具体如何分发,可以在。原创 2022-08-21 21:18:17 · 3454 阅读 · 0 评论 -
fcntl函数
参数指定执行何种类型的操作。根据操作类型的不同,该函数可能还需要第三个可选参数。比如:终端文件默认是阻塞读的,这里用 fcntl 将其更改为非阻塞读。函数成功时的返回值如表中最后一列所示,失败则返回-1并设置。函数通常用来将一个文件描述符设置为非阻塞的。函数提供了对文件描述符的各种控制操作。函数支持的常用操作及其参数如下表所示。参数是被操作的文件描述符,原创 2022-08-19 15:44:16 · 671 阅读 · 0 评论 -
tee函数
函数在两个管道描述符之间复制数据,也是零拷贝操作。它不消耗数据,因此源文件描述符上的数据仍然可以用于后续操作。函数成功时返回在两个文件描述符之间复制的数据数量(字节数)。返回0表示没有复制任何数据。参数则控制数据如何移动,它可以被设置为下表中的某些值的按位或,它的参数其实和。程序(同时输出数据到终端和文件的程序,不要和。是文件描述符,但是必须是管道文件描述符。函数,实现了Linux 下。参数指定移动数据的长度。函数混淆)的基本功能。失败时返回-1并设置。原创 2022-08-19 15:43:01 · 333 阅读 · 0 评论 -
splice函数
它可能返回0,表示没有数据需要移动,这发生在从管道中读取数据(下面用了一个书中的例子,实现一个零拷贝的回射服务器,它将客户端发送的信息通过。参数则控制数据如何移动,它可以被设置为下表中的某些值的按位或。被设置为NULL,则表示从输入数据流的当前偏移位置读入;用于在两个文件描述符之间移动数据,是零拷贝操作。不是一个管道文件描述符(比如 socket),那么。是管道文件描述符)而该管道没有被写入任何数据时。不为NULL,则它将指出具体的偏移位置。参数是待输人数据的文件描述符。是一个管道文件描述符,那么。原创 2022-08-19 15:41:54 · 706 阅读 · 0 评论 -
sendfile函数
函数在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了内核缓冲区和用户缓冲区之间的数据拷贝,效率很高,这被称为零拷贝。参数是指从读入文件流的哪个位置开始读,如果为空,则使用读入文件流默认的起始位置。函数的文件描述符,即它必须指向真实的文件,不能是socket和管道。成功时返回传输的字节数,失败则返回-1并设置。几乎是专门为在网络上传输文件而设计的。则必须是一个socket。参数是待写入内容的文件描述符。参数是待读取内容的文件描述符。该函数的man手册明确指出,参数指定在文件描述符。原创 2022-08-19 15:41:15 · 756 阅读 · 0 评论 -
readv函数和writev函数
是个非常有用的函数。比如:当Web服务器解析完一个HTTP请求之后,如果目标文档存在且客户具有读取该文档的权限,那么它就需要发送一个HTTP应答来传输该文档。这个HTTP应答包含1个状态行、多个头部字段、1个空行和文档的内容。其中,前3部分的内容可能被Web服务器放置在一块内存中,而文档的内容则通常被读入到另外一块单独的内存中(通过read函数或mmap函数)。函数则将多块分散的内存数据一并写人文件描述符中,即集中写。的字节数,失败则返回-1并设置errno。结构体封装了一块内存的起始位置和长度。原创 2022-08-19 15:40:25 · 1353 阅读 · 0 评论 -
dup和dup2函数
指向相同的文件、管道或者网络连接。并且dup返回的文件描述符总是取系统当前可用的最小整数值。,文件描述符fd2原来指向"text2.txt"文件的,调用。函数创建一个新的文件描述符,该新文件描述符和原有文件描述符。后,fd2改为指向"text.txt"。用于复制文件描述符,通常用于重定向。的整数值的文件描述符的功能,并且。类似,不过它将返回第一个不小于。,成功就返回新的文件描述符。的整数值的文件描述符,并且。指向的文件将会被关闭(除非。这个文件描述符也将会指向。直接返回复制的文件描述符。原创 2022-08-19 15:38:10 · 702 阅读 · 0 评论 -
socket选项
读取和设置socket文件描述的方法如下参数指定被操纵的目标socket,level参数指定要操作的协议选项,optname参数则指定选项的名字,optval和optlen参数分别是操作选项的值和长度。截图了一下书中的表格。moregetsockopt和setsockopt这两个函数成功时返回0,失败时返回-1并设置errno。需要注意的是,在服务器端setsockopt最好在listen。...原创 2022-08-14 20:36:26 · 207 阅读 · 0 评论 -
socket网络信息查询API
学习《Linux高性能服务器编程》第五章Linux网络编程基础API,为了印象深刻一些,多动手多实践,所以记下这个笔记。这一篇主要记录Linux中socket网络信息查询API,包括gethostbyname和gethostbyaddr、getservbyname和getservbyport、getaddrinfo、getnameinfo。socket当中两要素:IP和端口号,都是用数值表示的。但是有时候我们可以使用主机名代替IP,使用服务名代替端口号。这个功能就是使用网络信息API实现的。more。...原创 2022-08-14 20:32:49 · 439 阅读 · 0 评论 -
socket地址信息函数
学习《Linux高性能服务器编程》第五章Linux网络编程基础API,为了印象深刻一些,多动手多实践,所以记下这个笔记。这一篇主要记录Linux中socket地址信息函数。如果我们要查询一个连接socket的本端socket地址,以及远端的socket地址,可以使用下面两个函数。所指内存区的大小,那么该socket地址将被截断。对应的远端地址(远端连接的地址)。两个函数都把地址存储在。参数指定的内存中,将该地址的长度存放在。对应的本端地址(本地自己的地址),如果实际socket地址的长度大于。......原创 2022-08-14 20:28:12 · 245 阅读 · 0 评论 -
socket数据读写
学习《Linux高性能服务器编程》第五章Linux网络编程基础API,为了印象深刻一些,多动手多实践,所以记下这个笔记。这一篇主要记录Linux中socket数据读写的部分,包括TCP数据读写、UDP数据读写和通用数据读写。...原创 2022-08-14 20:27:07 · 1640 阅读 · 0 评论 -
socket相关命令
学习《Linux高性能服务器编程》第五章Linux网络编程基础API,为了印象深刻一些,多动手多实践,所以记下这个笔记。这一篇主要记录Linux中socket相关的命令,包括创建socket、命名socket、监听socket、接受连接、发起连接和关闭连接。...原创 2022-08-14 20:24:26 · 2063 阅读 · 0 评论 -
Linux中socket地址API
学习《Linux高性能服务器编程》第五章Linux网络编程基础API,为了印象深刻一些,多动手多实践,所以记下这个笔记。这一篇主要记录Linux中socket地址的基础,包括主机字节序和网络字节序、socket地址和IP地址转化函数。.........原创 2022-08-11 23:25:42 · 598 阅读 · 0 评论 -
tcpdump进行IP抓包
在学习《Linux高性能服务器编程》中,看到作者对IP头部使用tcpdump进行抓包,所以本着实践出真知、多看多练的道理,也进行抓包,顺带记录一下。more。原创 2022-08-06 22:57:50 · 6435 阅读 · 0 评论 -
tcpdump进行DNS抓包
第一个数据包中(DNS查询报文),从ip:10.0.4.5(本机)端口39454发向ip:183.60.83.19(DNS服务器)的53端口(DNS服务的端口),47814是DNS查询报文的标识值,因此该值也出现在DNS应答报文中。”表示使用A类型的查询方式。“CNAME www.a.shifen.com., A 112.80.248.76, A 112.80.248.75”则表示3个应答资源记录的内容。其中CNAME表示紧随其后的记录是机器的别名,A表示紧随其后的记录是ip地址。...原创 2022-08-06 22:56:14 · 4382 阅读 · 0 评论 -
tcpdump进行ARP抓包
在学习《Linux高性能服务器编程》中,看到作者对ARP使用tcpdump进行抓包,所以本着实践出真知、多看多练的道理,也进行抓包,顺带记录一下。ARP协议的功能是实现网络层地址到任意物理地址的转换,简单理解ARP能够实现从转化为的转化。...原创 2022-08-06 22:52:45 · 5887 阅读 · 0 评论