2011年11月27日

摘要: 为什么要进程通信?数据传输、资源共享、通知事件、进程控制。 IPC由一下三部分发展而来:UNIX进程间通信、基于System V进程间通信、POSIX进程间通信。 最初开发POSIX是为了提高UNIX环境下应用程序的可移植性。DEC的OpenVMS和Windows都支持POSIX。 进程通信的方式:管道和有名管道、信号、消息队列、共享内存、信号量、套接字。 管道是单向的,先进先出的,把一个进程的输出和一个进程的输入连接在一起,一个进程(写进程)在管道的尾部写入数据,另一个进程(读进程)从管道的头部读取数据。数据被一个进程读出后,将被从管道中删除。进程试图读空管道和向满的管道写数据都将阻塞。 . 阅读全文

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

摘要: 进程是一个具有一定独立功能的程序的一次运行活动。 程序是静态的代码,进程是动态的。 进程特点:动态性(相对于程序来说)、并发性(多个进程同时执行)、独立性(进程之间互不干扰)、异步性(进程执行有先后顺序) 进程状态:就绪(进程刚被创建还没有分到CPU时间片,进程时间片用完)、阻塞(IO请求未完成)、执行(就绪态经过进程调度进入执行态) 进程ID(PID)是标识进程的唯一数字。 父进程ID(PPID) 启动进程的用户的ID(UID) 进程互斥:有若干进程都要使用某一共享资源时,任何时刻最多允许一个进程使用,其他要使用该资源的进程必须等待,直到占用该资源者释放了该资源为止。 临界资源 临界区 进. 阅读全文

posted @ 2011-11-27 10:53 SomethingReview 阅读(195) 评论(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 阅读(203) 评论(0) 推荐(0)

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

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

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

posted @ 2011-11-27 10:51 SomethingReview 阅读(146) 评论(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 阅读(117) 评论(0) 推荐(0)