linux网络编程常用头文件

来源:互联网 发布:手机验钞机软件 编辑:程序博客网 时间:2024/06/05 10:39

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:大量针对系统调用的封装(英语:wrapper functions),如 fork、pipe 以及各种 I/O 原语(read、write、close 等等)

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_tint8_t)   
<sys/socket.h>         //与套接字相关的函数声明和结构体定义,如socket()bind()connect()struct sockaddr的定义等
<sys/ioctl.h>             //I/O控制操作相关的函数声明,如ioctl()
<stdlib.h>                   //某些结构体定义和宏定义,如EXIT_FAILUREEXIT_SUCCESS
<netdb.h>                  //某些结构体定义、宏定义和函数声明,如struct hostentstruct serventgethostbyname()gethostbyaddr()herror()
<arpa/inet.h>           //某些函数声明,如inet_ntop()inet_ntoa()
<netinet/in.h>          //某些结构体声明、宏定义,如struct sockaddr_inPROTO_ICMPINADDR_ANY

------------------------------

linux下socket编写常用头文件
 
#include <sys/socket.h>   //connect,send,recv,setsockopt等
#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>        //fork、pipe、各种 I/O 原语(read、write、close 等等)
#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_tint8_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则为该空间的大小

leveloptname请参考setsockopt()

成功则返回0,若有错误则返回-1,错误原因存于errno

EBADF参数并非合法的socket处理代码

ENOTSOCK参数s为一文件描述词,非socket

ENOPROTOOPT参数optname指定的选项不正确

EFAULT参数optval指针指向无法存取的内存空间

 

1.3.      <sys/ioctl.h>

//I/O控制操作相关的函数声明,如ioctl()

1.4.      <stdlib.h>

/某些结构体定义和宏定义,如EXIT_FAILUREEXIT_SUCCESS

1.5.      <netdb.h>

定义主机的各项环境,包括结构hostent(主机环境), hostname,获得主机的信息的几个函数(gethostbyname,如:gethostbyname()gethostbyaddr()herror()

 

某些结构体定义、宏定义,如struct hostentstruct 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_addrmac帧结构),ether_header(以太帧的头部)

 

1.9.      <netinet/in.h>

某些结构体声明、宏定义,如struct sockaddr_inPROTO_ICMPINADDR_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.hlinux黑客编写的ip头文件,而这个则是gnu一开始就定义的头文件,同时还包括了bsd中的ipheader结构定义。同理的还有该目录下的tcp.h等文件

 

1.13. <linux/ip.h>

   iphdr的数据结构,以及一些ip层的数据定义,同理的还有tcp.h,udp.h等等

 

1.14. <linux/if.h>

    主要的socket头文件,似乎修改自unixif.h,定义了网卡的接口信息的宏,例如IFF_UP.另外有数个重要的interface的数据结构定义,包括ifreqifconfifmap

 

1.15. <linux/if_packet.h>

    原始数据包的数据结构定义,包括sockaddr_pktsockaddr_ll,想接收原始数据包的不能错过这个文件。同理的还有if_ppp.h,if_tun.h等等

 

1.16. <arpa/inet.h>

某些函数声明,如inet_ntop()inet_ntoa()

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 我真的爱上你了怎么办 弯腰时间久了腰疼怎么办 斗鱼pk输的怎么办 领导当着人骂我怎么办 被老板骂了应该怎么办 三星s7关机键掉了怎么办 主播遇到黑粉怎么办 在工作单位突然死亡怎么办 孕7月半夜脚抽筋怎么办 上单对上两个射手怎么办 游戏本玩游戏掉帧怎么办 手机开直播很卡怎么办 小孩小鸡被虫子咬了怎么办 小鸡仔不吃食了怎么办 小鸡的腿瘸了怎么办 在境外住酒店钱被偷了怎么办 一加6屏幕辣眼睛怎么办 棉质衣服皱了怎么办 洗完衣服皱了怎么办 穿衬衫袖子很皱怎么办 洗完衣服有褶皱怎么办 麻料裤子容易皱怎么办 苹果手机邮件删了怎么办 飞猪12306登录不上怎么办 邮箱被别人绑定12306怎么办 白名单一个地址也没怎么办 12306忘记用户名和密码怎么办 12306忘了用户名和密码怎么办 12306注册后忘了密码怎么办 12306帐号忘了密码怎么办 12306忘了密码和手机号怎么办 12306账号密码邮箱忘了怎么办 注册12306账号没有邮箱怎么办 12306忘了用户名和邮箱怎么办 12306忘记用户名和邮箱怎么办 12306证件号码已被注册怎么办 12306忘记手机号和邮箱怎么办 发邮件被对方服务器退回怎么办 铁路12306显示已注册怎么办 qq密码太长输不进去怎么办 淘宝买家收货地址填写不全怎么办