自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Sanjiye的博客

linux系统编程

  • 博客(39)
  • 资源 (1)
  • 收藏
  • 关注

原创 Lustre文件系统fid介绍

fid是lustre文件系统中文件的唯一标识,总共128位,fid序列、fid序列内编号、fid版本号(目前未使用默认为0)

2024-02-07 16:00:08 407

原创 ssh Connection closed by remote host解决

最近某台服务器隔一段时间就会有ssh连接失败的告警,但是上去排查的时候会发现ssh并没有连接失败的错误。后来有在ssh的地方添加日志,打印错误的输出,最终得到的报错。

2023-04-09 15:27:40 2230

原创 shell并发遍历目录并对文件进行处理

最近有需要对目录进行遍历,并对目录中的文件进行处理,发现网上没有找到比较适合的shell并发遍历的脚本,看来就只能自己写了。。。

2022-09-14 20:32:57 768

原创 Linux 内核文件系统模块结构体关系图

Linux虚拟文件系统结构体关系图

2022-07-14 20:34:07 784 2

原创 网络编程复习

题型分布及得分:问答题5道40分;设计题3道50分;论述题10分一、 问答题(40分 5道)1. 阻塞的Socket通信的原理是什么?​​ Socket 就像一个电话插座,负责连通两端的电话,进行点对点通信,让电话可以进行通信,端口就像插座上的孔,端口不能同时被其他进程占用。而我们建立连接就像把插头插在这个插座上,创建一个 Socket 实例开始监听后,这个电话插座就时刻监听着消息的传入,...

2019-07-08 13:03:10 575

原创 Linux题型复习

一、常用命令及工具(10分)见课件chap1二、名词解释/简答题(20分)1.根目录下各个目录的详细介绍/bin:二进制程序/boot:启动配置文件/dev:设备文件 包含设备文件 终端设备,usb或连接到系统的任何设备/etc:配置文件/home:用户家目录/lib:系统库文件/media:挂载可移动设备的临时目录/mnt:挂载文件系统/opt:提供一个可供选的应用/p...

2019-07-07 11:21:44 884

原创 Linux系统编程复习

第一章:操作系统基本知识1.根目录下各个目录的详细介绍/bin:二进制程序/boot:启动配置文件/dev:设备文件 包含设备文件 终端设备,usb或连接到系统的任何设备/etc:配置文件/home:用户家目录/lib:系统库文件/media:挂载可移动设备的临时目录/mnt:挂载文件系统/opt:提供一个可供选的应用/proc:特殊的动态目录,不同时间下,里面的内容不一样...

2019-07-06 23:28:09 1210

原创 Linux I/O多路复用select详解及FD_系列宏的源码分析

I/O多路复用的理解先讲一个大家都比较熟悉的例子吧 小时候咱们都喜欢看《亮剑》、《雪豹》这一类的抗日剧,里面八路军在自己的驻地周围都会24小时分布一些暗哨,每当有鬼子要进行扫荡或者清剿的时候暗哨就会赶紧告诉驻地的八路军,有敌人过来了,赶紧抄家伙干仗了。其实这就和咱们要讲的I/O多路复用有异曲同工之处。 在我们接触I/O多路复用以前,在处理一些比较多的连接或者请求的时候大多数人会去使用类似下...

2018-08-14 16:27:10 2863

原创 Linux信号总结

信号是由用户、系统或者进程发送给目标进程的信息,用来通知目标进程的状态改变或系统异常。发送信号kill#include <sys/types.h>#include <signal.h>int kill(pid_t pid, int sig);该函数可以把sig信号发送给pid指定的目标进程 pid 参数 含义 pid &gt...

2018-08-13 15:26:36 295

原创 Linux生产者消费者模型实现

生产者——消费者模型顾名思义,就是一个或多个线程往仓库生产东西,另外的线程从仓库拿东西,在咱们的线程池中也有所应用。咱们看看维基的解释: 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了共享固定大小缓冲区的两个线程——即所谓的“生产者”和“消费者...

2018-08-13 08:34:37 479

原创 Linux时间轮应用:关闭非活动连接

介绍时间轮顾名思义,就是将不同时间的定时任务放在一个轮子上,既然是轮子,肯定是会转动的,每当指针转动到一个时间槽的时候我们会到这个时间槽中去执行到期的定时任务。...

