linux socket学习笔记(第二章)
域和地址族
有一个很恰当的比喻说明套接口编程,套接口就好比电话,而电话网中的电话号码就好像套接口地址。说明套接口可以用特定的地址来标示自己。并不是所有的套接口都需要地址,比如无名套接口就不需要地址,例如函数socketpair(2)就生成了一对互相可以连接但是却没有地址的套接口。书中比喻说就好像是冷战时期苏联和美国之间的热线电话一样,直接相连,不需要电话号码。
域(domain),在socket中,不仅可以支持TCP/IP协议,也可以支持其他协议,socket中的参数domain的作用正在于此。回顾一下socketpair(2)函数的语法可以看到。
#include <sys/types.h>
#include <sysy/socket.h>
int socketpair( int domain , int type , int protocol , int sv[2] );
在socketpair(2)函数中,domain参数要么是AF_LOCAL,要么是AF_UNIX. 其实他们是等价的。AF_LOCAL的前缀AF表示地址族(address family),domain参数的用途就是说明函数是采用哪个地址族。之后还会出现PF_的宏,现在可以暂时认为是等价的。
AF_LOCAL表示使用本地地址规则来生成地址,AF_INET表示使用IP地址规则来生成地址。BSD的解决方案提供了一种通用的地址结构如下:
#include <sys/socket.h>
struct sockaddr{
sa_family_t sa_family ; /* 地址族 */
char sa_data[14] ; /* 地址数据 */
};
对于编程者来说,通用套接口本身没有什么用处,但是它为其他地址结构提供了一个重要的参考模型,比如所有的地址都要在结构中的同样位置定义sa_family成员,因为他决定了怎么翻译结构中包含地址信息的字节。
生成本地地址AF_LOCAL或者AF_UNIX的地址的结构名是sockaddr_un.
在Linux中,使用最普遍的地址族是AF_INET.具有IPv4套接口地址的套接口可以与TCP/IP上的其他主机进行通信。一下是C语言描述的结构sockadd
相关文档:
本例是冯国进的 《嵌入式Linux 驱动程序设计从入门到精通》的第一个例子
感觉真是好书 强烈推荐
注释是deep_pro加的 转载请注明!我的特点是文不加点!
这个驱动是在内存中分配一个256字节的空间,供用户态应用程序读写。
先是头文件 demo.h
#ifndef _DEMO_H_
#define _DEMO_H_
#include <linux/ioct ......
main.c
//初始化队列
void InitQueue(LiQueue *q)
{
q=(LiQueue*)malloc(sizeof(LiQueue));
q->front=q->rear=NULL;
}
//判断是否为空
int QueueEmpty(LiQueue *q)
{
if(q->rear==NULL)
{
return 1;
}
else
{
......
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service cron ......
TFTP是用来下载远程文件的最简单网络协议,它基于UDP协议而实现。嵌入式linux的tftp开发环境包括两个方面:一是嵌入式linux宿主机的 tftp-server支持,二是嵌入式linux目标机的tftp-client支持。因为u-boot本身内置支持tftp-client,所以嵌入式目标机就不用配置了。下面就详细介绍一下linux宿主机tftp-server的安装配置。
......
在Linux下面去压缩文件或者目录。我们将学习zip, tar, tar.gz和tar.bz2等压缩格式的基本用法。
zip格式已成为压缩文件的标准选择,而且它在windows上也能使用。
经常用zip格式压缩那些需要共享给windows用户的文件。
如果只是共享给linux用户或者Mac用户,偏向于选择tar.gz格式。
ZIP
zip可能是目前使用得最多的文档 ......