radix tree

Posted by 夏泽民

基数树



maven 安装

Posted by 夏泽民

https://maven.apache.org/download.cgi?Preferred=http%3A%2F%2Fmirror.bit.edu.cn%2Fapache%2F 下载 Maven, 并解压到某个目录。例如/Users/robbie/apache-maven-3.3.3



figaro mac 安装

Posted by 夏泽民

$brew install sbt $which sbt /usr/local/bin/sbt $ git clone https://github.com/xiazemin/figaro.git $sbt package [warn] No sbt.version set in project/build.properties, base directory: /Users/didi/figaro/figaro [info] Set current project to figaro (in build file:/Users/didi/figaro/figaro/) [info] Updating {file:/Users/didi/figaro/figaro/}figaro… [info] Done updating. [info] Packaging /Users/didi/figaro/figaro/target/scala-2.12/figaro_2.12-0.1-SNAPSHOT.jar … [info] Done packaging. [success] Total time: 3 s, completed 2017-12-13 13:13:19 操作后会得到一个jar文件 target/scala-2.12/figaro_2.12-0.1-SNAPSHOT.jar 建立一个scala工程将生成的jar包引入 问题: 包无法引入 参考: https://www.cra.com/work/case-studies/figaro 下载编译包 安装到:/Applications/figaro-5.0.0.0-2.11 项目中引入包即可



大端小端

Posted by 夏泽民

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中 判断方法 (一)指针法

1
2
3
4
5
6
7
8
9
10
11
 #include <stdio.h>
int main()
{
    int val = 1;
    char *ret = (char *)&val;
    if (*ret == 1)
        printf("小端存储");
    else
        printf("大端存储");
    return 0;
}

(二)联合法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 #include <stdio.h>
union UN
{
    int a;
    char c;
};
int main()
{
    union UN un;
    un.a = 1;
    if (un.c == 1)
        printf("小端存储");
    else
        printf("大端存储");
    return 0;
}

php 判断方法

1
2
3
4
5
6
7
8
9
10
11
<?php
define('BIG_ENDIAN', pack('L', 1) === pack('N', 1));
if (BIG_ENDIAN)
{
    echo "大端序";
}
else
{
    echo "小端序";
}
echo "\n";

PHP pack() 函数 函数把数据装入一个二进制字符串。 pack(format,args+) format 参数 L - unsigned long (always 32 bit, machine byte order) N - unsigned long (always 32 bit, big endian byte order) V - unsigned long (always 32 bit, little endian byte order)



truss、strace或ltrace

Posted by 夏泽民

truss和strace用来 跟踪一个进程的系统调用或信号产生的情况,而 ltrace用来 跟踪进程调用库函数的情况。truss是早期为System V R4开发的调试程序,包括Aix、FreeBSD在内的大部分Unix系统都自带了这个工具;而strace最初是为SunOS系统编写的,ltrace最早出现在GNU/Debian Linux中。这两个工具现在也已被移植到了大部分Unix系统中,大多数Linux发行版都自带了strace和ltrace,而FreeBSD也可通过Ports安装它们。 你不仅可以从命令行调试一个新开始的程序,也可以把truss、strace或ltrace绑定到一个已有的PID上来调试一个正在运行的程序。三个调试工具的基本使用方法大体相同,下面仅介绍三者共有,而且是最常用的三个命令行参数: -f :除了跟踪当前进程外,还跟踪其子进程。 -o file :将输出信息写到文件file中,而不是显示到标准错误输出(stderr)。 -p pid :绑定到一个由pid对应的正在运行的进程。此参数常用来调试后台进程。 使用上述三个参数基本上就可以完成大多数调试任务了,下面举几个命令行例子: truss -o ls.truss ls -al: 跟踪ls -al的运行,将输出信息写到文件/tmp/ls.truss中。 strace -f -o vim.strace vim: 跟踪vim及其子进程的运行,将输出信息写到文件vim.strace。 ltrace -p 234: 跟踪一个pid为234的已经在运行的进程。 三个调试工具的输出结果格式也很相似,以strace为例: brk(0) = 0x8062aa8 brk(0x8063000) = 0x8063000 mmap2(NULL, 4096, PROT_READ, MAP_PRIVATE, 3, 0x92f) = 0x40016000 每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。 truss、strace和ltrace的工作原理大同小异,都是使用ptrace系统调用跟踪调试运行中的进程,详细原理不在本文讨论范围内,有兴趣可以参考它们的源代码。 每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。 strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。 -c 统计每一系统调用的所执行的时间,次数和出错的次数等. -d 输出strace关于标准错误的调试信息. -f 跟踪由fork调用所产生的子进程. -ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号. -F 尝试跟踪vfork调用.在-f时,vfork不被跟踪. -h 输出简要的帮助信息. -i 输出系统调用的入口指针. -q 禁止输出关于脱离的消息. -r 打印出相对时间关于,,每一个系统调用. -t 在输出中的每一行前加上时间信息. -tt 在输出中的每一行前加上时间信息,微秒级. -ttt 微秒级输出,以秒了表示时间. -T 显示每一调用所耗的时间. -v 输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出. -V 输出strace的版本信息. -x 以十六进制形式输出非标准字符串 -xx 所有字符串以十六进制形式输出. -a column 设置返回值的输出位置.默认 为40. -e expr 指定一个表达式,用来控制如何跟踪.格式如下: [qualifier=][!]value1[,value2]… qualifier只能是 trace,abbrev,verbose,raw,signal,read,write其中之一.value是用来限定的符号或数字.默认的 qualifier是 trace.感叹号是否定符号.例如: -eopen等价于 -e trace=open,表示只跟踪open调用.而-etrace!=open表示跟踪除了open以外的其他调用.有两个特殊的符号 all 和 none. 注意有些shell使用!来执行历史记录里的命令,所以要使用\. -e trace=set 只跟踪指定的系统 调用.例如:-e trace=open,close,rean,write表示只跟踪这四个系统调用.默认的为set=all. -e trace=file 只跟踪有关文件操作的系统调用. -e trace=process 只跟踪有关进程控制的系统调用. -e trace=network 跟踪与网络有关的所有系统调用. -e strace=signal 跟踪所有与系统信号有关的 系统调用 -e trace=ipc 跟踪所有与进程通讯有关的系统调用 -e abbrev=set 设定 strace输出的系统调用的结果集.-v 等与 abbrev=none.默认为abbrev=all. -e raw=set 将指 定的系统调用的参数以十六进制显示. -e signal=set 指定跟踪的系统信号.默认为all.如 signal=!SIGIO(或者signal=!io),表示不跟踪SIGIO信号. -e read=set 输出从指定文件中读出 的数据.例如: -e read=3,5 -e write=set 输出写入到指定文件中的数据. -o filename 将strace的输出写入文件filename -p pid 跟踪指定的进程pid. -s strsize 指定输出的字符串的最大长度.默认为32.文件名一直全部输出. -u username 以username 的UID和GID执行被跟踪的命令 通用的完整用法:



Search

Popular posts

Anything in here will be replaced on browsers that support the canvas element

Recent posts

This blog is maintained by 夏泽民

Get in touch with me at 465474307@qq.com

Subscribe to our mailing list

* indicates required