2018-08-09 16:49:07 748

原创 Linux高性能服务器编程springsnail源码解析(c++负载均衡)

在《Linux高性能服务器编程》一书中为了帮助大家将书中的知识融汇到实际项目中,作者特意编写了一个较为完整的负载均衡服务器程序springsnail。里面用到了进程池、有限状态机这些知识点。自己是在网上找到的这个程序的源码,起初接触的时候,总共1400多行代码里面没有一行注释,网上也没有一篇博客去对这个项目进行解析,因此写这篇博客供大家一起分享学习。 咱们从main函数开始,我们要介绍几个c语言...

2018-08-02 12:33:17 4316 3

原创 23种设计模式之策略模式(c++实现)

定义策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 Strategy 模式典型的结构图为: 大家肯定看着很懵逼,其实第一次接触类图的时候我自己也是这样。 那么咱们举个例子来解释一下。 假设我们要实现一个角色游戏,context为所有角色的基类(例子的代码后面会实现,此处只是拿context举例,此处的context并不是基类)...

2018-06-22 23:47:23 1408

原创 同时处理TCP和UDP请求的回射服务器

server.cpp#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<sys/epoll.h>#include<netinet/in.h>#include<arpa/inet.h>#include<assert.h&g

2018-03-15 21:53:26 633

原创 c++中string类的基本实现

#pragma once#include<iostream>#include<string.h>using std::ostream;using std::istream;class my_string{private: char *data; int len;public: static const int npos = -1; //返回

2017-12-23 13:13:04 515

原创 LeetCode Add Two Numbers

题目描述You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and retur

2017-12-17 18:11:31 257

原创 linux两个线程交替打印数字

#include&lt;stdio.h&gt;#include&lt;unistd.h&gt;#include&lt;stdlib.h&gt;#include&lt;pthread.h&gt;#define COUNT 10static int i = 1;pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;pthread_c...

2017-12-10 19:06:37 4113

原创 c++初始化列表的一些知识点

性能优化在刚接触c++时候就觉得c++很有意思,比如在c中用”=”赋值的一些语句可以使用”()”进行初始化,但是之前并没有十分理解初始化相比于赋值语句有什么优点,后来在学习了类之后,初始化列表的出现,让我对初始化有了更加深刻的理解。首先看代码#include<iostream>using namespace std;struct Test1{ Test1() //无参析构 {

2017-12-03 21:44:15 689

原创 1231 最优布线问题

题目描述 Description 学校需要将n台计算机连接起来,不同的2台计算机之间的连接费用可能是不同的。为了节省费用,我们考虑采用间接数据传输结束,就是一台计算机可以间接地通过其他计算机实现和另外一台计算机连接。为了使得任意两台计算机之间都是连通的(不管是直接还是间接的),需要在若干台计算机之间用网线直接连接,现在想使得总的连接费用最省,让你编程计算这个最小的费用。输入描述 Input Des

2017-11-24 21:49:49 418

原创 互斥锁和条件变量实现读写锁

main函数test.c#include<stdio.h>#include<unistd.h>#include<pthread.h>#include"rwlock.h"my_pthread_rwlock_t rwlock = MY_PTHREAD_RWLOCK_INITIALIZER;#define N 5void* thread_fun(void *arg){ my_pthr

2017-11-08 22:54:36 763

原创 信号量和共享内存的配合使用

信号量信号量是一个计数器,常用于处理进程或线程的同步问题,特别是对临界资源访问的同步。 信号量的值大于或等于0时表示可供并发进程使用的资源实体数;小于0时代表正在等待使用临界资源的进程数1、信号集的创建或打开int semget(key_t key, int sems, int sem_flags);key 是由ftok()的到的键值。 nsems指明要创建的信号集包含的信号个数,改参数后面还会提

2017-11-07 16:59:19 3342

原创 注释转换(c++风格转c风格)

介绍c语言风格的注释为块注释,c++风格为行注释。/*块注释*///行注释在项目中人们喜欢用不同风格的注释,或者两种风格的注释混用,这并不影响代码的功能,但是在一些工具当中要求代码的注释风格统一为c或者c++风格。 所以写了一个处理文件注释的代码。分析我们使用了状态机的概念,即在对文件中各个字符检测的时候遇到特定的字符对全局变量赋不同的状态值,来代表代码所处的状态,下面为不同状态间相互转换的示意

