- 浏览: 271810 次
- 性别:
- 来自: 上海
最新评论
-
AndMacLinuXp:
试了下,不错!
printk内核调试 -
klose:
我引用你的文章,并做了简单的分析:这里贴出url:http:/ ...
linux系统调用fork, vfork, clone -
klose:
你上面提到的问题:free的问题。首先你可能疏忽了,stack ...
linux系统调用fork, vfork, clone -
qwe_rt:
HI ,非常nice的文章,在阅读过程中,我发现我的ubunt ...
linux手动添加开机启动的服务 -
suifeng:
谢谢分享, 受用中.
shell编程分支,循环
文章列表
虽然UDP不保证传输的可靠性,但UDP无链接性相对于TCP仍然有其它方面的优势。比如之前的聊天程序,基于TCP实现的聊天程序在群聊方面就很麻烦,因为链接总是双方的通信,很难加入第3方(或许应该说更本就不能加入)。其次UDP ...
之前曾经提到过这个名词,套接口低潮限度。(以下都只针对TCP)
接收低潮限度(SO_RCVLOWAT):之前我们曾经使用过select函数,如果将套接口可读,也就是说套接口中有数据可以读出做为select的一个阻塞条件,则什么叫做有数据可读?其实就是指套接口中数据大小大于低潮限度。默认的低潮大小为1,也就是只要有数据到达就表示可读。
发送低潮限度(SO_SNDLOWAT):和上面一样,就是当你想对某个套接口执行write时候,如果空闲大小大于等于低潮限度就表示可写,也就是会从select函数返回。比如说下面的程序
#include "/programe/net/hea ...
每个套接口都会有很多选项,举个例子比如接受缓冲区的大小,如何获取这些选项和以及设置这些选项在某些时候则显得比较重要(虽然很多时候默认的就可以了)。
函数说明
#include "sys/socket.h"
int getsockopt(int sockfd, int level, int optname, void * optval, socklen_t * optlen);
int setsockopt(int sockfd, int level, int optname, const void * optval,
socklen_t * optlen); ...
poll函数和select一样都是用于I/O复用,他们提供的功能也一样,只不过是poll想对于流设备,提供一些额外的功能。在SVR3时候只局限于使用流设备,但这个SVR4以后,poll可以用于各种设备。
#include "poll.h"
int poll(struct polif ...
打开的套接口总是需要调用close来关闭,这样就能够回收资源。虽然大部分发行版本的linux,至少在我的fedora上面,不执行close,当进程死亡的时候打开的套接口仍然会被回收,但依赖于这点回收的话具有很大的不确定因素,因为 ...
之前代码仍然存在一些比较重要的问题,当我们客户端进程阻塞于从标准输入获取数据的时候n = read(connfd, buf, 100)。 如果出现了意外,比如说我们手动kill掉服务器对客户端的服务进程,此时服务器就会向客户端接口发送fin ...
之前程序存在着一个不确定性的因素。之前服务器代码中。子进程在死亡后,会向父进程发送SIGCHLD信号。这个信号会被父进程捕获,然后父进程调用wait函数对死亡子进程处理防止其变成僵尸进程(僵尸进程会一直占用内存资源在它被回收之前。如果父进程在死亡之前没有回收僵尸进程,那么在unix下,僵尸进程会被init进程托管并回收。无主进程都会被托管给init)。
执行之前的代码,然后执行ps -aux可以看到不会有服务器派生的子进程成为僵死进程,但如果将客户端代码改成
[root@liumengli net]# cat echo_client2.c
#include "/progra ...
该代码大致过程,客户端连接服务器,服务器接收链接后,将创建子进程。客户端从终端输入字符,字符会被送到服务器的子进程,子进程得到字符后,再将字符回馈给客户端,客户端将其显示出来。代码比较长因为加入了信号对死亡子进程的处理。
[root@liumengli net]# cat echo_server.c
#include "/programe/net/head.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include &quo ...
getsockname与getpeername是返回套接口关联的本地协议地址和远程协议地址。
int getsockname(int sockfd, struct sockaddr * localaddr, socken_t * addrlen);
int getpeername(int sockfd, struct sockaddr * peeraddr, socken_t * addrlen);
返回0表示成功,返回1表示出错
参数sockfd表示你要获取的套接口的描述字。
localaddr返回本地协议地址描述结构, peeraddr返回远程协议地址描述结构,addrlen ...
在服务器端:
1.首先是调用socket函数创建一个socket,此时返回该socket描述字(前面介绍过)。此时的服务器socket处于closed状态。
2.此时socket被建立,但是socket内部除了协议外,IP地址和端口号均由系统指定。因此接下来将会自己声明一个网络套接字(该套接字结构取决于你要使用什么协议,常用的IPV4协议,结构为struct sockaddr_in),该结构在使用之前一般先使用bzero函数清0(你也可以使用memset等其它函数,清0即可)。然后给该结构指定协议族,IP地址(一个机器有几个IP地址,比如127.0.0.1或者内网地址,可能还有外网地址 ...
对于编程者来说,我们所见到的网络通信实际上是2个socket之间的通信。所以双方第一步会调用socket创建socket。此时系统内核会创建一个socket描述结构并返回该描述结构的描述字。对于服务器来说,系统自己创造的socket并不适合, ...
文章接前面的例子程序。首先介绍套接口地址结构:
struct sockaddr_in,定义在netinet/in.h中,一般是在/usr/include 下
struct in_addr {
in_addr_t s_addr;/*32字节的ipv4地址*/
}
struct sockaddr_in {
uint8_t sin_len;
sa_family_y sin_family;
...
[root@liumengli net]# cat client1.c
#include "/programe/net/head.h"
#include "stdio.h"
#include "stdlib.h"
int main(int argc, char ** argv) {
int sockfd, n;
int my;
char buf[100];
struct sockaddr_in servaddr;
if((sockfd = ...
Node {Node * lchild;
Node * rchild;
Data_Type data;
};
Temp {Node * node;
int count;
};
void fun(Node * root) {
Temp p = malloc;
p->node = root;
p->count = 0;
while(p && s is not empty) {
if(p->node) {
p->count++;
push(p, s);
p ...
- 2009-11-02 11:45
- 浏览 1986
- 评论(0)
CPU如何来计算除法 一
- 博客分类:
- 硬件
问题:计算机如何来计算除法的?
第一步:分析除法
现在做一个简单的除法 56/7,大部分人会很快一闪"七八五十六",很快能算出结果是8.这是九九乘法表作怪,如果我么没有背诵过乘法表,我们如何来计算这个简单 ...
- 2009-03-25 16:06
- 浏览 17203
- 评论(0)