Linux 系统下实现多线程客户/服务器
来源:网络
作者:本站整理
时间:2007-08-22
Tag:
点击:
第五个函数:
void pthread_exit(void *status);phpma.com;
该函数终止线程。如果线程未脱离,其线程ID和退出状态将一直保留到调用进程中的某个其他线程调用pthread_join函数。指针status不能指向局部于调用线程的对象,因为线程终止时这些对象也消失。有两种其他方法可使线程终止:
1. 启动线程的函数(pthread_creat的第3个参数)返回。既然该函数必须说明为返回一个void指针,该返回值便是线程的终止状态。
2. 如果进程的main函数返回或者任何线程调用了exit,进程将终止,线程将随之终止。
以下给出一个使用线程的TCP回射客户/服务器的例子,完成的功能是客户端使用线程给服务器发从标准输入得到的字符,并在主线程中将从服务器端返回的字符显示到标准输出,服务器端将客户端发来的数据原样返回给客户端,每一个客户在服务器上对应一个线程。利用该程序框架,通过扩展客户端和服务器端的处理功能,可以完成多种基于多线程的客户机/服务器程序。该程序在RedHat 6.0和TurboLinux4.02下调试通过。 共用头文件如下:(head.h)
phpma.com;
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAXLINE 1024
#define SERV_PORT 8000
#define LISTENQ 1024
static int sockfd;
static FILE *fp;
公用函数如下(common.c):
/* 从一个描述字读文本行 */
ssize_t readline(int fd, void *vptr, size_t maxlen)
{
ssize_t n, rc;
char c, *ptr;
for (n=1; n0)
{
if ( (nwritten=write (fd, ptr, nleft ) )〈=0 )
{
if (errno==EINTR )
nwritten=0;
else
return (-1);
}
nleft-=nwritten;
ptr++=nwritten;
}
客户端主程序如下:(client.c)
#include “head.h“;
#include “common.c“;
/* 在str_cli中定义的要被线程执行的函数 */
void *copyto (void *arg)
{
char sendline[MAXLINE];
while (fgets (sendline,MAXLINE,fp) !=NULL )
writen(sockfd,sendline,strlen(sendline));
shutdown(sockfd,SHUT_WR);
return(NULL);
}
void str_cli(FILE *fp_arg, int sockfd_arg)
{
char recvline[MAXLINE];
pthread_t tid;
sockfd=sockfd_arg;
fp=fp_arg;
pthread_creat(&tid, NULL, copyto, NULL);
while (readline (sockfd,recvline,MAXLINE) 〉0)
0
最新评论共有 0 位网友发表了评论
查看所有评论
发表评论
热点关注
- Linux配置web服务器全攻略
- Linux系统下Apache服务器
- Apache日志分析工具--AWSt
- win中整合配置PHP和MySQL
- Apache中httpd.conf文件配
- Linux嵌入式开发环境的简
- Linux网络基本网络配置方
- Linux系统下PHP服务器安全
- Apache+Tomcat负载平衡设
- Apache伪静态html(URL Rew
- linux系统下常用的shell命
- Linux下查看某目录或指定
- 配置Apache服务器并且设置
- Linux系统Apache用户授权
- linux系统下常用的shell命
- Apache指南: .htaccess文
- Apache配置httpd.conf设置
- Linux 系统下实现多线程客
- 增加Apache最大连接数的方
- Apache服务器全攻略
相关文章


