博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

04 2011 档案

摘要:3.6 If you open a file for readwrite with the append flag, can you still read from anywhere in the file using lseek? Can you use lseek to replace existing data in the file? Write a program to verify t... 阅读全文

posted @ 2011-04-29 22:13 天地玄黄 阅读(369) 评论(0) 推荐(0)

摘要:1. 我目前在Linux中运行的程序通常是在Shell 之上运行的,Shell 已经设定好了 standard input(键盘) 和 standard output(显示器). 2. 许多程序都默认 standard input 的 file descriptor 是 0, standard output 的 file descriptor 是 1。在<unistd.h>中定义了两个常量来表示... 阅读全文

posted @ 2011-04-29 22:05 天地玄黄 阅读(221) 评论(0) 推荐(0)

摘要:这一章比较混乱,现在整理一下。 一、数据结构: 1、hostent: 这个数据结构用在gethostbyname这个函数中,表示与host 相关的一些 entries. struct hostent { char *h_name; /* official (canonical) name of host */ char **h_aliases; /* pointer to array of po... 阅读全文

posted @ 2011-04-28 11:02 天地玄黄 阅读(350) 评论(0) 推荐(0)

摘要:在C语言中,static关键字的引入最先是为了表示 退出一个块后(即退出某个函数之后)仍然存在的局部变量。随后,C中的static 有了第二种含义:用来表示不能被其他文件访问的全局变量和函数。 static 对三个东西进行修饰:局部变量、全局变量、函数。 1、修饰局部变量 static 修饰局部变量时,表示这个变量在这个函数退出之后并不消失,当再次进入这个函数时,这个变量中存放的值还是和退出时候... 阅读全文

posted @ 2011-04-23 14:36 天地玄黄 阅读(333) 评论(0) 推荐(0)

摘要:C语言程序各种各样的编码风格,我比较推崇的一种是K&R 书上的模式。下面是从《Unix Network Programming》上抄的一个样例,可以参看一下书写格式: 1 /* This is a C program templete. 2 */ 3 #include "unp.h" 4 5 int main(int argc, char **argv) 6 { 7 char *ptr, **p... 阅读全文

posted @ 2011-04-22 19:48 天地玄黄 阅读(787) 评论(0) 推荐(0)

摘要:原文网址:http://cxw06023273.iteye.com/blog/867304 SCTP协议在UNP第2版中还未提及,是在第3版中新增加的,在第9、10、23章介绍SCTP。 SCTP就好象是TCP和UDP的综合体,既可以单播也能多播,而且连接建立过程使用4次握手而不是TCP的3次握手,在相当程度上防止了类似TCP中的syn flood的攻击方法。 SCTP是面向消息而不是面向连接的,... 阅读全文

posted @ 2011-04-21 21:48 天地玄黄 阅读(727) 评论(0) 推荐(0)

摘要:在IPv4中,一个datagram 的大小最大为65535(2^16), IPv4的header 为20 bytes,UDP的header 为8 bytes,所以,data的大小最大就为65507 bytes。 使用Figure 8.7中的Client 的主函数,其中dg_cli 函数重新写了一下,让它可以传送最大的datagram: #include "unp.h"#include <neti... 阅读全文

posted @ 2011-04-21 21:05 天地玄黄 阅读(588) 评论(0) 推荐(0)

摘要:学习《Unix Network Programming》,有一些问题,随遇随写。我所用的书是 W. Richard Stevens, Bill Fenner, Andrew M. Rudoff. UNIX网络编程 卷1:套接字联网API, 英文版 第三版. 人民邮电出版社, 2009年11月第1版 1、 Figure 8.5, P.243:文中说每个TCP都有自己的Buffer,那么这个Buff... 阅读全文

posted @ 2011-04-21 20:50 天地玄黄 阅读(229) 评论(0) 推荐(0)

摘要:我在本地目录定义了dg_cli()函数,在一个Archieve File中也定义了这个函数。 本地目录中的dgcliconnect.c 中就是这个函数的定义。另一个同样的函数在../libunp.a中。 dgcliconnect.c 编译之后的文件为 dgcliconnect.o。 链接的时候,先链接本地的.o文件,再链接库文件,不会出错: cattz@Ubuntu:~/unp/unpv13e/c... 阅读全文

posted @ 2011-04-21 11:14 天地玄黄 阅读(3113) 评论(0) 推荐(0)

摘要:函数原型为: #include <netinet/socket.h> int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); Return: 0 if OK, –1 on error 这个函数用于获得socket的各种特性,即socket options. 结果放在函数的后两个参数中,... 阅读全文

posted @ 2011-04-20 14:27 天地玄黄 阅读(19019) 评论(1) 推荐(0)

摘要:The following is the code coming from Uinx Network Programming on page 235: int flags; /* set a socket as nonblocking */if( (flags = fcntl(fd, F_GETFL, 0)) < 0) err_sys("F_GETFL error");flags |= O_NON... 阅读全文

posted @ 2011-04-20 10:48 天地玄黄 阅读(321) 评论(0) 推荐(0)

摘要:在《Unix网络编程》中,主要讲Client和Server的交互。有一些规则: 1、在Client端,使用sockfd,而在Server端,使用listenfd: Client:sockfd = Socket(AF_INET, SOCK_STREAM, 0);Server:listenfd = Socket(AF_INET, SOCK_STREAM, 0); 阅读全文

posted @ 2011-04-19 16:02 天地玄黄 阅读(241) 评论(0) 推荐(0)

摘要:在这里,我自己写一个自己的Makefile的例子,说明一下Makefile是怎么写的。 准备工作:为了使我们的代码更加接近真实的大型程序,我们可以从网络上下载一些写好的源代码。我所使用的是 “Unix Network Programming” 这本书中的源代码。代码下载地址为:www.unpbook.com,下载的文件为unpv13e.tar.gz。使用命令 tar –zxvf unpv13e.... 阅读全文

posted @ 2011-04-14 22:17 天地玄黄 阅读(2969) 评论(0) 推荐(0)

摘要:本文摘抄自“跟我一起写Makefile ”,只是原文中我自己感觉比较精要的一部分,并且只针对C语言,使用GCC编译器。 原文请看这里:http://wiki.ubuntu.org.cn/%E8%B7%9F%E6%88%91%E4%B8%80%E8%B5%B7%E5%86%99Makefile 写完之后才发现基本上都是一些比较枯燥的规则,看看一、二、八三个部分就可以了。当作参考工具吧,什么时候用到... 阅读全文

posted @ 2011-04-14 17:02 天地玄黄 阅读(13528) 评论(0) 推荐(1)

摘要:1、在Linux终端运行命令的时候,在命令末尾加上 & 符号,就可以让程序在后台运行 root@Ubuntu$ ./tcpserv01 &2、如果程序正在前台运行,可以使用 Ctrl+z 选项把程序暂停,然后用 bg %[number] 命令把这个程序放到后台运行cat@Ubuntu:~/unp/unpv13e/tcpcliserv$ ./tcpserv01^Z[1]+ Stopped ./tcp... 阅读全文

posted @ 2011-04-11 16:22 天地玄黄 阅读(43083) 评论(0) 推荐(2)

摘要:这里简要介绍一下多个Client 同时连接Server 时的处理方法: 1、Server 端调用socket(), bind(), listen()函数建立起自己的socket,并且调用accept()函数等待接收来自Client 的信息。此时的accept() 函数处于blocked 状态。 · socket() 函数的作用是建造一个可以使用的网络连接的基础工具。就像我们想要到电话,就需要有一... 阅读全文

posted @ 2011-04-11 10:45 天地玄黄 阅读(570) 评论(0) 推荐(0)

摘要:本文简要介绍一下在Unix系统中的一些概念,这是Advanced Programming in Unix Enviroment 这本书的第一章的内容 Files 1、在Unix中创建一个新directory的时候,会自动创建两个filenames,即.(called dot) and ..(called dot-dot)。 2、每一个file都有一个File Descriptor。File descriptors are normally small non-negative integers that the kernel uses to identify the files being . 阅读全文

posted @ 2011-04-09 16:57 天地玄黄 阅读(373) 评论(0) 推荐(0)

摘要:原文网址:http://ordinarysky.cn/?p=492 编译源代码 1、从官网下载源代码www.apuebook.com 2、解压 3、默认解压后的源代码名称为:apue.2e,里面包含了所有的代码 4、修改目录,我的系统是ubuntu10.10,修改apue.2e下的Make.defines.linux WKDIR=/home/sdoning/apue/apue.2e(主要是该路径) 5、在apue.2e目录下运行make命令 6、错误与解决 gcc -DLINUX -ansi -I/home/sdoning/apue/apue.2e/include -Wall -D_GNU_S 阅读全文

posted @ 2011-04-09 15:51 天地玄黄 阅读(1876) 评论(2) 推荐(0)

摘要:最里面是Unix内核,在它之上是Unix的系统调用,各种库文件是建立再系统调用之上的,可以由用户程序(application)调用,Shell是一个比较特殊的应用程序(application),它提供了运行其他用户程序的接口。用户程序(application)可以在Shell上运行,可以调用Library运行,也可以直接调用system calls 运行。 阅读全文

posted @ 2011-04-09 14:42 天地玄黄 阅读(3324) 评论(1) 推荐(1)

摘要:在Linux汇编中(NASM),INT指令其实是INTerrupt(中断)的意思(这种中断又叫做software interrupt)。它也就是起了这么一个名字,却并没有什么真正被中断了。 在x86体系结构中,内存中的 0~1024byte 中存放了256个entries,每一个 entry 都有4byte的大小。这是Linux的 interrupt vector table。虽然Linux的版... 阅读全文

posted @ 2011-04-09 14:32 天地玄黄 阅读(4776) 评论(0) 推荐(0)

摘要:When finished the bood “Assembly Language Step by Step”, what to do next? · Study Linux. · Study assembly language. · Write code. · Write more code. What books should I learn? · Ubuntu 8.10 Linux Bible by William von Hagen (Wiley, 2009) · Beginning Linux Programming, Fo 阅读全文

posted @ 2011-04-09 09:43 天地玄黄 阅读(389) 评论(0) 推荐(0)

摘要:Linux允许同一个文件可以有好几个不同的名字,而它们共享一个数据。一个文件发生改变,其他的文件也都会发生改变。这就是Hard Link。 用命令行创建一个链接默认即为硬链接。命令如下: ln {source} {link} 下面是一个例子: ln foo bar即为foo这个文件创建一个硬链接,新名字叫做bar。使用命令查看它们的编号一样:ls -i fools -i bar 硬链接也有一些缺... 阅读全文

posted @ 2011-04-07 14:54 天地玄黄 阅读(2357) 评论(0) 推荐(0)

摘要:在Linux下编写C程序的时候,总是看见 #include <sys/types.h> 这样的引用。那么sys/types.h在哪里呢? 一般在/usr/include这个目录下。这是gcc的默认头文件目录 阅读全文

posted @ 2011-04-07 09:36 天地玄黄 阅读(6630) 评论(0) 推荐(0)