UNIX环境高级编程:网络编程常用函数及结构

#include <arpa/inet.h>

int inet_aton(const char *strptr,

              struct in_addr *addrptr);

//将strptr字符串转换成32位的网络字节序(二进制值--a.b.c.d->32)。

int_addr_t inet_addr(const char *strptr)

//功能通上,返回地址。

in_addr addr;

addr.s_addr = inet_addr("192.168.2.103");

char *inet_ntoa(stuct in_addr inaddr);//32位IP->a.b.c.d形式的

//将32位网络字节序二进制地址转换成点分十进制的串

a代表ASCII,n代表network。

网络、主机字节序转换函数

主机序转换到网络序:

u_short htons (u_short short);

u_long htonl (u_long  hostlong);

网络序转换到主机序:

u_short ntohs (u_short short);

u_long ntohl (u_long hostlong);

h(host),n(network),l(long),s(short)

通过主机名访问网络

主机结构体

struct hostent

{

char *h_name;//主机的正式名称

char *h_aliases;//主机的别名

int  h_addrtype;//主机的地址类型 AF_INET

int h_length;//主机的地址长度

char **h_addr_list;//主机的IP地址列表

}

#define h_addr h_addr_list[0] //主机的第一个IP地址

struct hostent *gethostbyname(const char *hostname)

socket

通用地址结构:

struct sockaddr

{

u_short sa_family;//协议族

char sa_data[14];//地址协议

}

Internet协议地址结构

struct sockaddr_in

{

short int sin_family;//协议族

unsigned short int  sin_port;//端口号

struct in_addr sin_addr;//协议特定地址

unsigned char si_zero[8];//未使用,填0

}

时间: 2025-01-05 14:14:43

UNIX环境高级编程:网络编程常用函数及结构的相关文章

UNIX环境高级编程---标准I/O库

前言:我想大家学习C语言接触过的第一个函数应该是printf,但是我们真正理解它了吗?最近看Linux以及网络编程这块,我觉得I/O这块很难理解.以前从来没认识到Unix I/O和C标准库I/O函数压根不是一码事.Unix I/O也叫低级I/O,也叫Unbuffered I/O,是操作系统内核部分,也是系统调用:而C标准I/O函数相对也成Buffered I/O,高级I/O,一般是为了效率考虑对这些系统调用的封装.以前使用getchar()经常为输入完后的回车而出错.那是不理解标准I/O实现时的

UNIX环境高级编程中的apue.h

/************** * *apueerror.h * *************/ #include <apue.h> #include <stdio.h> #include <errno.h> /* for definition of errno */ #include <stdarg.h> /* ISO C variable aruments */ static void err_doit(int, int, const char *, va

unix高级编程-UNIX环境高级编程 times() 疑问

问题描述 UNIX环境高级编程 times() 疑问 例程 int main(int argc, char *argv[]) { clock_t s_clk,e_clk; struct tms s_tms,e_tms; s_clk = times(&s_tms); system("ls /dev"); system("date"); sleep(1); e_clk = times(&e_tms); printf("e_clk %ld - s

ubuntu-最近在学习Unix 环境高级编程,配置环境时遇到了些问题

问题描述 最近在学习Unix 环境高级编程,配置环境时遇到了些问题 最近再看APUE(UNix 环境高级编程)的第三版,照着教程在中配置环境.也就是想要运行书中的源码,则要安装 libbsd-dev包,而每次安装这个包时,都如上报错,请问各位大虾,该怎么解决呢? 解决方案 你好, 类似的问题我也遇到过 ubuntu下apt-get install安装软件, 报"无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系",今天终于找到解决方法了. 一般出现这种情况的原

unix环境高级编程-UNIX环境高级编程源代码对应

问题描述 UNIX环境高级编程源代码对应 今天开始学习UNIX环境高级编程,书中的源代码下载到了,但是发现根本不是按章节来的,找起来是相当的费时间,有哪位大神用过后知道他们的对应关系么,比如1-1对应ls1.c这样,真是万分感激,造福大家啊!

Mac OS X 10.8 中编译APUE(Unix环境高级编程)的源代码过程_C 语言

最近在温习APUE(<unix环境高级编程>),以前都是在linux下搞,现在打算在自己机器弄下,于是google了下,把编译的事情搞定了,修改了一些教程的一些错误,比如下载链接之类的. 1.下载源文件,我这里是第二版,貌似第三版的英文版出来了... 复制代码 代码如下: wget http://www.apuebook.com/src.2e.tar.gz 2.解压 复制代码 代码如下: tar zxf src.2e.tar.gz 3.修改些东西 复制代码 代码如下: cd apue.2e/

实例解析IPv6环境下的网络编程

自IPv4诞生至今已有20多年了,目前它虽仍因互联网的成功而风光无限,但是如同"Internet正在成为其自身巨大成功的受害者"一样,目前IPv4地址的极度匮乏注定它将被历史所淘汰.而IPv6-IPv4的继承人,具有地址空间巨大,支持QOS等许多优良特性,在不久的将来会迅速的普及,但IPv6的出现将对目前网络编程方式产生一定的影响. 本文将就IPv6环境下的网络编程方式进行实例解析. 最终效果: 实例解析IPv6环境下的网络编程-配置篇 目前我们所用的IP协议是v4版本的, 比如192

UNIX环境高级编程:epoll函数使用详解

epoll - I/O event notification facility 在linux的网络编程中,很长的时间都在使用select来做事件触发.在linux新的内核中,有了一种替换它的机制,就是epoll. 相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率.因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多. 并且,在  linux/posix_types.h头文件有这样的声明: #define __FD_SETSIZ

《UNIX环境高级编程(第3版)》——2.5 限制

2.5 限制 UNIX系统实现定义了很多幻数和常量,其中有很多已被硬编码到程序中,或用特定的技术确定.由于大量标准化工作的努力,已有若干种可移植的方法用以确定这些幻数和具体实现定义的限制.这非常有助于改善UNIX环境下软件的可移植性. 以下两种类型的限制是必需的. (1)编译时限制(例如,短整型的最大值是什么?) (2)运行时限制(例如,文件名有多少个字符?) 编译时限制可在头文件中定义.程序在编译时可以包含这些头文件.但是,运行时限制则要求进程调用一个函数获得限制值. 另外,某些限制在一个给定

《UNIX环境高级编程(第3版)》——1.3 登录

1.3 登录 1.登录名 用户在登录UNIX系统时,先键入登录名,然后键入口令.系统在其口令文件(通常是/etc/ passwd文件)中查看登录名.口令文件中的登录项由7个以冒号分隔的字段组成,依次是:登录名.加密口令.数字用户ID(205).数字组ID(105).注释字段.起始目录(/home/sar)以及shell程序(/bin/ksh). sar:x:205:105:Stephen Rago:/home/sar:/bin/ksh 目前,所有的系统已将加密口令移到另一个文件中.第6章将说明这