Linux Socket 学习(十)
Linux Socket 学习(十)
在套接口上使用标准I/O
在前面章节的例子代码中我们已经使用了read(2)或是write(2)系统调用在套接口上执行读取和写入操作。这个规则的一个例外就是recvfrom(2)和sendto(2)函数,这两个函数用来读写数据报。然而,使用read和writte函数调用却有一些程序上的缺点。
这一章我们将会讨论以下内容:
如何使用fdopen(3)将一个套接口与一个FILE流相关联
如何创建并读写FILE流
关闭与套接口相关联的流的问题
为我们的FILE流选择并创建合适的缓冲技术
中断系统调用的问题
掌握了这些内容将为我们提供解决我们网络程序的额外方法。
理解标准I/O的需要
Linux中的stdio(3)程序符合ANSI C3.159-1989标准。这个接口的标准化可以帮助程序将程序移植到多个平台。例如,当我们要将源代码从其他的UNIX系统移植到我们自己的Linux平台时,这个程序对于我们来说也许有用。
stdio包本身是与read和writte调用相冲突。然而,我们却使用标准的I/O调用,因为根据我们程序的需要,他们可以方便的每次为我们提供一行或是一个字符。例如,read调用,并不会为我们的程序返回一个文本行。相反,他们返回尽可能多的数,甚至是多行文本。
当写入套接口时,标准I/O例程可以允许我们的程序每次写入一个字符,而不会造成大的内容覆盖。另一方面,每次调用writte写入一个字符花费太大。标准I/O函数允许我们的程序使用合适的数据单元进行操作。
stdio同时我们的程序提供了数据缓冲功能,包括输入与输出。当使用缓冲功能,可以极大的改善我们程序的性能。不幸的是,缓冲会为某些格式的通信造成困难,所以并不是总是使用缓冲。
在这一章我们假设已经熟悉了stdio的基本功能。这通常是在C程序教程,同时也是C语言本身所教的内容。相应的,这一章我们将会专注于我们应密切关注的东西,而其他的一些细微的地方并不明显,因为他适用于套接口编程。
将一个套接口与一个流相关联
stdio流是由FILE控制块来进行管理的。例如,我们也许已经多次编写了如下所示的代码:
FILE *in;
in = fopen(pathname,"r");
if ( in == NULL ) {
fprintf(stderr,"%s: opening %s for read.\n",strerror(errno),pathname);
exit(1);
}
在这个例子中,变量pathname所指定的文件将会打开来读。如果open调用成功,变量in将会接收一个指向为我们管理流I/O的FILE结构。否则,变量in接收一个NULL指针,而我们的程序也必须处理或是报告
相关文档:
1.使用shell的which命令,
如:查找GUN的C编译器安装路径
$ which gcc
/usr/bin/gcc
2.如果which没有找到要找的文件,那就试试whereis,该命令搜索更大范围的系统目录,和shell搜索路径无关。
有些系统which命令无法显示用户没执行的权限文件:
如:which ipppd
$ which ipppd
/usr/bin/which:no ipppd in (/bin:/ ......
忘记在哪里看到的了。。原作者请见谅~~
Fedora Core 6
对于服务进程的变化
bluetooth
相关的服务有 bluetooth,hcid,hidd,sdpd,dund,pand
capi
仅针对ISDN
用户
mctrans SELINUX
必须的服务。
mdmpd
监视多路设备的服务
pcscd
支持智能卡的服务,这是FC6
加入智能卡支持的特征之一
补充几个Fedo ......
1、Linux 基础
安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linux系统的基本命令 认识Linux系统的常用服务安装Linux操作系统 Linux基本命令实践 设置Linux环境变量 定制Linux的服务 Shell 编程基础使用vi编辑文件 使用Emacs编辑文件 使用其他编 ......
硬/软件环境
基于S3C2410的嵌入式系统,COM1连接PC,COM2连接SIM300 GPRS模块。
该系统运行在Linux 2.6.14操作系统下,使用ppp套件通过SIM300进行PPP拨号。
让Linux内核支持PPP
进入Linux内核目录,执行#make menuconfig
Network Device Support à
&nb ......