Unix环境编程常用头文件

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()

POSIX标准定义的头文件<dirent.h> 目录项
<fcntl.h> 文件控制
<fnmatch.h> 文件名匹配类型
<glob.h> 路径名模式匹配类型
<grp.h> 组文件
<netdb.h> 网络数据库操作
<pwd.h> 口令文件
<regex.h> 正则表达式
<tar.h> TAR归档值
<termios.h> 终端I/O
<unistd.h> 符号常量
<utime.h> 文件时间
<wordexp.h> 字符扩展类型
 
--------------------------------------------------------------------------------
<arpa/inet.h> INTERNET定义
<net/if.h> 套接字本地接口
<netinet/in.h> INTERNET地址族
<netinet/tcp.h> 传输控制协议定义
 
--------------------------------------------------------------------------------
<sys/mman.h> 内存管理声明
<sys/select.h> Select函数
<sys/socket.h> 套接字借口
<sys/stat.h> 文件状态
<sys/times.h> 进程时间
<sys/types.h> 基本系统数据类型
<sys/un.h> UNIX域套接字定义
<sys/utsname.h> 系统名
<sys/wait.h> 进程控制
 
--------------------------------------------------------------------------------
POSIX定义的XSI扩展头文件<cpio.h> cpio归档值 
<dlfcn.h> 动态链接
<fmtmsg.h> 消息显示结构
ftw.h> 文件树漫游
<iconv.h> 代码集转换使用程序
<langinfo.h> 语言信息常量
<libgen.h> 模式匹配函数定义
<monetary.h> 货币类型
<ndbm.h> 数据库操作
<nl_types.h> 消息类别
<poll.h> 轮询函数
<search.h> 搜索表
<strings.h> 字符串操作
<syslog.h> 系统出错日志记录
<ucontext.h> 用户上下文
<ulimit.h> 用户限制
<utmpx.h> 用户帐户数据库
 
--------------------------------------------------------------------------------
<sys/ipc.h> IPC(命名管道)
<sys/msg.h> 消息队列
<sys/resource.h> 资源操作
<sys/sem.h> 信号量
<sys/shm.h> 共享存储
<sys/statvfs.h> 文件系统信息
<sys/time.h> 时间类型
<sys/timeb.h> 附加的日期和时间定义
<sys/uio.h> 矢量I/O操作
 
--------------------------------------------------------------------------------
POSIX定义的可选头文件<aio.h> 异步I/O
<mqueue.h> 消息队列
<pthread.h> 线程
<sched.h> 执行调度
<semaphore.h> 信号量
<spawn.h> 实时spawn接口
<stropts.h> XSI STREAMS接口
<trace.h> 事件跟踪
 
--------------------------------------------------------------------------------
#include <unistd.h>对于内核而言,所有打开文件都由文件描述符引用。文件描述符是一个非负整数。当打开一个现存文件或创建一个新文件时,内核向进程返回一个文件描述符。当读、写一个文件时,用open或creat返回的文件描述符标识该文件,将其作为参数传送给read或write。按照惯例,UNIX shell使文件描述符0与进程的标准输入相结合,文件描述符1与标准输出相结合,文件描述符2与标准出错输出相结合。这是UNIX shell以及很多应用程序使用的惯例,而与内核无关。尽管如此,如果不遵照这种惯例,那么很多LINUX应用程序就不能工作。在POSIX.1应用程序中,幻数0、1、2应被代换成符号常数STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO。这些常数和类型都定义在头文 <unistd.h>中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值