2017-03-15

1.幂等:在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同

2.Linux 利用进程打开的文件描述符(/proc)恢复被误删文件
http://www.cnblogs.com/fengyc/p/5947164.html

2017-03-16

1.cp, rm

cp 会导致Text file busy 的错误
geteuid() = 1000
stat(“a.out”, {st_mode=S_IFREG|0775, st_size=13944, …}) = 0
stat(“a.out2”, {st_mode=S_IFREG|0775, st_size=13944, …}) = 0
stat(“a.out”, {st_mode=S_IFREG|0775, st_size=13944, …}) = 0
open(“a.out2”, O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0775, st_size=13944, …}) = 0
open(“a.out”, O_WRONLY|O_TRUNC) = -1 ETXTBSY (Text file busy)
write(2, “cp: “, 4cp: ) = 4
write(2, “cannot create regular file ‘a.ou”…, 34cannot create regular file ‘a.out’) = 34
write(2, “: Text file busy”, 16: Text file busy) = 16
write(2, “\n”, 1)

rm没事

newfstatat(AT_FDCWD, “a.out”, {st_mode=S_IFREG|0775, st_size=13944, …}, AT_SYMLINK_NOFOLLOW) = 0
geteuid() = 1000
newfstatat(AT_FDCWD, “a.out”, {st_mode=S_IFREG|0775, st_size=13944, …}, AT_SYMLINK_NOFOLLOW) = 0
faccessat(AT_FDCWD, “a.out”, W_OK) = 0
unlinkat(AT_FDCWD, “a.out”, 0) = 0
lseek(0, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek)
close(0) = 0
close(1) = 0
close(2) = 0

mv没事
geteuid() = 1000
ioctl(0, TCGETS, {B38400 opost isig icanon echo …}) = 0
stat(“a.out”, {st_mode=S_IFREG|0775, st_size=13944, …}) = 0
lstat(“a.out2”, {st_mode=S_IFREG|0775, st_size=13944, …}) = 0
lstat(“a.out”, {st_mode=S_IFREG|0775, st_size=13944, …}) = 0
geteuid() = 1000
stat(“a.out”, {st_mode=S_IFREG|0775, st_size=13944, …}) = 0
geteuid() = 1000
getegid() = 1000
getuid() = 1000
getgid() = 1000
access(“a.out”, W_OK) = 0
rename(“a.out2”, “a.out”) = 0
lseek(0, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek)
close(0) = 0
close(1) = 0
close(2) = 0
exit_group(0) = ?
+++ exited with 0 +++

Text file busy错误的真正原因

The Text file busy error in specific is about trying to modify an executable while it is executing. The “Text” here refers to the fact that the file being modified is the text segment for a running program. This is a very special case, and not the generic one that your answer seems to suggest. Even so, your answer isn’t entirely incorrect

2017-03-20

1.switch case匹配jump table实现方式

2017-03-23

1.python str和’’的区别

2017-04-01

1.makefile语法

1.1 字符串处理函数:$(subst <from>,<to>,<text>), 将text中from串替换成to串,
e.g.

1
2
src = client.cpp server.cpp
bin = $(subst .cpp, , $(src)) //bin = client server

1.2 文件名操作函数

取后缀函数
$(suffix <names…>)
返回文件名序列<names>的后缀序列,如果文件没有后缀,则返回空字串

取前缀函数
$(basename <names…>)
从文件名序列names中取出各个文件名的前缀部分,最后的’.’分隔

加后缀函数
$(addsuffix <suffix>,<names…>)

加前缀函数
$(addprefix <prefix>, <names…>)
把前缀prefix加到names中的每个单词前面

1
2
bin = client server
src = $(addsuffix .cpp, $(bin))

1.3 makefile中的通配符
make 支持三各通配符: “*”, “?”和“[…]”, 默认直接可以在规则中使用, 通配符同样可以用在变量中。
objects = *.o, 并不是说*.o会展开,不!objects 的值就是“*.o”。Makefile 中的变量其实就是 C/C++中的宏。如果你要让通配符在变量中展开,也就是让 objects 的值是所有[.o]的文件名的集合,那么,你可以这样:
objects := $(wildcard *.o)

1.4 多行命令
如果是多行命令,那么make就为每一行命令使用一个独立的子shell去执行。因此,多行命令之间的执行是相互独立的,相互之间不存在依赖。
而在Makefile中书写在同一行中的多个命令属于一个完整的shell命令行,书写在独立行的一条命令是一个独立的shell命令行

2017-04-11

1.urllib.urlencode & urllib.unquote
urllib.quote & urllib.unquote

2017-04-17

sed -i ‘s/logger.h/log.hpp/g’ .

svn add 撤销
svn revert –recursive example_folder

2017-04-18

1.关于fPIC编译选项
http://blog.sina.com.cn/s/blog_54f82cc201011op1.html

如果不加-fPIC,则加载.so文件的代码段时,代码段引用的数据对象需要重定位, 重定位会修改代码段的内容,这就造成每个使用这个.so文件代码段的进程在内核里都会生成这个.so文件代码段的copy.每个copy都不一样,取决于 这个.so文件代码段和数据段内存映射的位置.

不加fPIC编译出来的so,是要再加载时根据加载到的位置再次重定位的.(因为它里面的代码并不是位置无关代码)
如果被多个应用程序共同使用,那么它们必须每个程序维护一份so的代码副本了.(因为so被每个程序加载的位置都不同,显然这些重定位后的代码也不同,当然不能共享)
我们总是用fPIC来生成so,也从来不用fPIC来生成a.
fPIC与动态链接可以说基本没有关系,libc.so一样可以不用fPIC编译,只是这样的so必须要在加载到用户程序的地址空间时重定向所有表目.

2.DNS劫持和DNS污染
国外VPS:bandwagong host 搬瓦工主机
shadowsocks 影梭

VPS虚拟技术百科:OpenVZ与XEN架构技术对比
http://www.laozuo.org/532.html

云服务器和VPS主机的区别
https://www.aliyun.com/zixun/content/3_12_196634.html

3.命令模式
将一个请求封装为一个对象, 从而可用不同的请求对客户进行参数化。

2017-04-19

1.man pthread_mutex 相关的函数没结果,
解决办法:安装manpages:sudo apt-get install manpages-posix-dev