-
Notifications
You must be signed in to change notification settings - Fork 0
/
search.xml
41 lines (41 loc) · 7.28 KB
/
search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title><![CDATA[函数传参&变量生存周期]]></title>
<url>%2F2018%2F09%2F04%2F%E5%87%BD%E6%95%B0%E4%BC%A0%E5%8F%82-%E5%8F%98%E9%87%8F%E7%94%9F%E5%AD%98%E5%91%A8%E6%9C%9F%2F</url>
<content type="text"><![CDATA[Backgroud 最近项目中遇到两个BUG,解决后发现还是由于自身对于基础概念的不扎实,因此整理一下 Bug1 由string 拷贝到 char* string 为函数内临时变量 由于变量生存周期以及拷贝方式造成了函数返回后当时正常,但是后续操作中该char* 变为了乱码 12345678910int func(char *str1){ string tmp="abc"; str1=(char*)tmp.data();//错误写法 //strcpy(str1,tmp.c_str()); 正确写法 //c_str() const类型 cout<<str1<<enl;//正确 return 0;}//函数调用方 str1 返回正确,但是后续执行中,str1值变为了乱码 Bug2 值参数传递某一个类对象,由于拷贝中操作的变量为新增变量,拷贝构造函数未更新,因此在值传递过程中,该变量未能成功传递,开始由于未想到拷贝构造函数的问题,所以debug半天找不到问题 12345678910111213141516171819202122232425262728293031323334353637#include <iostream>using namespace std;class Example{ public: Example() { } ~Example() { } Example(const Example &other) { a=other.a; b=other.b; } int a; int b; int c;//New};int func(Example a){ cout<<a.c<<endl; return 0;}int main(){ Example a; a.a=1; a.b=1; a.c=1; func(a); return 0;}//新增变量C后未修改拷贝函数,由于拷贝构造函数未拷贝变量c 因此该结果为 0 因此需要对一些基础补足,主要是函数参数传递,变量生存周期,C++拷贝构造函数。 问题 函数参数传递方式,区别,应用场景,效率 C++ 构造拷贝函数,类型,区别,注意点 变量生存周期以及析构函数调用时间 基础学习函数传参传递方式 C++ 函数传参方式共有三种:值传递、指针传递和引用传递 值传递指针传递引用传递C++拷贝构造函数变量生存周期Reference]]></content>
</entry>
<entry>
<title><![CDATA[批量创建screen并执行命令]]></title>
<url>%2F2017%2F10%2F21%2F%E6%89%B9%E9%87%8F%E5%88%9B%E5%BB%BAscreen%E5%B9%B6%E6%89%A7%E8%A1%8C%E5%91%BD%E4%BB%A4%2F</url>
<content type="text"><![CDATA[问题需要批量提交同一执行任务,开多个Screen窗口,如果我们直接在脚本里写 screen -S my_screen, 会导致脚本无法继续执行。 解决screen -dmS:直接建立screen然后通过发送命令到screen 进行执行脚本如下 123456789101112131415161718#!/bin/bashfor index in $(seq 0 19)do screen_name=$"md5_${index}" #创建screen screen -dmS ${screen_name} echo"Screen ${screen_name} is set up!" cmd=$" ./a.test screen -x -S ${screen_name} -p 0 -X stuff "${cmd}" screen -x -S ${screen_name} -p 0 -X stuff '\n' echo "Command is RUNING!"done 运行直接通过shell脚本,批量打开screen 然后发送命令到screen 窗口进行执行。]]></content>
<categories>
<category>linux</category>
</categories>
<tags>
<tag>-linux -shell</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Block Cipher Mode of Operation]]></title>
<url>%2F2017%2F10%2F09%2FBlock-Cipher-Mode-of-Operation%2F</url>
<content type="text"><![CDATA[Background In cryptography, a block cipher mode of operation is an algorithm that uses a block cipher to provide an information service such as confidentiality or authenticity. A block cipher by itself is only suitable for the secure cryptographic transformation (encryption or decryption) of one fixed-length group of bits called a block.A mode of operation describes how repeatedly to apply a cipher’s single-block operation securely to transform amounts of data larger than a block.Wikipedia ModesCBCECBCFBOFBCTRSummary Mode Formulas Ciphertext ECB Yi=F(PlainTexti,Key) Yi CBC Yi=PlainTexti XOR Ciphertexti-1 F(Y,key); Ciphertext0=IV PCBC Yi=PlainTexti XOR (Ciphertexti-1 XOR PlainTexti-1) F(Y,key);Ciphertext0=IV CFB Yi=Ciphertexti-1 Plaintext XOR F(Y,key);Ciphertext0=IV OFB Yi=F(Key,Ii-1);Y0=IV Plaintext XOR Yi CTR Yi=F(Key,IV + g(i) );IV=token(); Plaintext XOR Yi Note: g(i) is any deterministic function, often the identity function. Comparison CBC ECB CFB OFB Encryption parallelizable No Yes No No Decryption parallelizable Yes Yes Yes No Random read access Yes Yes Yes No Reference [Wikipedia]Block cipher mode of operation]]></content>
<categories>
<category>Cryptography</category>
</categories>
<tags>
<tag>cryptography</tag>
</tags>
</entry>
<entry>
<title><![CDATA[vim教程-插件Tagbar+ctags实现函数跳转]]></title>
<url>%2F2017%2F10%2F09%2Fvim%E6%95%99%E7%A8%8B-%E6%8F%92%E4%BB%B6Tagbar-ctags%E5%AE%9E%E7%8E%B0%E5%87%BD%E6%95%B0%E8%B7%B3%E8%BD%AC%2F</url>
<content type="text"><![CDATA[问题 常用代码阅读软件和IDE都具备自动跳转函数定义,结构体定义功能,但是在vim下,无法直接完成,需要配合其他工具以及插件来实现,本文主要介绍Ctags和tagbar,协助linux环境下vim编辑器中,代码阅读以及开发。 1. 实现函数,变量大纲显示2. 实现结构体,函数定义直接跳转安装ctags 由于tagbar需要ctags支持,所以先安装ctags ctags介绍: Ctags是一个用于从程序源代码树产生索引文件(或tag文件),从而便于文本编辑器来实现快速定位的实用工具。在产生的tag文件中,每一个tag的入口指向了一个编程语言的对象。这个对象可以是变量定义、函数、类或其他的物件。(引自Wikipedia) ctags安装 直接安装 ubuntu安装 1sudo apt-get install ctags Mac安装 1sudo brew install ctags 编译安装 下载 1wget https://fossies.org/linux/misc/ctags-5.8.tar.gz 解压 1tar xzvf ctags-5.8.tar.gz 编译安装 1234cd ctags-5.8 #解压后路径./configuresudo makesudo make install 安装tagbar插件 Tagbar is a Vim plugin that provides an easy way to browse the tags of the current file and get an overview of its structure. It does this by creating a sidebar that displays the ctags-generated tags of the current file, ordered by their scope. This means that for example methods in C++ are displayed under the class they are defined in. From github 使用vundle安装tagbar插件 在vundle配置文件中添加 1Plugin 'majutsushi/tagbar' 打开vim安装 1:BundleInstall ctags使用以及vimrc配置tarbar功能 显示变量,函数列表,并可以直接跳转 截图如下 ctags使用 生成tags文件 12ctags -R .#-R表示recursive,递归,为当前目录及其子目录中的c文件生成标签文件。最后一个.表示在当前目录。运行完当前目录会多一个文件tags 如下 通过tags实现函数,宏定义,结构体等定义跳转 用vim打开一个已经建过标签的c文件 ctrl+] 找到光标所在位置的标签定义的地方 ctrl+t 回到跳转之前的标签处 vim配置 ctags设置 1set tags=tags; #设置tags路径 tarbar设置 1nmap<F8>:TagbarToggle<CR> "将F8映射为打开Tarbar ]]></content>
<categories>
<category>Vim</category>
</categories>
<tags>
<tag>vim</tag>
</tags>
</entry>
</search>