Linux
文章平均质量分 58
sesiria
这个作者很懒,什么都没留下…
展开
-
Linux/Unix系统下的线程安全IO
SIO Packages (Signal-Safe IO)/************************************************************* * The Sio (Signal-safe I/O) package - simple reentrant output * functions that are safe for signal handlers. *************************************************原创 2021-10-05 13:56:00 · 422 阅读 · 0 评论 -
Linux/Unix 使用inotify,hook函数来监控文件事件
在实际开发中有时候回遇到许多文件的操作,或者需要对文件事件进行排查。。可以使用inotify函数来完成这项工作代码如下:#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <unistd.h>#include <sys/types.h>#include <sys/inotify.h>#define EVENT_SIZE原创 2021-08-15 22:25:25 · 882 阅读 · 0 评论 -
关于信号类程序的同步机制
一、多进程中的信号同步机制:基于signal interrupt的例子,用于防止race condition先看以下例子:#include "csapp.h"void handler(int sig){ int olderrno = errno; sigset_t mask_all, prev_all; pid_t pid; Sigfillset(&mask_all); while((pid = waitpid(-1, NULL, 0原创 2021-07-11 12:51:44 · 454 阅读 · 0 评论 -
CSAPP - 一个简单的Shell
Shell命令在是最常用的一个和操作系统交互的工具。shell命令的基本执行过程是:1)从stdin来读取用户的command。2)对command进行解析,并判断是否为buildin command3)如果是buildin command则执行buildin command4)如果非buildin command,则执行fork命令,然后在fork的子进程中执行execve创建新的program。其中还涉及到对输入command进行parse的简单过程。5)如果要对进程的切换f原创 2021-07-04 22:10:25 · 372 阅读 · 0 评论 -
安装FastDFS单机版环境
1. 主机环境与系统:服务器:阿里云操作系统:Ubuntu 18.04 64位本机已经开启root权限,因此省去了执行su等ming'ling原创 2021-06-06 17:41:25 · 381 阅读 · 4 评论 -
一个异步日志IO的demo
整理了以下项目中用到的一个异步日志IO的实现,基于以下设计:1. 使用了一个push队列和一个write队列。主线程往push队列中加数据,写线程从write队列中拿数据写到磁盘2. 默认情况下write线程处于睡眠3. 有两种情况会唤醒写线程。 1)push队列满后,会调用force_write将push队列和write队列交换并唤醒写线程将日志写入磁盘 2)如果push队列长时间未满,待定时器触发后,也会切换push和write并唤醒写线程。 3)每次写...原创 2021-05-17 23:18:47 · 182 阅读 · 0 评论 -
Unix/Linux 编程:网络编程之 内存池
一,内存池的原理二,内存池的应用三,基于连接的简单的内存池的实现/** * File name: memorypool.c * Author: sesiria 2021-05-05 * A Implementation of memory pool. * */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#in..原创 2021-05-07 20:53:46 · 221 阅读 · 0 评论 -
Unix/Linux 编程:网络编程之 线程池
一,线程池的基本组成1. 工作线程队列2. 任务队列3. 线程管理器(封装了线程池的一些基本方法,创建,销毁,加入新任务等)比如一个常用的网络服务,通常主循环用于处理接收与基本的recv/send操作。可是如果某些业务操作需要长时间的处理数据。比如等待数据库查询结果,对数据进行编解码等业务逻辑事。为了不让主线程进行长时间的阻塞,从而引入了线程池。让线程池的工作队列来处理具体的业务。主线程则继续处理网络连接。应用:线程池是生产者与消费者模型的一个最典型的应用。最常见的ngin.原创 2021-05-05 18:06:20 · 424 阅读 · 5 评论 -
Unix/Linux 编程:网络编程之 基于Reactor实现WebSocket服务
使用到的上一篇文章中基于epoll实现的Reactor模型。OpenSSL使用其中的SHA1,base64 encode等库openSSL源码使用1.1.0l$ tar xzvf OpenSSL-1.1.0l.tar.gz$ cd OpenSSL-1.1.0l$ ./config –-prefix=/usr/local/openssl$ make$ sudo make install安装完以后需要将openSSL的库和头文件添加到默认的搜索路径。否则后续编译需要加一大串 -I.原创 2021-05-03 18:21:30 · 295 阅读 · 0 评论 -
Unix/Linux 编程:网络编程之 epoll与Reactor
在上一篇文章中实现了epoll的非阻塞IO的服务端程序可是如果实际应用中需要注册大量事件,一个超长的if代码块会严重降低代码的可读性和管理因此参考了 Reactor模型的实现改写了epoll服务器。讲所有的事件处理函数都写成回调函数的形式。这里注意几个参数传递时候的坑。/* Server based on EPOLL */#include <stdio.h>#include <stdlib.h>#include <string.h>#include原创 2021-05-03 13:31:17 · 297 阅读 · 0 评论 -
Unix/Linux 编程:网络编程之 IO模型
一、阻塞IO(blocking)主线程阻塞等待用户连接请求(accept阻塞)。等请求达到以后再调用(recv)系统调用接收数据,这时候又阻塞等待。等内核将数据接受好并从内核空间拷贝到用户空间后,系统调用返回,表明数据读取完毕。这个操作在等待IO的时候会将主线程挂起而不能执行其他操作,浪费了大量服务器性能。二、多线程(blocking+multithread)由于accept系统调用会对每个客户端的连接都返回一个fd,因此可以利用多线程的方法。主线程只负责accept处理连接请求。原创 2021-05-02 14:33:14 · 222 阅读 · 2 评论 -
C语言中Try/Catch的实现
C语言中Try/Catch的实现许多高级语言中都有Try/Catch的实现用于处理异常。例如在C++中try { // ... do something // ... throw a exception} catch (exception &e) { // handled the specific exception} catch (...) { // handled other exception.}可以通过以上语句块来实现异常的捕获和处理。原创 2021-04-07 22:46:10 · 14559 阅读 · 3 评论 -
GDB的安装以及使用入门
1 安装gdb在Debian GNU/Linux Desktop中,应用程序 >> 附件 >> Root Terminal。输入密码,在Root权限下的终端下输入:apt-get update……apt-get install gdb……安装时选择y安装好gdb。注:在Centos 上 运行y转载 2016-07-24 17:57:18 · 4523 阅读 · 0 评论 -
Vim入门基础
转自 : http://www.jianshu.com/p/bcbe916f97e1Vim入门基础公司新员工学习有用到,Vim官网的手册又太大而全,而网上各方资料要么不全面,要么不够基础。在网上搜集各方资料,按照自己的框架整理一份Vim入门基础教程,分享出来。特点是偏向基础,但对入门者来说足够全面,而且结构框架清晰。另外,参考资料众多,没有一一标出来,转载 2016-07-04 09:36:54 · 320 阅读 · 0 评论 -
CentOS 上安装GCC GDB 和VIM 开发环境
GCC 即 GNU 编译器集,是一个 GNU 项目开发的支持多种编程语言的编译系统(LCTT 译注:在你需要自己编译构建软件时需要它)。在最小化安装的 CentOS 没有默认安装。运行下面的命令安装 gcc 编译器。# yum install gcc在 CentOS 上安装 GCC检查安装的 gcc 版本。# gcc --version检原创 2016-07-22 22:07:10 · 2294 阅读 · 0 评论 -
Unix/Linux 编程:网络编程之一 Socket
参考了这篇博文socket的基本知识http://blog.csdn.net/hguisu/article/details/7445768/一个最简单的CS程序上代码:client.c/* File Name: client.c*/#include #include #include #include #include #include #in原创 2017-12-09 13:21:56 · 289 阅读 · 0 评论 -
Unix/Linux 编程-Makefile/gcc 构建文件
使用Makefile来构建文件参考来这篇博文:http://blog.csdn.net/haoel/article/details/2886一个最简单的Makefile 参考UNP中的代码实例#file path for .h and .aLIBS= /usr/local/lib/libunp.aINCLUDE=/usr/local/include/unp/lib原创 2017-12-09 14:40:42 · 420 阅读 · 0 评论 -
Unix/Linux 编程:多线程(进程)编程
之前已经用过不少在Windows和C++上多多线程编程技术来。在Linux上原理大致和Windows是相同多。主要多区别在于了解POSIX规范和一些API参考文档:http://www.cnblogs.com/skynet/archive/2010/10/30/1865267.html实际上笔者认为创建线程池和使用epoll(windows上的完成端口)可能更适合开发商用应用程序。但是原创 2017-12-10 14:00:09 · 274 阅读 · 0 评论 -
CentOs 7 下编译安装Gcc 7.1.0
转载自:https://blog.csdn.net/hanzheng260561728/article/details/75125891依赖yum install gcc gcc-c++ xz -y插件安装wget ftp://ftp.gnu.org/gnu/gmp/gmp-6.1.2.tar.xztar -xvf gmp-6.1.2.tar.xzcd gmp-6.1.2./configure...转载 2018-03-30 15:44:47 · 3677 阅读 · 1 评论 -
Vmware Pro 12 上安装CentOS 7 64位
学习参考使用需要用到linux系统,之前是挂在远端VPS上。但是有些时候需要编辑文本开发等,VPS的响应速度还是略逊色。于是决定在本机安装CentOS 7 64位。一,首先是配置VMware 这个比较简单,安装好以后新建虚拟机选择Linux 系统中选择CentOS 64bit就OK了。接下来是配置虚拟机的硬件。根据自己系统的实际硬件来,不打算安装GUI界面只是命令行模式的话这样的配置还原创 2016-06-14 23:44:57 · 799 阅读 · 0 评论