2017-09-24 16:09:40 876 2

原创 暑假留校总结

开学自己就大二了,自己这一年里面学习了不少的东西,放假回家和同学们聊了一下,感觉自己确确实实提升很大,单就暑假留校的知识就够自己喝一壶的了。第一周学习了文件操作 ,了解了Linux的文件结构,大概了解了Linux根目录下主要目录的作用。 然后是文件的输入输出操作使用了creat,open,close,read,write等文件的输入输出函数。 最后是文件属性操作,移动和删除,以及目录操作。 这

2017-09-03 21:12:34 935

原创 阿里云解决刚创建之后无法ssh联接

博主最近刚买的阿里云服务器,自己迫不及待的用ssh远程联接,但是一直没有动静 什么鬼!然后一直等啊等,出现ssh: connect to host xx.xx.xx.xxx port 22: Connection timed outConnection timed out …,当时对端口还没有很深的了解,只知道端口是设备与外界通讯交流的出口,然后忽视了port 22这个提示…然后就在阿里云的控制台

2017-08-11 10:07:33 4696

原创 atoi函数的实现

最近看完Linux线程然后在看网络编程,但是网络编程新概念太难了,就看剑指offer这个书缓缓。里面由关一个atoi函数实现的问题感觉非常有趣,就介绍给大家。 #include <stdlib.h> int atoi(const char *nptr);atoi() 函数会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数

2017-08-06 22:57:09 783

原创 Linux中互斥锁和条件变量的配合

一段代码引发的思考最近一直都在看Linux_c,在条件变量一节的学习中遇到一些疑惑,先看代码吧#include <stdio.h>#include<unistd.h>#include <pthread.h>pthread_mutex_t mutex;pthread_cond_t cond;void *thread1(void *arg) { pthread_cleanup_pus

2017-08-04 11:02:27 719 1

原创 dup2重定向后的恢复

这周是留校的第二周,写shell分析参数着实难受,更难受的还在后面,由于自己shell的结构比较奇特,在fork之前已经进行了重定向,导致在excv执行程序之后结果无法打印到屏幕上。好生苦恼,好在万能的Google解决了这个问题,因此为大家分享一下。 咱们先来看个代码吧#include<stdio.h>#include<unistd.h>#include<sys/wait.h>#includ

2017-07-30 19:56:14 2721

原创 关于vfork的小知识

介绍vfork和fork一样都可以用来创建一个新进程,与fork相比,它有一些自己独特的用处。下面是他们的一些异同 * vfork 与fork一样都是调用一次,返回两次(一个是父进程调用vfork后的返回值,该返回值为子进程的pid。一个是子进程调用vfork的返回值,该返回值为0) * 使用fork创建一个子进程的时候,子进程只是完整复制子进程的资源。这样得到的子进程独立于父进程,具有

2017-07-26 10:04:46 917 2

原创 Linux中ls -a,-l,-r,-R命令的实现

ls简介ls是我们使用Linux最常用的命令,可以用来打印当前目录或者制定目录的清单,显示出文件的一些信息等。 ls -a可以将目录下的全部文件(包括隐藏文件)显示出来 ls -l 列出长数据串,包括文件的属性和权限等数据 ls -r将排序结果反向输出,例如:原本文件名由小到大,反向则由大到小 ls -R连同子目录一同显示出来,也就所说该目录下所有文件都会显示出来(显示隐藏文件要加-a参数)

2017-07-23 21:32:07 30077 5

原创 Linux中chmod指令的实现

chmod命令可以使用八进制数来指定权限。首先man 2 chmod查看chmod函数原型 为int chmod(const char *pathname,mode_t mode);权限更改成功返回0,失败返回-1.错误代码储存在errno中#include<stdio.h>#include<stdlib.h> //strtol对应头文件#include<sy

2017-07-17 20:47:45 1534 2

原创 赫夫曼树以及赫夫曼编码

