2011年11月27日

摘要: 多线程的好处: 线程是一种非常“节俭”的多任务操作方式。在linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来 维护它的代码段、数据段和堆栈段,这是一种“昂贵”的多任务工作方式。 线程间方便通信。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过进程间通信的方式进行,这种方式不仅费时 ,而且很不方便。由于同一进程下的线程之间共享数据空间,一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。 多线程使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。 改善程序结构。一个既长又复杂的进程可以考虑分为多个 阅读全文

posted @ 2011-11-27 10:53 SomethingReview 阅读(133) 评论(0) 推荐(0) 编辑

摘要: linux文件编程可以使用两种方法: linux系统调用,依赖于linux操作系统 int create(const char* filename, mode_t mode) 所有打开的文件都对应一个文件描述符(非负整数,由系统分配),范围是0 - OPEN_MAX。 int open(const char* pathname, int flags) int open(const char* pathname, int flags, mode_t mode) int close(int fd) int read(int fd, const void* buf, size_t length).. 阅读全文

posted @ 2011-11-27 10:53 SomethingReview 阅读(190) 评论(0) 推荐(0) 编辑

摘要: TCP提供客户和服务器的连接,跨越连接交换数据,然后终止连接。 TCP提供可靠性。TCP向另一端发送数据要求对方返回一个确认,如果确认没有收到,TCP将自动重传并等待更长的时间。数次重传失败后TCP才放弃。 TCP通过给所发送的数据的每一个字节关联一个序列号进行排序。如果发送的分节非顺序到达,接收方的TCP会根据它们的序列号重新排序,再把结果数据传递给应用进程。如果TCP接收到重复的数据,它可以判断数据是重复的,从而把它丢弃掉。 TCP提供流量控制。TCP总是告诉对方它能够接收多少字节的数据,这称为通告窗口。 TCP的连接是全双工的。因此TCP必须跟踪每个方向数据流的状态信息,如序列号和通告. 阅读全文

posted @ 2011-11-27 10:51 SomethingReview 阅读(140) 评论(0) 推荐(0) 编辑

摘要: 套接字地址结构:从进程到内核的传递,从内核到进程的传递 网际套接口地址结构 通用套接字地址结构 我们总是通过指针传递这些结构,而且将结构的大小作为另外一个参数来传递。当套接口函数填写结构时,结构长度也作为指针传递,这样它的值可以被函数更新,我们把这样的参数称为值-结果参数。 TCP套接口为应用程序提供了一个字节流,它们没有记录标记,函数read的返回值可以比我们要求的数量少,但并不表示错误。 网络协议在处理多字节整数时使用大端字节序。 阅读全文

posted @ 2011-11-27 10:51 SomethingReview 阅读(98) 评论(0) 推荐(0) 编辑

摘要: connect函数将激发TCP的三路握手过程,而且仅在连接建立成功或出错时才返回。CLOSED状态到SYN_SENT状态,若成功则再转移到ESTABLISHED状态。 对于bind函数,如果TCP服务器没有把IP地址捆绑到它的套接字接口,内核就把客户发送的SYN的宿IP地址作为服务器的源IP地址。如果选择指定IP地址为通配地址,那么内核将等到套接口已连接(TCP)或已在套接口上发出数据报(UDP)时才选择一个本地IP地址。 如果让内核来为套接字选择一个临时端口号,那么必须注意,bind并不返回所选的值,bind的第二个参数有const限定词,必须调用getsockname来返回协议地址。 .. 阅读全文

posted @ 2011-11-27 10:51 SomethingReview 阅读(193) 评论(0) 推荐(0) 编辑

摘要: TCP是无记录边界的字节流协议。 TCP本身不提供记录结束标记,应用程序需要确定记录边界的话,必须自己去实现。FTP和SMTP使用\r\n构成序列终止记录。Sun RPC和DNS使用TCP时,在每个记录的前面放一个二进制计数值,由它给出记录的长度。 错误处理:包裹函数 每当在一个Unix函数发生错误时,全局变量errno将被置成一个指示错误类型的正数,函数本身则通常返回-1。err_sys检查errno变量并输出其相应的出错消息。如果函数不返回错误,errno的值就没有定义。值0不表示任何错误。 把errno值存于全局变量不适合共享所有全局变量的多线程。 snprintf检查目标缓冲区是否溢. 阅读全文

posted @ 2011-11-27 10:50 SomethingReview 阅读(113) 评论(0) 推荐(0) 编辑