Linux
HerofH_
加油啊咸鱼!
展开
-
muduo异步日志——core dump后查找还未来得及写出的日志
目录前言生成core文件gdb调试Core文件前言 通过异步日志的实现可以知道,日志消息并不是生成后立刻就会写出,而是先存放在前端缓冲区currentBuffer或者前端缓冲区队列buffers中,每过一段时间才会将缓冲区中的日志消息写到日志文件中。那么这就会有问题了:如果程序在中途core dump了,那么在缓冲区中还未来得及写出的日志消息该如何找回呢?...原创 2019-11-26 16:01:50 · 1300 阅读 · 0 评论 -
UNIX五种IO模型理解
以下以读数据为例,写数据同理。读数据的两个阶段读数据有两个阶段:①内核中有数据可读;(下文称为第一阶段)②数据从内核缓冲区拷贝到用户缓冲区。(下文称为第二阶段)五种IO模型UNP中提到的五种IO模型:读数据以recvfrom为例。①阻塞式IO模型: fd设置为阻塞,调用recvfrom函数时,recvfrom函数会一直阻塞,直到第二阶段达成才会返回;②...原创 2019-10-31 22:30:50 · 337 阅读 · 0 评论 -
Linux进程间通信——eventfd
Table of Contents什么是eventfd创建eventfd读eventfd写eventfd使用例子什么是eventfd eventfd是Linux 2.6提供的一种系统调用,它可以用来实现事件通知。eventfd包含一个由内核维护的64位无符号整型计数器,创建eventfd时会返回一个文件描述符,进程可以通过对这个文件描述符进行read/writ...原创 2019-07-31 17:19:45 · 17395 阅读 · 1 评论 -
dup、dup2实现文件描述符重定向(标准输入、标准输出、标准错误输出)
目录dup函数dup2函数重定向标准输入重定向标准输出重定向标准错误输出重定向恢复总结 在前文中,可以知道,文件描述符实际上是指向文件表项的指针数组索引,也就相当于每个文件描述符都对应一个文件表项,最终对应一个文件,而文件描述符重定向,则是让一个文件描述符指向另一个特定的文件表项,最终使得不同的文件描述符指向同一个文件表项,常用到的函数就是dup、dup2以...原创 2019-07-06 11:12:01 · 9083 阅读 · 2 评论 -
Linux中文件描述符的理解(文件描述符、文件表项、i-node)
目录前言打开文件描述符表文件表项inode节点总结前言 本文中涉及到的Linux源码来源于linux 2.6.39.4。 就像windows中的句柄一样,学习linux经常会碰到文件描述符,我们都知道文件描述符是一个非负整数,每一个文件描述符都唯一对应了一个打开的文件,那么文件描述符在内核中到底是以什么形式存在的呢? 这个问...原创 2019-07-04 19:03:50 · 10473 阅读 · 9 评论 -
Linux下更改文件权限
目录查看文件权限修改文件权限查看文件权限查看文件权限可以通过ls -l命令查看,如下所示:如果只想查看某一个文件的权限,可以使用grep,如下所示:可以发现,每一个文件的第一个字段都是由r、w、x等10个字符构成,这10个字符所组成的字符串反映了文件的权限。在linux下,文件权限分为三种:可读权限(read)、可写权限(write)以及可执行权限(execut...原创 2019-04-10 10:06:20 · 65632 阅读 · 0 评论 -
libevent源码学习(0):libevent库安装与简单使用
目录1.下载并解压libevent库2.安装libevent库3.简单使用libevent库1.下载并解压libevent库这里下载的是libevent 2.0.21 stable版本的,使用wget命令如下所示:(下载地址可通过http://libevent.org/对应的libevent版本右键复制链接获取) wget https://github.com/downl...原创 2019-04-09 20:48:19 · 1640 阅读 · 0 评论 -
Linux下MySQL中文显示问号乱码问题解决
本文主要针对于Linux下MySQL插入中文数据显示问号的问题。网上一种普遍使用的方法是修改/etc/my.cnf文件(我的这个文件位于/etc/mysql/my.cnf),修改步骤如下:1.在client段中加上default-character-set = utf82.在mysqld段中加上character_set_server = utf83.mysq...原创 2019-03-25 21:49:45 · 1014 阅读 · 2 评论 -
MySQL使用load data导入数据时报错: Cannot add or update a child row: a foreign key constraint fails
目录问题来源解决办法问题来源 初学MySQL,创建三个表department、employee以及project,其中问题主要出现在employee表中,该表定义如下:CREATE TABLE employee( id INT(10) PRIMARY KEY, name CHAR(20), age INT(10), sa...原创 2019-03-20 19:33:55 · 4907 阅读 · 1 评论 -
Linux I/O多路复用——epoll模型实现服务端Socket通信
目录epoll模型epoll函数epoll_createepoll_ctlepoll_wait程序流程水平触发(LT)边沿触发(ET)select、poll、epoll对比为什么ET模式下,需要将套接字设置为非阻塞式?epoll模型 epoll是Linux下多路复用IO接口select/poll的增强版本。 它能显著减少程序在大量...原创 2019-03-15 09:50:49 · 3278 阅读 · 1 评论 -
Linux I/O多路复用——poll模型实现服务端Socket通信
目录poll函数参数说明events相关与select的不同程序流程程序实例poll函数 poll模型在实现服务端时思路是和select类似的,可以说poll是select的加强版,poll函数原型如下:int poll(struct pollfd *fds, nfds_t nfds, int timeout);参数说明fds:文件描述符结构...原创 2019-03-14 19:19:37 · 520 阅读 · 0 评论 -
Linux I/O多路复用——select模型实现服务端Socket通信
目录文件描述符简介select模型理解select缺点select函数函数原型参数说明fd_set 相关程序实例文件描述符简介 在进程中,每打开一个文件,操作系统就会创建相应的数据结构来描述这个文件,这就是描述文件的文件结构体,同时,在进程的PCB中,会有一个struct files_struct *files的指针,它实际上是指向一个指针数...原创 2019-03-14 15:53:34 · 759 阅读 · 0 评论 -
Linux 实现多线程服务端Socket通信(线程共享套接字无法正常通信问题分析与解决)
目录程序流程程序实例值得注意的地方运行结果与多进程服务器处理连接类似,本例的目的是在主线程中创建多个子线程来处理连接请求。程序流程1. 创建基本的套接字,并绑定地址信息、设置监听;2. 创建一个线程函数,用于子线程中进行客户端与服务端的数据通信;3. 循环accept来接收连接请求,每接收一个连接请求,就创建一个子线程;4. 将子线程detach(),使子...原创 2019-03-13 20:01:25 · 1644 阅读 · 0 评论 -
Linux实现多进程服务端Socket通信
目录程序流程程序实例运行结果本例主要是让服务器能够同时处理多个客户端的连接请求。程序流程1. 创建基本的套接字,并绑定地址信息、设置监听;2. 循环accept来接收连接请求,每接收一个连接请求,就创建一个子进程;3. 在子进程中进行客户端与服务端的数据通信;4. 在父进程中定义一个消息处理程序,用来等待子进程结束,从而防止僵尸进程的产生。程序实例#i...原创 2019-03-13 12:25:04 · 1647 阅读 · 0 评论 -
TCP的三次握手及四次挥手总结(从抓包角度理解)
目录TCP报文首部TCP连接、传输及断开过程图TCP状态图三次握手过程理解四次挥手过程理解从抓包来理解TCP建立连接、数据传输以及断开连接的过程建立连接过程数据传输过程连接断开过程为什么连接的时候是三次握手,关闭的时候却是四次握手?为什么客户端最后还要等待2MSL(最大报文段生存时间)?为什么不能用两次握手进行连接?如果已经建立了连接,但是客户端...原创 2019-03-12 21:21:42 · 1066 阅读 · 0 评论 -
Linux实现简单的socket通信(TCP/IP)
目录1.服务端创建流程2.服务端程序3.客户端创建流程4.客户端程序5.运行结果1.服务端创建流程服务端流程:(被动连接,需创建自己的地址信息)1.创建两个文件描述符,一个用于创建监听套接字,一个用于服务端与客户端之间连接成功后传输数据的套接字;2.创建服务端地址结构,指定服务端的IP协议簇、IP地址和端口号;(服务端创建自己的地址信息)2.将监听套接字与服...原创 2019-03-12 19:36:38 · 8005 阅读 · 1 评论 -
孤儿进程与僵尸进程[总结](转)
转自http://www.cnblogs.com/Anker/p/3271773.html1、前言 之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2、基本概念...转载 2019-03-08 20:05:03 · 118 阅读 · 0 评论 -
Linux下静态库、共享库的创建与应用
目录1 什么是静态库和共享库1.1 为什么要有静态库和共享库1.2 静态库和共享库的区别2 用例子说明两种库的创建与应用2.1 静态库的创建与应用2.1.1 静态库的创建2.1.2 静态库的应用2.1.3 静态库搜索路径补充说明2.2 共享库的创建与应用2.2.1 共享库的创建2.2.2 共享库的应用2.2.2 共享库搜索路径补充说明1...原创 2019-02-15 09:53:56 · 7020 阅读 · 4 评论 -
Vim的使用:常用键位总结
目录1 普通模式1.1 光标移动1.2 搜索替换1.3 删除、复制、粘贴1.4 注释、取消注释1.4.1 注释1.4.2 取消注释2 插入模式3 命令模式进入vim的方式很简单,比如说现在要用vim打开test.cpp,只需要在命令行中输入vim test.cpp即可,其他的像txt等文件也是一样的。vim 共分为三种模式,分别是普通模式,插入模式和...原创 2019-01-27 20:41:38 · 479 阅读 · 0 评论 -
ubuntu 下运行程序报错 对‘std::cout’未定义的引用:gcc与g++的区别
目录1 问题提出2 gcc与g++的区别2.1 预处理2.2 编译2.3 汇编2.4 链接运行3 总结1 问题提出linux初学,写了个例程,用gcc -o编译时出现以下问题:后来经过查询网上的资料,发现只需要将命令改为g++即可,如图:2 gcc与g++的区别 先来简单总结一下gcc和g++最主要的区别:对于 *.c和*.c...原创 2019-01-27 12:28:26 · 3821 阅读 · 3 评论