1.概念赫夫曼树赫夫曼树,又称最优树,是一类带权路径长度最短的树。 首先给出路径和路径长度的概念。从树中一个节点到另一个节点之间的分支构成这两个节点之间的路径,路径上的分支数目叫做路径长度。树的路径长度是从树根到每一节点的路径长度之和。 考虑上带权的节点。节点的带权路径长度为从该结点到树根之间的路径长度与节点上权的乘积。树的带权路径长度为树中所有叶子节点的带权路径长度之和,通常记作WPL=∑nk

2017-07-14 23:20:09 768 1

原创 define和typedef的区别

由于最近接触数据结构比较多,经常会遇到 #define int ElenType等等的一些宏定义,以及在定义链表节点的时候经常要用到typedef,感觉define和typedef有一些相似的地方,但是也存在一定的区别。define是宏定义,typedef是类型定义#define ptr1 char* typedef char * ptr2; ptr1 p1,p2; ptr2 p3,p4;

2017-07-11 17:52:26 485

原创 二叉树的层次遍历

二叉树的层次遍历需要用到队列方面的知识,二叉树之前已经讲过一部分操作,这次主要讲二叉树的层次遍历 所谓的层次遍历即就是先从根结点开始遍历,然后以此根结点的下一级节点(默认从左往右遍历),直到完全遍历。 上图层次遍历的结果应当为A B G C D H E F ,下面咱们来看操作二叉树头文件#ifndef _TREE_H#define _TREE_H#define ElemType char

2017-06-25 15:37:51 3480

原创 队列的实现

队列,又称为伫列(queue),是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。队列的操作方式和堆栈类似,唯一的区别在于队列只允许新数据在后端进行添加。 ———维基百科我们可以用队列完成很多的操作

2017-06-25 11:44:23 737

原创 二叉树的创建,遍历,查找,查找父节点,深度,大小等的递归实现

在计算机科学中,二叉树(英语:Binary tree)是每个节点最多只有两个分支(不存在分支度大于2的节点)的树结构。通常分支被称作“左子树”和“右子树”。二叉树的分支具有左右次序,不能颠倒。 今天我们来实现一下二叉树的创建,三种遍历,以及查找等。 拿这个二叉树来说吧#ifndef _TREE_H#define _TREE_H#define ElemType chartypedef st

2017-06-18 18:38:03 5407 5

原创 linux下清屏以及休眠函数的调用

在windows环境下用清屏和休眠的时候是用的windows.h这个库,那么在linux下我们想要使用这几个函数该怎么去操作呢? 话不多说,放代码#include<stdio.h>#include<unistd.h>#ifdef __linux__char* cl = "reset";#elif __WIN32__char* cl = "cls";#elseprintf("count

2017-06-08 20:40:54 894

原创 栈应用于进制转换

前面我们介绍了栈用于括号匹配,本次咱们介绍栈的其他应用。因为栈先进后出的特点,刚好和进制转换数据从后往前读相吻合,所以栈也可以解决进制转换的问题#include<iostream>using namespace std;#include<assert.h>#define ElemType int //定义数据元素的类型#define STACK_SIZE

2017-06-04 17:43:02 674

原创 栈应用于括号匹配

栈是一种先进后出的结构,它在程序设计中有很多的应用,今天咱们介绍一下栈应用于括号匹配的问题有一行括号序列输入数据是一个字符串S(S的长度小于100,且S不是空串),数据保证S中只含有”[“,”]”,”(“,”)”四种字符 如果字符串中所含的括号是配对的,则输出YES!,如果不配对则输出NO!分析: 首先咱们先将输入的字符串输入到一个字符数组中,然后依次入栈,若下一次输入的括号刚好能和栈顶的括号匹

2017-06-04 16:12:39 662

原创 stdout和stderr关于缓冲区的浅解

stdout(标准输出),输出方式是行缓冲。输出的字符会先存放在缓冲区,等按下回车键时才进行实际的I/O操作。 stderr(标准错误),是不带缓冲的,这使得出错信息可以直接尽快地显示出来。#include<stdio.h>int main(){ while(1) { fprintf(stdout,"Group"); fprintf(stderr

2017-05-29 00:04:16 6304 6

springsnail项目源码

c++负载均衡源码。该程序能从所有逻辑服务器中选取负荷最小的一台来处理新到的客户端。使用了有限状态机、进程池、有限状态机、统一信号源以及高效数据结构来提高其性能。有助于将所学的东西融会贯通起来。

2018-08-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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