linux网络编程常用头文件总结
sys/types.h:数据类型定义
sys/socket.h:提供socket函数及数据结构
netinet/in.h:定义数据结构sockaddr_in
arpa/inet.h:提供IP地址转换函数
netdb.h:提供设置及获取域名的函数
sys/ioctl.h:提供对I/O控制的函数
sys/poll.h:提供socket等待测试机制的函数
其他在网络程序中常见的头文件
unistd.h:提供通用的文件、目录、程序及进程操作的函数
errno.h:提供错误号errno的定义,用于错误处理
fcntl.h:提供对文件控制的函数
time.h:提供有关时间的函数
crypt.h:提供使用DES加密算法的加密函数
pwd.h:提供对/etc/passwd文件访问的函数
shadow.h:提供对/etc/shadow文件访问的函数
pthread.h:提供多线程操作的函数
signal.h:提供对信号操作的函数
sys/wait.h、sys/ipc.h、sys/shm.h:提供进程等待、进程间通讯(IPC)及共享内存的函数
建议: 在编写网络程序时,可以直接使用下面这段头文件代码
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <malloc.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <stdarg.h>
#include <fcntl.h>
#include <fcntl.h>
涉及到用户权限及密码验证问题时加入如下语句:
#include <shadow.h>
#include <crypt.h>
#include <pwd.h>
需要注意的是,应该在编译时链接加密算法库,即增加编译选项:
-lcrypt
涉及到文件及时间操作加入如下语句:
#include <sys/time.h>
#include <utime.h>
#include <time.h>
#include <sys/stat.h>
#include <sys/file.h>
涉及到多进程操作时加入如下语句:
#include <sys/wait.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <signal.h>
涉及到多线程操作时加入如下语句:
#include <pthread.h>
#include <sys/poll.h>
需要注意的是,应该在编译时链接线程库,即增加编译选项:-lthread
netinet/if_ether.h ether_arp的数据结构
netinet/ether.h 以太祯的网络字节和ascii字节的转换,包括ether_ntoa(),ether_aton这样的函数定义
netinet/ip.h 这个头文件和linux/ip.h似乎很相似,也有iphdr的数据结构,同时还包括了timestamp结构,我的理解是,linux文件夹下的 ip.h是linux黑客编写的ip头文件,而这个则是gnu一开始就定义的头文件,同时还包括了bsd中的ipheader结构定义。同理的还有该目录下的tcp.h等文件
linux/ip.h iphdr的数据结构,以及一些ip层的数据定义,同理的还有tcp.h,udp.h等等
linux/if.h 主要的socket头文件,似乎修改自unix的if.h,定义了网卡的接口信息的宏,例如IFF_UP.另外有数个重要的interface的数据结构定义,包括ifreq,ifconf,ifmap
linux/if_packet.h 原始数据包的数据结构定义,包括sockaddr_pkt,sockaddr_ll,想接收原始数据包的不能错过这个文件。同理的还有if_ppp.h,if_tun.h等等
netinet/in.h 这个文件作的事情就多了。端口宏定义,著名ip(比如loopback),结构sockaddr_in,网络字节转换(ntoh,hton。。。。)。。。反正太多了,没事的话就把这个文件加到头文件包含里吧
netdb.h 文件如其名,包括结构hostent(主机环境),获得主机的信息的几个函数(gethostbyname)。似乎这个就是定义主机的各项环境,例如hostname等等
net/bpf.h berkeley的数据包过滤头文件,想用bpf进行包过滤的要重视一下这个文件
net/ethernet.h 包括几个以太网的数据结构,ether_addr(mac帧结构),ether_header(以太帧的头部)
-------------------------------
<sys/types.h> //primitive system data types(包含很多类型重定义,如pid_t、int8_t等)
<sys/socket.h> //与套接字相关的函数声明和结构体定义,如socket()、bind()、connect()及struct sockaddr的定义等
<sys/ioctl.h> //I/O控制操作相关的函数声明,如ioctl()
<stdlib.h> //某些结构体定义和宏定义,如EXIT_FAILURE、EXIT_SUCCESS等
<netdb.h> //某些结构体定义、宏定义和函数声明,如struct hostent、struct servent、gethostbyname()、gethostbyaddr()、herror()等
<arpa/inet.h> //某些函数声明,如inet_ntop()、inet_ntoa()等
<netinet/in.h> //某些结构体声明、宏定义,如struct sockaddr_in、PROTO_ICMP、INADDR_ANY等
------------------------------
#include <sys/types.h>
#include <netinet/in.h> // sockaddr_in, "man 7 ip" ,htons
#include <poll.h> //poll,pollfd
#include <arpa/inet.h> //inet_addr,inet_aton
#include <unistd.h> //read,write
#include <netdb.h> //gethostbyname
#include <error.h> //perror
#include <stdio.h>
#include <errno.h> //errno
#include <string.h> // memset
#include <string>
#include <iostream>
1.1. <sys/types.h>
primitive system data types(包含很多类型重定义,如pid_t、int8_t等)
1.2. <sys/socket.h>
//与套接字相关的函数声明和结构体定义,如socket()、bind()、connect()及struct sockaddr的定义等
int setsockopt(int s,int level,int optname,const void *optval,,socklen_toptlen);
用来设置参数s所指定的socket状态。参数level代表欲设置的网络层,一般设成SOL_SOCKET以存取socket层。参数optname代表欲设置的选项,有下列几种数值:
SO_DEBUG打开或关闭排错模式
SO_REUSEADDR允许在bind()过程中本地地址可重复使用
SO_TYPE返回socket形态。
SO_ERROR返回socket已发生的错误原因
SO_DONTROUTE送出的数据包不要利用路由设备来传输。
SO_BROADCAST使用广播方式传送
SO_SNDBUF设置送出的暂存区大小
SO_RCVBUF设置接收的暂存区大小
SO_KEEPALIVE定期确定连线是否已终止。
SO_OOBINLINE当接收到OOB 数据时会马上送至标准输入设备
SO_LINGER确保数据安全且可靠的传送出去。
optval代表欲设置的值,参数optlen则为optval的长度。
成功则返回0,若有错误则返回-1,错误原因存于errno。
EBADF参数s并非合法的socket处理代码。
ENOTSOCK参数s为一文件描述词,非socket。
ENOPROTOOPT参数optname指定的选项不正确。
EFAULT参数optval指针指向无法存取的内存空间。
getsockopt(取得socket状态)
int getsockopt(int s,int level,int optname,void* optval,socklen_t*optlen);
getsockopt()会将参数s所指定的socket状态返回。
参数:
optname代表欲取得何种选项状态
optval则指向欲保存结果的内存地址
optlen则为该空间的大小
level、optname请参考setsockopt()
成功则返回0,若有错误则返回-1,错误原因存于errno
EBADF参数s 并非合法的socket处理代码
ENOTSOCK参数s为一文件描述词,非socket
ENOPROTOOPT参数optname指定的选项不正确
EFAULT参数optval指针指向无法存取的内存空间
1.3. <sys/ioctl.h>
//I/O控制操作相关的函数声明,如ioctl()
1.4. <stdlib.h>
/某些结构体定义和宏定义,如EXIT_FAILURE、EXIT_SUCCESS等
1.5. <netdb.h>
定义主机的各项环境,包括结构hostent(主机环境), hostname,获得主机的信息的几个函数(gethostbyname),如:gethostbyname()、gethostbyaddr()、herror()
某些结构体定义、宏定义,如struct hostent、struct servent、等
voidsetprotoent (int stayopen);
用来打开/etc/protocols,如果参数stayopen值为1,则接下来的getprotobyname()或getprotobynumber()将不会自动关闭此文件
void endprotoent(void);
用来关闭由getprotoent()打开的文件。
void setservent(int stayopen);
用来打开/etc/services,如果参数stayopen值为1,则接下来的getservbyname()或getservbyport()将补回自动关闭文件。
void endservent(void);
用来关闭由getservent()所打开的文件。
1.6. <unistd.h>
read,write,close
1.7. <poll.h>
//poll,pollfd
1.8. <net/ethernet.h>
包括几个以太网的数据结构,ether_addr(mac帧结构),ether_header(以太帧的头部)
1.9. <netinet/in.h>
某些结构体声明、宏定义,如struct sockaddr_in、PROTO_ICMP、INADDR_ANY等
1.10. <netinet/if_ether.h>
ether_arp的数据结构
1.11. <netinet/ether.h>
以太祯的网络字节和ascii字节的转换,包括ether_ntoa(),ether_aton这样的函数定义
1.12. <netinet/ip.h>
这个头文件和linux/ip.h似乎很相似,也有iphdr的数据结构,同时还包括了timestamp结构,我的理解是,linux文件夹下的 ip.h是linux黑客编写的ip头文件,而这个则是gnu一开始就定义的头文件,同时还包括了bsd中的ipheader结构定义。同理的还有该目录下的tcp.h等文件
1.13. <linux/ip.h>
iphdr的数据结构,以及一些ip层的数据定义,同理的还有tcp.h,udp.h等等
1.14. <linux/if.h>
主要的socket头文件,似乎修改自unix的if.h,定义了网卡的接口信息的宏,例如IFF_UP.另外有数个重要的interface的数据结构定义,包括ifreq,ifconf,ifmap
1.15. <linux/if_packet.h>
原始数据包的数据结构定义,包括sockaddr_pkt,sockaddr_ll,想接收原始数据包的不能错过这个文件。同理的还有if_ppp.h,if_tun.h等等
1.16. <arpa/inet.h>
某些函数声明,如inet_ntop()、inet_ntoa()等
linux网络编程常用头文件总结相关推荐
- Linux网络编程常用头文件解释
sys/types.h:数据类型定义 sys/socket.h:提供socket函数及数据结构 netinet/in.h:定义数据结构sockaddr_in arpa/inet.h:提供IP地址转换函 ...
- linux sockaddr_in头文件,linux网络编程常用头文件
sys/types.h:数据类型定义 sys/socket.h:提供socket函数及数据结构 netinet/in.h:定义数据结构sockaddr_in arpa/inet.h:提供IP地址转换函 ...
- Linux socket 网络编程 常用头文件
一 三种类型的套接字: 1.流式套接字(SOCKET_STREAM) 提供面向连接的可靠的数据传输服务.数据被看作是字节流,无长度限制.例如FTP协议就采用这种. 2.数据报式套接字(SOCKET_D ...
- C++编程常用头文件及其包含函数汇总
C++编程常用头文件及其包含函数汇总 1.#include <iostream> #include<iostream>是标准的C++头文件,任何符合标准的C++开发环境都有这个 ...
- linux网络编程常用函数详解与实例(socket--bind--listen--accept)
常用的网络命令: netstat 命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可 ...
- Linux驱动开发常用头文件
头文件目录中总共有32个.h头文件.其中主目录下有13个,asm子目录中有4个,linux子目录中有10个,sys子目录中有5个.这些头文件各自的功能如下: 1.主目录 <a.out.h> ...
- linux下的socket在哪个头文件,linux下socket编程常用头文件
sys/types.h:数据类型定义 sys/socket.h:提供socket函数及数据结构 netinet/in.h:定义数据结构sockaddr_in arpa/inet.h:提供IP地址转换函 ...
- Linux网络编程常用api
文章目录 总览 大端小端 大小端检测 大小端转换 socket地址API 通用socket地址 专用socket地址 PF_UNIX专用地址 PF_INET PF_INET6 总结 IP转换函数 例子 ...
- Linux中常用头文件的作用--转
http://blog.sina.com.cn/s/blog_5c93b2ab0100q62k.html 1. Linux中一些头文件的作用: <assert.h>:ANSI C.提供断言 ...
- linux c之c语言符合标准的头文件和linux常用头文件
1.C语言符合标准的头文件 #include <assert.h> //设定插入点 #include <ctype.h> //字符处理 #include <errno.h ...
最新文章
- 基于MMSeg算法的中文分词类库
- 什么是爱?[转载朋友发给我的信息]
- python中lambda以及与filter/map/reduce结合的用法
- html5 canvas实际应用,Html5 Canvas入门及经典应用
- Play 2.0框架和XA交易
- 机器学习分类与性能度量
- linux shell加密压缩,linux的shell指令进行压缩或者解压缩
- 阿里字节面试题,多线程打印程序
- 130242014049+魏俊斌+第2次试验
- python黑帽子第二章实验截图
- VS2015社区版资源
- linux加载scsi硬盘驱动程序使用,linux scsi硬盘的安装
- win10WIFI图标消失,只显示一个带红叉的窗口(或者飞行模式的符号)
- springboot+nodejs+vue+elementui教师下乡支教岗位申请系统java项目源码
- element-UI设置背景色和边框色
- 鸿蒙三千法则排名,混沌三千大道,鸿钧掌仙道,仅排第五!前十大道分别为谁掌握?...
- java获取首字母_Java 获取中文首字母的方法
- 批量执行ABAQUS的inp文件——整理
- 微博营销中的 KOL 分析
- “直播与语音交友APP软件”现在做还晚吗?
热门文章
- 成都一名程序员跳楼,程序员眼中的成都和天府软件园
- C语言入门——常见数据类型取值范围
- ⨯ Get “https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-3.0.4.
- Knowledge Reasoning 复习
- 使用OpenCV,Python和dlib进行眨眼检测
- mysql 备份库的shell_shell脚本之 备份mysql数据库
- COMMAND NOT SUPPORTED 解决方法
- Ubuntu下 百度在线语音合成使用
- 最佳量化交易的计算机操作系统
- gephi mysql_用爬虫和 Gephi 研究微博好友二度人脉分析|Mo’s blog