C语言结构体内存对齐(#prama / __attribute__) 本文测试机器为X86_64架构,系统为ubuntu-16.04 LTS,gcc version 7.4.0一、默认的内存对齐首先,通过一个例子来介绍什么是内存对齐。#include <stdio.h>int main( ){ struct data { float a; char b; int c; }...
E667: Fsync failed 通过vim编辑文件/proc/sys/kernel/core_pattern,保存时报错E667: Fsync failed通过以下方式:echo “core-%e-%p-%t” | sudo dd of=/proc/sys/kernel/core_pattern参考:https://askubuntu.com/questions/167819/im-getting-fsync-failed-...
slurm集群安装 环境:三台物理机,os均为ubuntu-18-04 LTS,hostname分别为tian-609-06、tian-609-07、tian-609-08。其中tian-609-06作为控制节点和计算节点,其他节点作为计算节点。1、安装munge和slurm(所有机器)sudo apt install munge slurm-wlm2、配置/etc/slurm-llnl/slurm.conf...
epoll惊群测试 一、udp惊群测试1、模型2、代码#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <sys/epoll.h>#include <sys/types.h>#include <sys/wait.h>#include <...
nginx进程间传递文件描述符 由于笔者才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正。起初知道进程间可以传递文件描述符的时候就很好奇是怎么做到的,最近查阅了一些文章,此处做个笔记,方便日后回顾。文中结合nginx代码,具体分析一下如何在不同进程之间传递文件描述符。一、浅谈sendmsg和recvmsg由于nginx中通过sendmsg和recvmsg的辅助信息来传递文件描述符,此处先简要介绍这两个接口。1、函数原型...
nginx源码分析—reuseport的使用 本文主要介绍nginx中reuseport的使用,文中代码较多,阅读本文需要读者对nginx的事件模块以及listen配置过程有了解。由于nginx比较复杂,且作者对nginx的理解有限,文章难免存在疏忽之处,敬请指出!一、reuseport的配置及解析reuseport通过listen指令来配置,配置如下:listen 443 reuseport;listen指令由ngx_http_...
Nginx内存池管理 由于本人才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正,本人将感激不尽。Nginx使用内存池对内存进行管理,提高内存管理效率。对于小块内存,直接从已分配好的内存池中获取(返回指针);对于大块内存,直接调用malloc申请内存,然后将大块内存挂在内存池上进行管理(链表形式)。对于内存的申请,Nginx还做了一些优化,比如在某一块内存池上申请小内存失败次数超过四次时,直接跳过该内存池,后续将不在...
Nginx源码分析—套接字继承 本文主要简要介绍Nginx中关于套接字的继承,这里提到的继承不是指worker进程继承master进程的监听套接字,而是指启动master进程时,master继承父进程的监听套接字。继承的方式1、master进程在main函数中调用ngx_add_inherited_sockets函数判断是否需要继承父进程的监听套接字。若没有需继承的套接字则返回,否则继续。2、ngx_add_inherit...
Diffie-Hellman算法 一、Deffie-Hellman 算法简介Deffie-Hellman(简称 DH) 密钥交换是最早的密钥交换算法之一,它使得通信的双方能在非安全的信道中安全的交换密钥,用于加密后续的通信消息。 Whitfield Diffie 和 Martin Hellman 于 1976 提出该算法,之后被应用于安全领域,比如 Https 协议的 TSL(Transport Layer Security)以...
linux backlog详解 本文转自:http://veithen.io/2014/01/01/how-tcp-backlog-works-in-linux.htmlWhen an application puts a socket into LISTEN state using the listen syscall, it needs to specify a backlog for that socket. The b...
C语言变长参数详解 由于本人才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正。一、基础部分1.1 什么是可变长参数可变长参数:顾名思义,就是函数的参数长度(数量)是可变的。比如 C 语言的 printf 系列的(格式化输入输出等)函数,都是参数可变的。下面是 printf 函数的声明:int printf ( const char * format, … );可变参数函数声明方式都是类似的。1.2 如何实...
浮点数比较大小 由于本人才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正,本人将感激不尽。 最近阅读《剑指offer》,其中有提到浮点数不能直接用 ‘==’比较,之前就有听说这个问题,但一直没有深入理解。今天,查阅了一些资料,对其进行解释,方便日后查阅。一、前言首先来看一个例子:#include <iostream>#include <cmath>using namespac...
TSO与GSO简单区分 概念TSO(TCP Segmentation Offload): 是一种利用网卡来对大数据包进行自动分段,降低CPU负载的技术。 其主要是延迟分段。GSO(Generic Segmentation Offload): GSO是协议栈是否推迟分段,在发送到网卡之前判断网卡是否支持TSO,如果网卡支持TSO则让网卡分段,否则协议栈分完段再交给驱动。 如果TSO开启,GSO会自动开启。以下是TSO...
sendmmsg测试 由于本人才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正,本人将感激不尽。一、sendmsg和sendmmsg简介 其中sendmsg就是一个发包的系统调用,一次只能发送一个包,具体的可参考 https://linux.die.net/man/2/sendmsg sendmmsg是对sendmsg的优化,调用一次sendmmsg可以发送多个segments,具体可参考 http://ma...
TCP-SCAK详解 由于本人才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正,本人将感激不尽。最近做QUIC相关的工作,QUIC中采用的是SACK的确认方式,比较好奇,TCP中SACK是如何工作的,于是网上找了一些资料,发现这篇文章讲的比较详细,供自己和读者学习。参考 https://www.cnblogs.com/lshs/p/6038555.html总结在介绍之前,我先简单总结一下这篇文章给我带来的收获。...
虚继承简单介绍 由于本人才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正,本人将感激不尽。此处只是简单介绍虚继承的概念,具体细节参考其他资料。本文转自https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.cbclx01/cplr134.htmhttps://www.ibm.com/support/knowl...
c++虚函数表与虚析构函数 由于本人才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正,本人将感激不尽。很早就听说过虚函数表的概念,但是一直没去深究,今天借这篇文章介绍一下虚函数表,以及析构函数需要定义为虚函数的根本原因。本文转自 https://www.cnblogs.com/shijingjing07/p/5559989.htmlC++虚函数表与虚析构函数1.静态联编和动态联编联编:将源代码中的函数调用解释为要执...
继承、隐藏、覆盖和重载的区别 由于本人才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正,本人将感激不尽。1.父子类继承关系: 子类复制父类全部成员首先,理解父子类的继承关系是怎样发生的。在此基础上就很容易理解它们之间的关系和区别。每一个类有它自己的成员变量和成员函数,是一个独立的空间整体。当子类继承父类时,会将父类的全部成员全部复制一份,作为子类的成员,但是,同时也会标记这些成员是从父类中继承的,与子类本身的成员,还是有...
具有子类的类,析构函数尽量定义为虚函数 由于本人才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正,本人将感激不尽。一、使用new创建对象需要显示的调用Delete来删除对象,否则将造成内存泄漏。代码如下所示#include &amp;amp;lt;iostream&amp;amp;gt;using namespace std;class Test{public: Test(int v = 0) : data(v){ cout &amp;amp;lt;&
NULL、nullptr和0的区别 在进行C/C++编码时,我们经常会用到空指针,这里简单介绍一下NULL、nullptr以及0的区别。一、NULL和0NULL其实就是整数0,头文件中通过宏定义将NULL定义为0。因此,当调用如下代码时,编译将会产生歧义void fun(int v){ printf(&amp;quot;int&amp;quot;); return ;}void fun(char *p){ printf(&amp;quot;point\
按key连接两个文件 1、join 通过join命令直接对文件进行连接,参数此处不做详细介绍,可参阅网上的资料。 但是有一点需要注意,利用join命令进行操作时,需要保证每个文件中包含key的那一列有序。2、通过awk命令 此处不需要保证文件中包含key的那一列有序。 参阅http://lxw1234.com/archives/2016/03/621.htm...
C++赋值运算符重载函数(operator=) 由于对c++的重载符号一直不是很理解,此处参阅一些资料给出比较详细的解释,方便读者以及自己查阅。例1#include&amp;amp;lt;iostream&amp;amp;gt;#include&amp;amp;lt;cstring&amp;amp;gt;using namespace std;class MyStr{private: char *name = NULL; int id;publi
多线程的进程调用exec时,将终止整个进程 由于本人才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正,本人将感激不尽。 最近比较好奇,若是一个多线程的进程执行exec()系统调用时,进程将作何反应,详情请如下代码:#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h>void *...
父子进程,父子线程之间的继承关系 - 未完待续 由于本人才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正,本人将感激不尽。由于每隔一段时间都会对父子进程,父子线程之间的继承关系感到疑惑,故今天开始记录相应问题,方便日和查阅!首先需要明确父进程退出时,子进程将变为孤儿进程,直到被init进程收养。但是父线程退出时,子线程也将立即退出。一、文件描述符 子进程可以继承父进程打开的文件描述符。 子线程也可以继承父线程打开的文件描...
关于线程号的一些总结 由于本人才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正,本人将感激不尽。 强调内容一、线程号的获取首先,我们要知道一个进程可能包含多个线程,每个线程都有自己的id。获取线程id存在下面两种方法:1、pthread_t pthread_self(void): 其中返回值类型为pthread_t,类型的定义如下所示:typedef unsigned long int pthrea...
互斥锁与自旋锁的对比 最近阅读《Operating System Concepts》时,对互斥锁和自旋锁的理解不够深入。网上搜到一篇质量不错的博客:https://blog.csdn.net/freeelinux/article/details/53695111
ubuntu下调用fork,子进程只copy父进程的几个线程呢? 由于本人才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正,本人将感激不尽。 最近在看《Operating system concepts》的4.6.1小节时候发现,fork将产生一个新的子进程,那么父进程的所有线程是否copy至子进程呢? 为此,我写了如下代码来验证,此实验在ubuntu16.04-LTS下进行:#include &amp;lt;stdio.h&amp;gt;#inc...
图计算系统PowerGraph安装部署 博客:https://www.jianshu.com/p/af02bb459ff4 github:https://www.jianshu.com/p/af02bb459ff4由于作者不再对github上的GraphPower项目进行维护,故安装部署将遇到很多问题。下面主要列出其中本人遇到的问题: 1、make编译,下载压缩包时,hash编码不匹配:直接网上下载对应的压缩包,此处仅提供可能需...
linux下rto的设置及rto测试 rto修改命令sudo ip route change 172.16.100.0/24 dev eth0 rto_min 5 (ms) rto测试 1、编写socket网络程序测试,客户端一直向服务端发送数据(测试客户端的rto),在客户端与服务器端通信过程中,将服务端向客户端通信的路由项删掉。 2、客户端通过wireshark抓包,即可分析rto的变化规律(指数退避)。...
二维数组作为实参,调用函数,段错误 我相信大家在进行C/C++编程时,都遇到过这样的问题,即需要将二维数组作为实参来调用函数。如下代码所示:#include &amp;amp;amp;lt;stdio.h&amp;amp;amp;gt;void set_char(char *c[]){ c[0][0] = 'b';}int main(){ char c[10][10]; c[0][0] = 'a'; set_char(c); ...
孤儿进程与僵死进程 最近看到一篇介绍孤儿进程与僵死进程的文章https://www.cnblogs.com/Anker/p/3271773.html,不过要注意其中提到孤儿进程的父进程将变成init进程。注意:在Ubuntu文本模式下孤儿进程的父进程为init进程,但是在图形界面下孤儿进程的父进程不再是init进程(此处有介绍https://www.cnblogs.com/chilumanxi/p/5136102.ht
Map任务个数的设置 一、FileInputFormat类的输入分片1.1 map任务个数等于split个数在hadoop当中,map任务的个数等于split(分片)的个数,一个split对应一个map。 当文件小于split的大小时,一个文件对应一个split; 当文件大小超过split时,该文件将被切分成多个split,文件大小除以split得到split个数。 1.2 split大小的设置max(minimu
maven将所有的依赖打成一个包 跑mapreduce实验的时候发现,总是报错CLASSNOTFOUND,即使在hadoop-env.sh添加HADOOP_CLASS时,还是会同样的错误。于是想到将依赖的包和自己的class文件打成一个包,避免找不到类。 在pom.xml中添加<build> <plugins> <plugin> <artifactId>mav
Hadoop跑HBase实例需注意的问题 吐血啊刚入门大数据,最近在学习hbase相关的知识,用java写了一个创建table的例子。 然后傻逼了,写完了直接就在在idea里面跑了,结果报错:找了整整一晚上,后来找师兄请教了一下,师兄建议直接到集群上跑,或者跑伪分布。 然后就跑了伪分布,发现不报idea里面的错了,而是报:class not found。上网一查,是因为没有在hadoop-env.sh里面将hbase下的lib目录添加到
ssh原理与运用 如果读者对“公钥加密”的概念不熟悉,建议先阅读《数字签名是什么?》一、什么是SSH?简单来说,ssh是一种通信协议,用于计算机之间通信的加密。 如果用户从本地计算机,使用ssh登录到远程主机,即使信息被中途截获也无关紧要。二、基本用法SSH主要用于远程登录。假定你要以用户名user,登录远程主机host,只要一条简单命令就可以了。 $ ssh user@host如果本地用户名与远程用户名一致,登
MR全局变量的设置 mapreduce全局变量设置这两天正好在做倒排索引,需要利用总文档数来完成一项job,但是发现通过在最外层类设置static变量进行全局变量的共享时,发现并没用,在main函数给static变量赋值后,mapper类中取出的是0或者null。后面发现可能是由于每个mapper和reducer并不是存在同一个线程,所以导致无法共享static变量。后来在网上查了一下,大概有这么三种方法,共享全局变量
没有reducer 实验时发现,如果不设置mapper类的话,会默认设置一个reducer,需要通过job.setNumReduceTask(0) 将reducer设置为0。若没有reducer,则直接输出mapper的原始中间结果,不进行conbiner(即使设置了combiner),sort等一些列操作。若设置了reducer,即使不设置combiner,系统也将设置一个默认的combiner,如下图所示:未设置
Call From ubuntu/127.0.1.1 to localhost:8020 failed on connection exception 将core-site.xml的fs.defaultFS 改为 hdfs://localhost:8020
instanceof 引用原文地址:http://blog.csdn.net/cntanghai/article/details/6096976package myPackage; /** * instanceof运算符用法 * 运算符是双目运算符,左面的操作元是一个对象,右面是一个类.当 * 左面的对象是右面的类创建的对象时,该运算符运算的结果是true,否则是false * * 说明:(
/etc/profile 与 /etc/environment /etc/profile 是一个脚本文件,作用于所有用户。当在图形界面启动shell或者切换到文本模式登录时将执行该脚本,但使用命令su 切换用户是并不会执行该脚本(需要使用source重新载入)。/etc/environment 是一个系统配置文件,也是对所有用户起作用。
Github工具(未完待续) git工具使用手册(未完待续)一、添加远程仓库在本地添加远程仓库目前本人发现有两种方法,一种是通过命令: git remote add origin git@github.com:username/project.git另一种是通过命令: git remote add origin https://github.com/username/project.git 第
简单的stream socket例子 服务器端:#include#include#include#includeint main(){ int sock_server, sock_client; struct sockaddr_in server_addr, client_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(666
双方同时开启TCP连接 由于最近阅读Stevens的TCP/IP详解卷一,看到了介绍关于TCP同时开启的情况,下面介绍其具体过程。首先,A向B发送SYN,同时B向A发送SYN报文。A和B收到报文后,向对方发送SYN+ACK,再收到对方发来的SYN+ACK后,将恢复一个ACK,此时连接建立。实验截图如下:查看其中Seq和Ack可以发现,每一端发送的SYN与SYN+ACK报文的Seq一样。
tcp/udp校验和以及伪首部介绍 TCP的检验和 原文地址:http://www.cnblogs.com/zxiner/p/7203192.html检验和目的 目的是为了发现TCP首部和数据在发送端到接收端之间发生的任何改动。如果接收方检测到检验和有差错,则TCP段会被直接丢弃。 TCP在计算检验和时,要加上一个12字节的伪首部。伪首部顾名思义就是假的首部,既不往上传也不往下传,只是用于...
vim配置文件 set fenc=utf-8 set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936 " 不要使用vi的键盘模式,而是vim自己的 set nocompatible " history文件中需要记录的行数 set history=100 " 在处理未保存或只读文件的时候,弹出确认 set confirm
三层交换机工作原理 此处还有一篇介绍三层交换机的文章:http://blog.csdn.net/lycb_gz/article/details/8780851 路由器的三层转发主要依靠CPU进行,而三层交换机的三层转发依靠ASIC芯片完成,这就决定了两者在转发性能上的巨大差别。当然,三层交换机并不能完全替代路由器,路由器所具备的丰富的接口类型、良好的流量服务等级控制、强大的路有能力等仍然是三层交换
extern关键字 extern只是声明函数或变量,定义在别处。C语言:对于变量和函数的声明来说,加不加extern没区别!对于函数来说,甚至不用提前声明。变量需提前声明。若在多个文件中同时定义同一个变量,则编译通过,但链接报错“存在重复定义额变量”!(可采用extern或static)C++:
创建新分区,mkfs格式化时提示分区已挂载 最近练习linux分区的创建和挂载时发现新创建的分区在格式化时提示该分区已挂载(挂载swap file system),但是umount该分区时又提示该分区未挂载。使用 wipefs -af /dev/sda[0-9] 命令将分区清空后重启computer,即可格式化并挂载!
Linux下NS3链接报错,undifine prefene to Ipv4Header::GetTos DCTCP项目中由于需要在red-queue.cc中对ipv4-header.cc操作。其中red-queue.cc位于network模块,ipv4-header位于Internet模块,且internet模块依赖于network模块。在编译的时候,项目顺利通过,但是链接时出现错误undifine prefene to Ipv4Header::GetTos()。跟大神同学讨论了后觉得可能是
启动Ubuntu时,无法启动,进入maintance模式 由于学习linux的分区,把挂载在/swap上的分区给删了,然后重新分配一个分区挂载到/swap后,重新启动系统发现无法启动,需要输入root密码进入maintace模式。解决方案:1.使用命令 fsidk -f修复分区,但是修复之前,需要将挂载的分区卸载。2.输入reboot重新启动。3.若是修复完成时发现:Unable to resolve UUID=' '。 1》记
Longest Substring Without Repeating Characters Given a string, find the length of the longest substring without repeating characters.Examples:Given "abcabcbb", the answer is "abc", which the length is 3.Given "bbbbb", the answer is "
Ubuntu下配置Eclipse支持NS3 网上有很多关于如何在Ubuntu下下载配置Eclipse来支持NS3的文章,本人参考了http://www.jianshu.com/p/073548aabb0c。1、首先下载eclipse和eclipse-cdt(eclipse下支持c++的插件)。 sudo apt-get install eclipse sudo apt-get install eclipse-ct
NS3中PyViz的安装 1、借鉴官网的安装(https://www.nsnam.org/wiki/index.php/PyViz),在线安装一些该模块依赖的Python软件包,命令如下所示:sudo apt-get install python-dev python-pygraphviz python-kiwi python-pygoocanvas python-gnome2 python-gnomedesk
NS3的安装 sudo apt-get install gcc g++ python> sudo apt-get install gcc g++ python python-dev> sudo apt-get install mercurial> sudo apt-get install bzr> sudo apt-get install gdb valgrindapt-
引用与指针的区别 C++中引用类型与指针类型的区别1.指针是一个对象,引用则不是一个对象,引用只是一个对象的别名。2.指针可以初始化,也可以不初始化,赋值之后可以重新赋值;引用再定义的时候必须初始化,一旦初始化绑定某一对象之后不能重新绑定到其他对象。
raw socket模拟TCP三次握手 今天花了一天时间,研究了一下如何利用原始套接字模拟TCP的三次握手。因为前几天一直在关于linux下c语言的socket编程,也看的差不多了,今天就敲了一天的代码。但是遇到了一个问题,当我利用raw socket发送SYN报文请求连接后,也能收到对方发来的SYN+ACK报文,当我发送ACK之前,本机系统会自动发送一个RST报文。然后,我在网上搜了一下,也有人遇到我这样的情况,有人给出如下解决方法:
raw socket编程实例 由于最经做模拟TCP三次握手的实验,需要用到raw socket编程。运行第一段代码,发送ip数据报,第二段代码接收ip数据报。需要运行第二段代码,否则将无法接收数据报。#include#include#include#include#include#includestruct iphead{ //该结构体模拟IP首部(代码中,控制套接字不添加IP数据包首部,需要自己添加
Raw Socket和Socket编程 转自:http://blog.csdn.net/kzm2008/article/details/53728341.原始套接字(raw socket) 1.1 原始套接字工作原理与规则 原始套接字是一个特殊的套接字类型,它的创建方式跟TCP/UDP创建方法几乎是一摸一样,例如,通过CODE:[Copy to clipboard]
raw socket的简单介绍 一.raw socket介绍: 1、raw socket中文叫原始套接字,它和其他的套接字的不同之处在于它工作在网络层或数据链路层,而其他类型的套接字工作在传输层,只能进行传输层数据操作。二.raw socket有多种创建方法 1. sock_fd = socket(AF_INET, SOCK_RAW, TYPE) AF_INET:抓网
raw socket的使用 一.raw socket介绍: 1、raw socket中文叫原始套接字,它和其他的套接字的不同之处在于它工作在网络层或数据链路层,而其他类型的套接字工作在传输层,只能进行传输层数据操作。二.raw socket有多种创建方法 1. sock_fd = socket(AF_INET, SOCK_RAW, TYPE) AF_INET:抓
应用层协议详解(未完待续) SMTP(Simple Mail Transfer Protocol) :使用TCP可靠数据传输服务,从发送方的邮件服务器向接收方的邮件服务器发送邮件。SMTP分为两个部分:运行在发送方邮件服务器的客户端和运行在接受方邮件服务器的服务器端。
Ftp与Telnet的区别 FTP与TELNET的区别: 它们都是INTERNET提供登录服务器的服务 TELNET 连接后,用户主机实际成为远程TELNET服务器的一个虚拟终端(或称是哑终端),一切服务完全在远程服务器上执行,但用户决不能从远程服务器中下载或上传文件,或拷贝文件到用户主机中来。 FTP则不同,它是采用客户机/服务器模式,用户能够操作FTP服务器中的目录,上传或下载文件,但用户不能请求服务器执行某