
Linux
judgejames
这个作者很懒,什么都没留下…
展开
-
k8s集群自动化部署脚本-centOS
操作系统:centOS第一步,执行环境配置脚本(所有节点执行)执行脚本时添加hostname参数。#!/bin/bashecho $#if [ $# -ge 2 ]; then echo "参数个数过多,请确认是否输入错误" exitelif [ $# -le 0 ]; then echo "无参数 ,请确认是否输入错误" exitelse # $1是k8s集群中节点的名字 hostnamectl set-hostname $1fi# 修改SeLinux配置,永久原创 2021-10-15 11:12:11 · 1358 阅读 · 1 评论 -
pipe函数详解
pipe函数可用于创建一个管道,以实现进程间的通信。pipe函数的定义如下: pipe函数定义中的fd参数是一个大小为2的一个数组类型的指针。该函数成功时返回0,并将一对打开的文件描述符值填入fd参数指向的数组。失败时返回 -1并设置errno。 通过pipe函数创建的这两个文件描述符 fd[0] 和 fd[1] 分别构成管道的两端,往 fd[1] 写入的数据可以从 fd[0] 读出。并且 fd[1] 一端只能进行写操作,fd[0] 一端只能进行读操作,不能反过来使用。要实原创 2018-11-19 18:44:14 · 44353 阅读 · 7 评论 -
TCP与UDP的区别
TCP&UDP的区别 TCP:面向连接的、可靠的、字节流服务 UDP:无连接、不可靠、数据报服务 字节流服务:发送数据的次数与接收数据的次数没有关系。底层数据发送或接收时,数据有可能被分开或者合并(接收缓冲区和发送缓冲区) 数据报服务:数据段发送的次数和接收的次数相等,若果接收端一次未将一段数据报读取完,则UDP报文段中的数据丢失 TCP字节流...原创 2018-11-17 12:04:48 · 148 阅读 · 0 评论 -
UDP编程步骤
1. 概述UDP提供的是无连接、不可靠的数据报服务。在传输过程中数据可能会丢失。我们只有通过在应用层进行正确的控制才能修复在传输层上存在的缺陷。因此,需要我们编写可靠的UDP应用程序。UDP客户端与服务器交互的步骤如图:标题UDP客户端与服务器交互步骤及涉及到的系统调用 使用UDP协议进行通信时,客户端并不需要与服务器建立连接,只需要通过sendto系统调用...原创 2018-11-17 13:42:50 · 3454 阅读 · 0 评论 -
Linux五种IO模型性能分析
socket阻塞与非阻塞,同步与异步作者:huangguisu1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步: &nb...转载 2018-11-18 11:31:26 · 285 阅读 · 0 评论 -
使用零拷贝函数———sendfile函数以提高服务器性能
一、函数说明sendfie函数在两个文件描述符之间直接传递数据,其中的操作完全在内核中执行,从而避免了内核缓冲区和用户缓冲区之间的数据拷贝,大大提高了效率,被称为零拷贝。sendfile函数定义如下:#include<sys/sendfile.h>ssize_t sendfile(int out_fd, int in_fd, off_t offset, size_t cou...原创 2018-12-04 17:52:04 · 398 阅读 · 0 评论 -
运行时错误:terminate called after throwing an instance of 'std::logic_error'
terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct NULL not valid如图: 主要原因:对一个空指针进行操作。 例如:char *p = NULL;Json::Value val;Json::Reade...原创 2018-11-30 18:56:40 · 18478 阅读 · 1 评论 -
TCP通信 —— 实现线程池与多个客户端进行通信
直接上代码,简单粗暴: 服务器端:int clifd[10]; /* 存放客户端套接字的数组 */sem_t sem; /* 信号量 */pthread_mutex_t mutex; /* 互斥锁 */void initCli() /* 初始化 */{ int i = 0; for(; i < 10; ++i) { clifd[i] = -1...原创 2018-11-28 12:12:09 · 1580 阅读 · 0 评论 -
epoll_event结构体
epoll_event结构体一般用在epoll机制中,其定义如下:struct epoll_event{ uint32_t events; /* Epoll events */ epoll_data_t data; /* User data variable */} __attribute__ ((__packed__));typedef union epoll_dat...原创 2018-12-13 23:08:10 · 23199 阅读 · 3 评论 -
Linux高性能服务器——I/O复用之select
I/O复用可同时监听多个文件描述符发生事件,很大程度提高了程序的性能。I/O复用适用的场合一般有如下几点:客户端程序要同时处理多个socket; 客户端程序要同时处理用户输入和网络连接。如聊天室程序; TCP服务器同时监听socket和连接socket。如服务器连接负载均衡; 服务器要同时处理TCP请求和UDP请求。如回射服务器; 服务器需要同时监听多个端口,或者处理多种服务。如x...原创 2019-01-21 15:18:28 · 401 阅读 · 0 评论 -
为什么是四次挥手不是三次挥手
1. 四次挥手过程以及状态报文段1:主动关闭方向被动关闭方发送结束报文段。 报文段2:被动关闭方发送结束报文段确认,此时主动关闭方数据已经传输完毕。 报文段3:被动关闭方数据也发送完毕,发送结束报文段。 报文段4:主动关闭方对结束报文段进行确认。 2. 可以三次挥手吗 观察四次挥手过程可见报文段3包含了报文段2中的确认值,因此三次挥手只能将报文段3和报文...原创 2019-01-26 10:32:10 · 9577 阅读 · 0 评论 -
signal函数——自定义信号处理方式
1. 信号 信号(signal)是一种通知进程已经发生某种事件的机制。例如,在终端输入Ctrl+C中断正在运行的进程,则就会触发SIGINT的信号发送给该进程。进程如何处理信号有三种选择。1)忽略该信号。有些信号表示硬件异常,例如,除以0或访问进程地址空间以外的单元等,因为这些异常产生的后果不确定,所以不推荐使用这种处理方式。2)按系统默认处理方式。3)提供一个函数...原创 2019-01-22 19:26:56 · 8188 阅读 · 0 评论 -
TCP头部结构详解
每个TCP报文段都包含着此报文段的TCP头部信息,用于指定源端端口、目的端端口以及管理TCP连接等。完整的TCP头部结构可分为固定头部结构和头部选项两个部分。1. TCP固定头部结构16位端口号:包括了源端口号和目的端口号。进行TCP通信时,客户端通常使用系统自动选择的临时端口号(一般都很大),而服务器则使用知服务端口号或服务器管理员自定义的端口号。 32位序号...原创 2019-02-03 13:00:07 · 11350 阅读 · 3 评论 -
TCP协议之三次握手四次挥手及TIMEWAIT状态
1. 简单介绍TCP协议通信连接 传输层协议主要分为TCP和UDP两个协议。UDP是无连接、不可靠的数据报服务。而TCP是面向连接的、可靠的字节流服务。使用TCP协议通信的双方必须先建立连接,然后才能开始数据的传输。并且通信的双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP连接是全双工的,交互性的工作只需要一次连接即可满足。完成数据交换之后,通信双...原创 2019-01-23 12:10:05 · 377 阅读 · 0 评论 -
互斥锁、读写锁和自旋锁的区别
读写锁特点: 读写锁有三种状态:读加锁状态、写加锁状态和不加锁状态 只有一个线程可以占有写状态的锁,但可以有多个线程同时占有读状态锁,这也是它可以实现高并发的原因。当其处于写状态锁下,任何想要尝试获得锁的线程都会被阻塞,直到写状态锁被释放;如果是处于读状态锁下,允许其它线程获得它的读状态锁,但是不允许获得它的写状态锁,直到所有线程的读状态锁被释放;为了避免想要尝试...原创 2019-02-14 18:04:25 · 10074 阅读 · 0 评论 -
Linux高性能服务器——I/O复用之poll
I/O复用可同时监听多个文件描述符发生事件,很大程度提高了程序的性能。I/O复用适用的场合一般有如下几点:客户端程序要同时处理多个socket; 客户端程序要同时处理用户输入和网络连接。如聊天室程序; TCP服务器同时监听socket和连接socket。如服务器连接负载均衡; 服务器要同时处理TCP请求和UDP请求。如回射服务器; 服务器需要同时监听多个端口,或者处理多种服务。如x...原创 2019-02-07 12:33:07 · 225 阅读 · 0 评论 -
Linux下进程与线程的区别及优缺点
进程是程序执行时的一个实例,程序并不能单独执行,只有将程序加载到内存中,系统为他分配资源后才能够执行,这种执行的程序称之为进程,也就是系统进行资源分配和调度的一个独立单位。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。进程存在着很多缺陷,主要集中在两点:(1)进程只能在同一时间干一件事情,如果想同时干两件事或多件事情,进程就无能为力了。(2)进程在执行的...原创 2019-02-14 14:53:30 · 553 阅读 · 0 评论 -
高级I/O函数
Linux提供了很多高级的I/O函数。他们并不像Linux基础I/O函数,如open或read函数等等我们经常会用到的。一般在编写内核模块时要实现这些I/O函数,并且在一些情况下这些系统调用有着非常高的效率。这些函数大致可分为如下三类:用于创建文件描述符的函数,包括pipe、dup/dup2函数。 用于读写数据的函数,包括readv/writev、sendfile、mmap/...原创 2018-11-19 16:56:54 · 211 阅读 · 0 评论 -
TCP编程步骤概述
刚刚接触到服务器编程的知识,来温习一下,实现最基本的TCP服务器和客户端编程流程TCP协议是面向连接的、可靠的、字节流服务。 一、创建socket服务器基本流程:socket、bind、listen、accept、recv/send、close客户端基本流程:socket、connect、send/recv、close#include&l...原创 2018-11-13 17:14:31 · 3330 阅读 · 2 评论 -
Linux下unlink函数的使用
一、头文件#include<unistd.h>二、函数原型int unlink(const char *pathname);三、函数介绍unlink()函数功能即为删除文件。执行unlink()函数会删除所给参数指定的文件。注意:执行unlink()函数并不一定会真正的删除文件,它先会检查文件系统中此文件的连接数是否为1,如果不是1说明此文件还有其他链接对象,因此只对此文件的连接数进行减1操作。若连接数为1,并且在此时没有任何进程打开该文件......原创 2018-11-05 14:57:07 · 50957 阅读 · 7 评论 -
gdb调试
Linux上的调试:gdb 版本: debug版本 调试版本 程序开发人员使用 gcc main.c -o debug -g -->debug版本 -g在编译阶段将调试信息添加进中间文件中 gcc -c main.c -g 调试的目标:生成debug版本的可执行文件 gdb debug版本的可执行文件 .a .li...原创 2018-07-28 17:15:45 · 165 阅读 · 0 评论 -
学习Linux(一)
- Linux基础概念1、Linux操作的使用 效率 光标用户交互 命令 2、Linux文件存储结构 /bin,存放Linux系统中所有的命令以及实现方式,如cat,ls等等 /etc,存放系统所需要以及已安装软件的配置文件 /proc,虚拟目录,存放系统内存的映射,可以通过它来查看进程的状态信息,存放在内存中 /usr,存放所有应用程序以...原创 2018-08-14 10:46:08 · 107 阅读 · 0 评论 -
使用termios结构的密码程序
使用termios结构的密码程序在这个简单的例子中,用户输入密码信息,但并不会显示用户输入的内容。//密码程序passwd.c以下面的定义开始:#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;stdlib.h&amp;gt;#include&amp;lt;string.h&amp;gt;#include&amp;lt;termios原创 2018-09-15 21:32:54 · 247 阅读 · 0 评论 -
stat()函数获取文件状态
在Linux系统中,用stat()函数可以获取一个文件的状态。//头文件#include<sys/stat.h>#include<unistd.h>//函数原型int stat(const char *filename, struct stat *buf);函数执行成功返回0,失败则返回-1。获得的文件状态存放到buf指针指向的struct stat结...原创 2018-09-17 13:19:40 · 1503 阅读 · 0 评论 -
Linux下printf输出颜色
Linux下printf输出颜色 printf(“\033[字背景颜色;字体颜色m字符串\033[0m“); 参考:printf(“\033[41;32m字体背景是红色,字是绿色\033[0m\n”);41是字...转载 2018-09-17 13:33:27 · 2866 阅读 · 0 评论 -
strtok()函数
一、strtok()函数 头文件:#include”string.h> 函数原型:char *strtok(char *str, const char *flag); 函数功能:切割成若干个字符串 函数说明:第一次调用函数str为需要被切割字符串的首地址;在之后调用则传入NULL,否则每次都将会从字符串的开头进行切割。flag参数为分隔符,即需要在什么地方进行切割。函数的返回值为本次...原创 2018-09-13 16:55:31 · 503 阅读 · 0 评论 -
exec函数族
一、exec函数 一般在通过fork()系统调用创建的子进程中调用,这样只是替换了子进程而父进程并不受到影响。可以装入和运行其他程序注意:exec函数只改变程序而不改变进程本身二、exec函数族 exec只是一个函数族,Linux中并没有以exec为函数名的函数,它有6个以exec开头的函数,由下面列举出:头文件:#include”unistd.h”int execl(ch...原创 2018-09-13 17:37:44 · 204 阅读 · 0 评论 -
扫描目录(Linux系统)
扫描目录Linux系统的一个常见问题就是扫描目录,也就是确定一个特定目录下存放的文件。与目录操作有关的函数在dirent.h头文件中声明。它们使用一个名为DIR的结构作为目录操作的基础。被称为目录流的指向这个结构的指针(DIR *)被用来完成各种目录操作,其作用方法与用来操作普通文件的文件流(FILE *)非常类似。目录数据项本身则在dirent结构中返回,该结构也是在dirent.h头文件...原创 2018-09-14 17:27:46 · 1329 阅读 · 0 评论 -
Linux下用户信息
-用户信息-除了著名的init程序以外,所有的Linux程序都是由其他程序或用户启动的。用户通常是在一个响应他们命令的shell(命令解析器)中启动程序。程序能够通过检查环境变量和读取系统时钟来在很大程度上了解它所处的运行环境。程序也能够发现它的使用者的相关信息。当一个用户要登录进Linux系统时,他有一个用户名和密码。一旦验证通过,用户就可以进入一个shell。从内部机制来说,用户还有一个...原创 2018-09-24 10:15:56 · 424 阅读 · 0 评论 -
Linux下主机信息
主机信息 一、网络名 正如程序可以查找用户信息一样,程序也可以获得运行它的计算机的有关细节。uname命令就提供了这些信息。我们还可以通过同名的系统调用在C语言程序中提供同样的信息————从man 2 uname命令查看它的用法。 主机信息在许多情况下都是很有用的。比如要根据程序运行的机器在网络上的名字来定制程序的行为。比如说,这台机器是学生用的还是管理员用的...原创 2018-09-28 18:51:47 · 991 阅读 · 0 评论 -
Linux下Makefile的基础知识
1.Makefile简介Makefile文件中写的是:工程编译的规则以及编译顺序。只需要每次执行make命令,make就会自动在当前目录下搜索Makefile或makefile。然后按照makefile中指定的规则编译整个工程。注意:如果文件不修改,则不需要重新编译!!!例如://makefilemain:main.o gcc main.o -o ...原创 2018-10-26 17:45:20 · 163 阅读 · 0 评论 -
套接字
奋青一枚,刚刚接触网络的知识,所以想在这里整理和搜集一下最基本的知识,望同行的各位大神多多包涵,感谢! 我们知道,在网络中,使用IP地址来标示一个主机。并且,一台机器也可以有多个网络接口。所谓的IP地址就是现在大家都用到的Internet的产物,专业点可以说是TCP/IP协议的产物(只有采用同种协议才能互相通讯),IP = Internet Protocol(网络协议),IP地...原创 2018-11-09 20:04:30 · 223 阅读 · 0 评论 -
Linux下link函数的使用
一、头文件#include<unistd.h>二、函数原型int link(const char *oldname, const char *newname);三、函数介绍 在UNIX系统中,一个文件可能同时拥有多个文件名。也就是说多个不同名字的文件在文件系统中可能是同一个文件。当我们要复制一个文件时,并不是真正复制文件内容,只...原创 2018-11-04 20:16:43 · 7424 阅读 · 0 评论 -
unlink函数与remove函数
我们知道,Linux环境下经常使用rmdir来删除一个空文件夹,使用unlink函数删除文件链接。除此之外,C中的remove函数的功能也是删除文件,那么他们之间有什么区别吗通过man来查看remove函数的定义我们可知:可以看到,remove函数底层会直接调用unlink()函数和rmdir()函数!!!所以可以推断出,remove是间接调用unlink函数和rm...原创 2018-11-06 12:48:50 · 2308 阅读 · 0 评论 -
Linux基本命令
1. ls ls -l ls -a(显示所有的文件,包括隐藏文件和以"."开头的文件)2. vim,vi 编辑普通文件内容 三种模式:命令行模式 插入模式 末行模式 命令行模式-》插入模式:a,i,o,O 插入模式-》命令行模式:ESC 命令行模式-》末行模式:":","/","?"3.命令行模式下的命令:...原创 2018-07-28 17:14:26 · 258 阅读 · 0 评论