strace program
life's a struggle.
2015-02-05
2015-02-05
2015-02-05
原因
开启了c99
后,gcc采用严格标准c(__STRICT_ANSI
),而getaddrinfo
是POSIX定义的,
所以无法使用,具体可查看/usr/include/netdb.h
,/usr/include/features.h
摘取:
1 | The `-ansi' switch to the GNU C compiler, and standards conformance |
参考
2015-02-05
-D name=definition
指定预处理宏定义,相当于#define name definition
-std=XXX
- c99
- c++11
-M
输出依赖关系,隐含-E,也就是不编译,只是查看依赖关系,依赖关系包含系统头文件
-MM
输出依赖关系,只是用户的,不包含库文件
-MF file
依赖关系的结果输出到指定文件中,必须指定-M或-MM
-MD
相当于-MM -MF .d ,
输出依赖关系,不隐含-E,也就是同时生成依赖文件(.d),还编译,依赖关系中包含
系统头文件-MMD
相当于-MD,生成的*.d中不包含系统头文件
-MT file
使用file中的依赖关系编译,也就是配合-MMD或-MD或-MF来使用,使用他们生成的依赖
关系自动编译-MP
连头文件也输出对应的依赖关系,可能为伪目标,防止删除了头文件,而没有更新
makefile导致编译错误-Ldir
添加dir到目录列表,目录列表用来搜索链接库
-llibrary
指定链接库,优先寻找共享库(liblibrary.so,liblibrary.a),该选项最好放到最后,
防止后面需要链接的,详见gcc(1)-static
指定链接静态库
-fPIC
生成位置无关代码(position independent code)
-shared
生成共享库,需要-fPIC
-Idir
添加目录到搜索头文件列表,添加的优先搜索
-Wl,
向链接器传递选项,’,’隔开选项
-Wa,
向汇编器传递选项,’,’隔开选项
-Wp,
向预处理器传递选项,’,’隔开选项
-O
不开启优化
调试
-ggdb3
生成gdb的调试信息,带宏相关
2015-02-04
2015-02-04
| 头文件 | 作用 |
|——————+————————————————–|
| <sys/socket.h>
| 核心socket API和数据结构 |
| <netinet/in.h>
| IPv4,IPv6等相关协议族地址结构定义,常用端口定义 |
| <arpa/inet.h>
| IP地址操作 |
| <netdb.h>
| 网络数据库查询,如主机名,服务等 |
参考
2015-02-03
-C num
指定上下文行数
-B NUM, –before-context=NUM
指定上文行数
-A NUM, –after-context=NUM
指定下文行数
-m NUM, –max-count=NUM
指定最大匹配数量
-n, –line-number
显示行号
-o, –only-matching
只输出匹配的内容(默认输出匹配内容所在的整行)
实例
grep指定日期的文件
find . -newermt 2016-11-19 ! -newermt 2016-11-20|xargs grep -i AH7GJ5SFCQ
2015-02-03
环境
ubuntu-14.04
glic-2.19
工作目录:
/usr/include
数据结构
struct sockaddr
socket
API接口,无关具体地址族,协议。
定义位置
x86_64-linux-gnu/sys/socket.h
=> x86_64-linux-gnu/bits/socket.h
1 | /* Structure describing a generic socket address. */ |
Note:
=>
表示包含
strcut sockaddr_in
具体类型数据结构,用来操作地址族,IP,端口。
定义位置
netinet/in.h
1 | /* Structure describing an Internet socket address. */ |
struct in_addr
定义IP
定义位置
netinet/in.h
1 | /* Internet address. */ |
关系
in_addr
=> sockaddr_in
=> sockaddr
Note:
=>
表示构成
说明
socket地址结构传递方向
从进程到内核
需要传入参数(套接字地址大小,告诉内核需要复制多少字节)
- bind
- connect
- sendto
- sendmsg
从内核到进程
需要传入传出参数(套接字地址大小,告诉内核需要复制多少字节,以及反馈进程,返回的地址结构大小)
- accept
- recvfrom
- recvmsg
- getpeername
- getsockname
2015-02-03
2015-02-03
apt-get
只下载不安装(二进制包)
apt-get download PACKAGE
下载源代码
apt-get source PACKAGE
apt-cache
查询包依赖(该包依赖哪些包)
apt-cache depends PACKAGE
查询反向依赖(哪些包依赖该包)
apt-cache rdepends PACKAGE
查询包信息(基本信息,依赖信息)
apt-cache showpkg PACKAGE apt-cache show PACKAGE
查看包版本
apt-cache policy PACKAGE
搜索包
apt-cache search PATTERN
apt-file(需要安装)
列出包文件列表
apt-file list PACKAGE