重构代码的书籍:<<refactor>> martin forler (建议工作1到2年读) <<refactor to patterns>> kent bank (建议工作4年读)
泛型书籍:<<C++ template>> <<现代C++程序设计>>
设计模式书籍:<<大话设计模式>> <<design C++ modern>> <<设计模式>>
设计模式: 23种
cp的 --preserve选项:cp --preserve=mode src des :拷贝时只保留文件的权限,其他被舍弃
cp --preserve=owenership src des:拷贝时只保留拥有者群组权限 其他选项被舍弃
cp --preserve=timestamps src des :只保留文件的时间戳
cp文件时文件的属性为什么会改变: 因为有默认的文件掩码 :shell中 执行umask会看到: 0022,为文件的默认掩码
set -x :打开shell的debug 模式.
正则表达式常用的元字符:
. :可以匹配任意单个字符,英文字符,数字,以及他本身.
* :可以匹配到重复前面的字符0到无穷多次的字符串
[ ]:可以匹配[]里面多个字符中的一个或者只有一个就匹配这个字符,虽然[]里面可以有多个字符但只匹配一个字符
$:可以匹配结尾
^:可以匹配开头
+:重复前面的字符1到无穷多次(*的补充)
?:此处有0个或者1个字符
{ }:
( ):分组符 ,如下面的例子中有两个字符,前面的括号里面是第一部分,后面的括号里面是第二个部分
举个例子:
port = "8888"
要取得port和8888字段则可以用下面的句子:[ \t]*([a-zA-Z0-9]+)[ \t]*=[.\t]*"([a-zA-Z0-9 /]*)"[ \t]*
port = "8888"
1) 前面匹配一个或者多个空格或者一个或者多个tab
2)然后是字符串(可以含有大小写字母和数字,+用来表示该字符后面还会有0个或者多个)
3)然后又是0个到多个的空格或者tab匹配
4)=
5)然后又是0个到多个的空格或者tab匹配
6)"
7)然后是字符串(可以含有大小写字母和数字,*用来表示该字符后面还会有0个或者多个)
8)"
9)然后又是0个到多个的空格或者tab匹配
c语言里面的正则表达是函数:man regexec man 7 regex ?
wildcard 和 regular experrsion 的区别?
配置文件怎么写(下面说说lasync工具的配置文件里面要用到的配置表象)
1)网卡(lasync广播消息是要用到的是那个网卡)
2)端口号(lasync layclient在两台电脑上要通信是用的port)
3)sharedir="/data" 服务器上要共享的目录
4)plugindir="plugins" 插件目录
5)文件要同步到客户的那个目录下
单件模式singleton如何实现线程安全?
如何获得电脑上的网卡信息(即获取硬件信息)
1)iif_nameindex if_freenameindex
2)man ioctl / man ioctl_list : SIOCGIFBRADDR struct ifreq
如何在网卡地址上发送消息:
1)首先获得广播地址
2)setsockopt设置可以通过广播地址发送消息 SO_BROADCAST选项
广播的消息不能过路由
sockaddr_in 和 sockaddr 为什么可以相互强转:因为他们的长度是相同的(14bytes):这个可以在<sys/socket.h> <netinet/in.h>文件里面查看具体的结构体
FILE *popen(const char *command, const char *type);
The popen() function opens a process by creating a pipe, forking, and invoking the shell. Since a pipe is by definition unidirec‐
tional, the type argument may specify only reading or writing, not both; the resulting stream is correspondingly read-only or write-
only.
popen函数的详细解释和使用举例可以参考下面的文章:
http://www.cnblogs.com/hnrainll/archive/2011/07/23/2114857.html
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main( void )
{
FILE *stream;
FILE *wstream;
char buf[1024];
memset( buf, '\0', sizeof(buf) );//初始化buf,以免后面写如乱码到文件中
stream = popen( "ls -l ../", "r" ); //将“ls -l”命令的输出 通过管道读取(“r”参数)到FILE* stream
wstream = fopen( "test_popen.txt", "w+"); //新建一个可写的文件
fread( buf, sizeof(char), sizeof(buf), stream); //将刚刚FILE* stream的数据流读取到buf中
fwrite( buf, 1, sizeof(buf), wstream );//将buf中的数据写到FILE *wstream对应的流中,也是写到文件中
pclose( stream );
fclose( wstream );
return 0;
}
柔性数组/魔性数组:(可变长数组)
struct flexible_array
{
int data;
char tag[0];
};
tag指针指向动态开辟出来的数组,
kill -l: 列出所有的信号
netstat -anp | grep port :列出所有的使用的端口号
地址:
A类:0-127
B类:128-192
C类:193-239
D类:240-
关闭套接字:
1)shutdown : int shutdown(int sockfd, int how); man 2 shutdown
2)close(sockfd)
网络上发送消息的方式: ?
1)广播:
2)多播:
3)单播: