Gabriel.Tian
高级BSP工程师
熟悉Linux FreeRTOS嵌入式操作系统,具有高通 MTK 紫光展锐等多款平台开发经验
展开
-
Linux:关于OOM Killer机制所产生问题的分析
在Linux虚拟机上编译Android代码时,出现编译进程被杀死的现象,随后在/ var / log / messages文件中查看到如下图所示的错误消息:total-vm、rss、anon-rss、file-rsstotal-vm: 进程使用的虚拟内存大小rss: total-vm中的一部分内存实际上已经被映射到了系统RAM区来供其分配或使用(或已分配和使用)anon-rss: 即匿名内存。分配在实际内存块中的那部分rss(除了映射到文件或设备的)file-rss: 映射到设备和文件得 rss原创 2021-01-12 21:00:22 · 2520 阅读 · 0 评论 -
FTP详解及模拟实现一个vsftpd服务器
FTP协议概念:FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上...原创 2020-06-29 21:17:34 · 650 阅读 · 0 评论 -
高性能服务器(C10K) ---- Linux集群监控系统(Epoll)
编译环境:Ubuntu 18.04,Qt5.11.2有关技术:epoll机制,线程池,Reactor模式服务器:C10K_server.proTEMPLATE = appCONFIG += console c++11CONFIG -= app_bundleCONFIG -= qtLIBS += -lpthreadSOURCES += \ main.cpp \ ...原创 2019-12-13 14:48:54 · 455 阅读 · 0 评论 -
2020校招笔/面试复盘:C++软件开发/后台开发岗
bilibili Wind UCloud 美团 快手 白山云科技 域起网络 ......and so on.原创 2019-11-29 21:01:25 · 1186 阅读 · 0 评论 -
Linux:Ubuntu18.04安装及配置mysql connector C++
肯定可以使用的方法:下载mysql connector的头文件和库:MySQL::Download Connector C++首先选择Linux-Generic,All下面的Linux - Generic (glibc 2.12) (x86, 64-bit), Compressed TAR Archive选项进行下载并安装;其次选择Ubuntu Linux,Ubuntu Linux 18....原创 2019-11-01 14:15:44 · 1732 阅读 · 1 评论 -
解决Ubuntu内核更新或安装软件时出现的问题:下列软件包有未满足的依赖关系 : linux-generic依赖: linux-headers-generic (= 4.15.0.65.67)
问题如下:之前在网上查到的输入sudo apt-get update --fix-missing等命令或直接删除多余内核并不能解决此类软件包损坏问题,运行这些命令后还会出现未满足依赖关系的错误解决方案:命令行输入sudo apt --fix-broken install中途执行时选择Y,直接解决。由于Linux升级后,内核版本太多会导致空间不足,为保证不再出错,可使用dpkg --ge...原创 2019-11-01 11:31:12 · 8381 阅读 · 3 评论 -
(详)Linux:互斥锁(附 死锁,读写锁相关),条件变量及信号量
条件变量使用思路:当变量不满足运行条件时,添加条件变量以阻塞当前线程,等待满足时继续运行 使用方法:条件变量 + 互斥锁 (同时使用以保证线程同步)使用互斥锁保护共享资源使用条件变量以引起阻塞条件不满足:阻塞线程当条件满足:通知阻塞线程开始工作条件变量类型:pthread_cond_t;下面举一个简单的例子,利用条件变量和互斥锁生成的生产者消费者模型:...原创 2019-06-03 20:59:59 · 767 阅读 · 1 评论 -
Linux:xinetd服务安装与配置(操作环境:Ubuntu 18.04)
Xinetd服务简介:支持对tcp、udp、RPC服务(但是当前对RPC的支持不够稳定) 基于时间段的访问控制功能完备的log功能,即可以记录连接成功也可以记录连接失败的行为 能有效的防止DoS攻击(Denial of Services)能限制同时运行的同一类型的服务器数目 能限制启动的所有服务器数目 能限制log文件大小将某个服务绑定在特定的系统接口上,从而能实现只允许私有网络访问某项...原创 2019-06-10 15:19:21 · 5757 阅读 · 2 评论 -
Linux:基于select机制的socket通信(编译环境:Ubuntu18.04 )
网络字节序TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节。以下库函数作为网络字节序和主机字节序的转换之用:#include <arpa/inet.h>uint32_t htonl(uint32_t hostlong);uint16_t htons(uint16_t hostshort);uint32_t ntohl(uint32_t netlong);u...原创 2019-07-16 11:30:33 · 402 阅读 · 0 评论 -
Linux C:基于select机制的多人网络聊天室 —— 服务器及客户端
编译环境:Ubuntu18.04 , Qt Creator 4.7.1如果对select机制或者socket通信机理不了解,请参见我的上一篇博文:(Linux:基于select机制的socket通信(编译环境:Ubuntu18.04 ))https://blog.csdn.net/weixin_38815609/article/details/96110919创建项目文件由于代码量较多,利...原创 2019-07-20 00:38:28 · 688 阅读 · 0 评论 -
Linux:解决MySQL启动过程中的一系列问题(ERROR 1045 , ERROR 2002 , ERROR 1698 , ERROR 1064)
运行环境:Ubuntu18.04 ,MySQL5.7.27安装好MySQL后,运行MySQL:执行mysql start出现错误:ERROR 1045 (28000): Access denied for user 'huoz'@'localhost' (using password: NO)尝试使用root登录MySQL:执行sudo -u root mysql出现错误:ERROR 2...原创 2019-08-05 13:24:08 · 265 阅读 · 0 评论 -
Linux:基于epoll机制的socket通信
epoll定义及配置epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。目前epell是linux大规模...原创 2019-08-01 17:33:53 · 1595 阅读 · 0 评论 -
Linux C++:基于select机制的多人网络聊天室 —— 服务器及客户端
从C语言版本迭代过来的,增加了界面,包装类对象;服务器代码没有改变。存在少许bug,未来得及修正,在注册时可能出现崩溃,源码持续更新…编译环境:ubuntu18.04 Qt5.11.2客户端代码:ChatClient.proTEMPLATE = appCONFIG += consoleCONFIG -= app_bundleCONFIG += qtCONFIG += c++11...原创 2019-09-17 08:29:53 · 436 阅读 · 0 评论 -
Linux:进程与线程(详)
一张图理解线程:主线程和子线程共享:.text.bss.data堆动态加载区环境变量命令行参数通信时,可使用全局变量或堆数据不共享:栈区是每个线程独有的在Linux下,线程就是进程,属于轻量级进程。对于内核来说,线程就是进程。多进程和多线程的区别:多进程:-------始终共享的资源:代码 文件描述符内存映射区 mmap-------线程共享:堆...原创 2019-05-22 18:55:58 · 207 阅读 · 0 评论 -
Linux:消息队列
消息队列提供了一种从一个进程向另一个进程发送数据块的方法。每个数据块都存在一个类型,接收进程可以独立地接收含有不同类型的数据。可通过发送消息来避免有名管道的同步和阻塞问题。消息队列与有名管道一样,每个数据块都有长度限制#include <sys/msg.h>#include <sys/types.h>#include <sys/ipc.h>#incl...原创 2019-04-22 17:25:21 · 252 阅读 · 0 评论 -
Linux:内排序(插入排序,选择排序,交换排序,归并排序,基数排序)
编译环境:Linux 10.04 LTS GCC1.插入排序:#include <stdio.h>#include <stdlib.h>#include <string.h>//交换void swap(int *a, int *b){ int tmp; tmp = *a; *a = *b; *b = tmp;}//打印一个数组...原创 2019-04-22 17:44:21 · 227 阅读 · 0 评论 -
Linux:阻塞/非阻塞读终端
阻塞读终端:block指当串口输入缓冲区没有数据的时候,read函数将会阻塞在这里,移植到串口输入缓冲区中有数据可读取,read读到了需要的字节数之后,返回值为读到的字节数#include <unistd.h>#include <stdlib.h>int main(void){ char buf[10]; int n; n = read(STDIN_FILE...原创 2019-04-22 18:03:02 · 616 阅读 · 0 评论 -
Linux:进程回收
编译环境:Ubuntu 18.04阻塞函数:pid_t wait(int *status)解除阻塞条件:有一个子进程死亡返回值 = -1时:回收失败,没有子进程返回值 > 0时:回收子进程对应的pid参数:status判断子进程如何死亡:1.正常退出2.被信号杀死调用一次只能回收一个子进程mywait.c#include <stdio.h>#include...原创 2019-05-08 10:39:37 · 1306 阅读 · 0 评论 -
Linux:利用mmap创建匿名内存映射区以及进程间通信
关于mmap的基础编码在我之前的博文以及介绍过了,下面就直接放码。编译环境:Linux 18.04 Vimmmap创建匿名内存映射区:第二个参数:指定映射区大小第四个参数:需要添加MAP_ANON的宏第五个参数:-1anon_mmap.c#include <stdio.h>#include <unistd.h>#include <stdlib.h&...原创 2019-05-13 19:15:54 · 2363 阅读 · 2 评论 -
Linux:进程间通信(创建匿名管道,父子进程间通信,兄弟进程间通信)
过一遍管道的基础知识:1.本质:存在于高速缓存区,属于伪文件,不占用磁盘空间。缓冲区大小默认4K,可根据实际情况适当调整2.读端和写端各自对应一个文件描述符,数据从写端流入,读端流出3.操作管道的进程被销毁之后,管道占用的内存空间自动被释放4.管道默认阻塞5.内部实现方式:循环队列 (先进先出),属于半双工。数据只能读一次,不能重复读取6.匿名管道创建:int pipe(int pip...原创 2019-05-09 23:16:46 · 3315 阅读 · 2 评论 -
Linux:孤儿进程与僵尸进程(源码及操作过程)
编译环境:Ubuntu 18.04孤儿进程:顾名思义,父亲有个孩子,然而父亲英年早逝,孩子便成了孤儿,也就是孤儿进程在早期的ubuntu版本中,孤儿进程会被init进程”领养“,init进程便成为了该孤儿进程的父进程。Ubuntu 16.04版本开始,孤儿进程会被当前操作系统的UI进程”领养“。这种“领养”行为就是为了释放子进程所占用的系统资源。进程结束后,会释放用户区空间,但是释放不了P...原创 2019-05-07 15:26:59 · 554 阅读 · 0 评论 -
Linux:使用有名管道(FIFO)进行通信
和匿名管道学习方法相同,先过一遍基础有名管道:FIFO 用ls -l命令可找到类似 ->p 的就是管道与匿名管道相同,都属于伪文件,不占用磁盘空间。在内存中有一个缓冲区通信方式:半双工用于没有血缘关系的两个进程间通信创建方式:(1)命令:mkfifo 管道名(2)函数:mkfifofifo文件可以使用IO函数进行操作:open/close,write/read,不能执行ls...原创 2019-05-10 13:25:21 · 1070 阅读 · 0 评论 -
Linux:mmap函数讲解(详)
mmap函数用来创建内存映射,将磁盘文件的数据映射到内存,用户通过修改内存就能修改磁盘文件void *mmap(void *addr //映射区首地址,传NULLsize_t length //映射区大小:100byte-4K,不能取0,一般文件多大length就指定多大int prot //映射区权限:PROT_READ 映射区必须有读权限PROT_WRITEPROT_READ |...原创 2019-05-10 19:55:03 · 1366 阅读 · 0 评论 -
Linux:信号 --- 概念,信号集,相关函数
1.不同于QT中的信号,在Linux中,信号是由键盘,命令,系统函数,硬件以及软条件产生的,其中软条件包括定时器等;硬件包括段错误,除0错误等。2.而通过这些条件刚产生的信号均处于未决状态,等待被进程处理。3.当这些信号被递达一个进程后,会产生三种执行结果:忽略,捕捉,执行默认动作执行man 7 signal命令,会在帮助文档中显示对于信号的几种处理动作:...原创 2019-05-16 11:05:51 · 565 阅读 · 0 评论