本帖最后由 guo__qiu 于 2012-04-06 20:31:03 编辑

真的不想粘代码的,可是怕说不清楚,所以请大家耐心瞅瞅。多谢!

在同一台电脑上打开两个终端。想实现服务器端创建一个管道,和两个新的线程,一个用来读管道,一个用来写管道 客户端创建一个管道和两个线程,一个用来读,一个用来写

程序如下:

#include

#include

#include

#include

#include

#include

#include

#define FIFOSER "/homework/pipe/fifoser"  //管道的路径

#define FIFOUSR "/homework/pipe/fifousr"

void *serread()                       //服务器读端

{

int fd;

char buffer[100];

fd=open(FIFOUSR,O_RDONLY);        //只读方式打开客户端进行读出

while(1)

{

sleep(1);

memset(buffer,'',sizeof(buffer));

read(fd,buffer,100);

printf("serread is :%s",buffer);

}

}

void *serwrite()

{

int fd;

char buffer[100];

memset(buffer,'',sizeof(buffer));

printf("wait for ser write:n");

scanf("%s",buffer);

fd=open(FIFOSER,O_WRONLY);           //打开服务器自身端进行写入

while(buffer[0]!='Q')                   //知道输入Q退出

{

sleep(1);

write(fd,buffer,sizeof(buffer));

memset(buffer,'',sizeof(buffer));

printf("wait for ser write:n");

scanf("%s",buffer);

}

close(fd);

exit(EXIT_SUCCESS);

}

int main(int argc,char * argv[])

{

int fd;

pthread_t read_t,write_t;

unlink(FIFOSER);

mkfifo(FIFOSER,0744);

mkfifo(FIFOUSR,0744);

pthread_create(& write_t,NULL,(void *)*serwrite,NULL);//创建写线程

pthread_create(& read_t,NULL,(void *)*serread,NULL);//创建读线程

pthread_join(write_t,NULL);

pthread_join(read_t,NULL);

return 1;

}

客户端和服务端基本相同,请耐心看看,感谢ing

代码如下:

#include

#include

#include

#include

#include

#include

#include

#define FIFOSER "/homework/pipe/fifoser"

#define FIFOUSR "/homework/pipe/fifousr"

void *usrread()

{

int fd;

char buffer[100];

fd=open(FIFOSER,O_RDONLY);

while(1)

{

sleep(1);

memset(buffer,'',sizeof(buffer));

read(fd,buffer,100);

printf("usrread is :%s",buffer);

}

}

void *usrwrite()

{

int fd;

char buffer[100];

memset(buffer,'',sizeof(buffer));

printf("wait for usr write:n");

scanf("%s",buffer);

fd=open(FIFOUSR,O_WRONLY);

while(buffer[0]!='Q')

{

sleep(1);

write(fd,buffer,sizeof(buffer));

memset(buffer,'',sizeof(buffer));

printf("wait for usr write:n");

scanf("%s",buffer);

}

close(fd);

exit(EXIT_SUCCESS);

}

int main(int argc,char * argv[])

{

int fd;

pthread_t read_t,write_t;

unlink(FIFOUSR);

mkfifo(FIFOUSR,0744);

mkfifo(FIFOSER,0744);

pthread_create(&write_t,NULL,usrwrite,NULL);

pthread_create(&read_t,NULL,usrread,NULL);

pthread_join(write_t,NULL);

pthread_join(read_t,NULL);

}

以上方法为什么不能实现qq聊天的功能呢?有两个管道,一个由服务器创建,一个由客户端创建,问题出在哪里?

|

自己调试下吧!调试过了,就发一些调试结果来看一下。

|

哥,先学点计算机网络知识再看你现在的问题就会觉得很好笑

|

看到你的 代码

就开始疼了

我很无语

linux 管道 线程,linux中通过管道实现qq的聊天功能,用到了线程相关推荐

  1. linux mkfifo 命令_linux 中有名管道mkfifo

    1创建管道并且发送 fifo #include //文件操作函数头文件 #include #include #include #include #include #include int main(i ...

  2. 鸟哥linux+韩顺平linux视频教程学习小结

    linux的特点 优点: 1.免费的/开源的系统 2.支持多线程/多用户的系统 3.安全性好 4.对内存和文件管理优越 linux体积最少只需要内存4M,由于小所以可以做嵌入式开发 缺点: 操作相对困 ...

  3. 从源码角度解析线程池中顶层接口和抽象类

    摘要:我们就来看看线程池中那些非常重要的接口和抽象类,深度分析下线程池中是如何将抽象这一思想运用的淋漓尽致的. 本文分享自华为云社区<[高并发]深度解析线程池中那些重要的顶层接口和抽象类> ...

  4. 线程池中的七大参数(三)

    线程池中的七大参数如下: (1)corePoolSize:线程池中的常驻核心线程数. (2)maximumPoolSize:线程池能够容纳同时执行的最大线程数,此值大于等于1. (3)keepAliv ...

  5. postgres 支持的线程数_线程池被打满了怎么处理呢,你是否真的了解线程池?

    0.前言 线程池,顾名思义就是线程的池子,在每次需要取线程去执行任务的时候,没必要每次都创建新线程执行,线程池就是起着维护线程的作用,当有任务的时候就取出一个线程执行,如果任务执行完成则把线程放回到池 ...

  6. 如何实现消息功能_小程序中如何实现即时通信聊天功能

    微信小程序是现在应用比较广的流量平台之一,当流量越来越多时,就需要在小程序中接入即时通信聊天功能来实现更好的流量变现转化,那么小程序中如何接入实现即时通信聊天功能呢? 什么是即时通信聊天功能即时通信聊 ...

  7. linux有名管道大小,Linux中的pipe与named pipe(FIFO),即管道和命名管道

    Linux 管道对阻塞之前一次写操作的大小有限制. 专门为每个管道所使用的内核级缓冲区确切为 4096 字节. 除非阅读器清空管道,否则一次超过 4K 的写操作将被阻塞. 实际上这算不上什么限制,因为 ...

  8. linux 同一进程内通信,linux中,管道能够在同一进程中进行通信吗?

    linux中,管道能够在同一进程中进行通信吗? 答案是否定的. 管道是用于不同进程之间通信,不能再同一进程中进行通信. 同一进程中,直接进行参数传递就行了,不设计通信问题. 不同进程之间才需要通信,通 ...

  9. Linux中的管道与重定向

    前言: 这篇博文主要参考了鸟哥的<鸟哥的Linux私房菜>和杨鹏(NetSnake)的<Linux服务器架设>这两本书,以及在网络上查阅的资料.此博文作为我阅读<鸟哥的L ...

  10. Linux内核中无名管道pipe和有名管道fifo的分析

    1.管道(pipe) 管道是进程间通信的主要手段之一.一个管道实际上就是个只存在于内存中的文件,对这个文件的操作要通过两个已经打开文件进行,它们分别代表管道的两端.管道是一种特殊的文件,它不属于某一种 ...

最新文章

  1. linux比较两个文件命令cmp,Linux系统中使用cmp和comm命令来比较两个文件
  2. 操作系统之进程管理:13、吸烟者问题
  3. 腾讯阿里都在用!机器学习最热研究方向入门,附学习路线图
  4. STM32-OLED显示
  5. 通过增强的 Windows Forms 支持为 .NET 应用程序精心制作华丽的 UI
  6. android 8.1闪退,宁波市民卡app在Android 8.1闪退_宁波民生e点通
  7. Python中的计数(词频)
  8. 数据挖掘实战—财政收入影响因素分析及预测
  9. Android webview数据获取 webview抓取
  10. 牛学长iTunes备份密码移除工具
  11. java try 性能损耗_Java上的try catch并不影响性能(转)
  12. 计算机基础应用本终结性考试,计算机应用基础
  13. 带遮挡效果的轮廓线(描边)在3D实时渲染中的一种实现
  14. 武器目标分配问题研究进展: 模型、算法与应用
  15. excel--转化IP地址为十进制
  16. 针对某个WEB渗透的整套修复建议(更新部分)
  17. 2.ECMAScript6详解
  18. imo班聊未读消息提示优化
  19. RTSP协议中英文对照(RFC2326,RFC7826)
  20. sql注入学习笔记(4)--sqlmap注入心得

热门文章

  1. 标准输入输出详解(C++)
  2. 《WebGL编程指南》学习笔记——1.WebGL概述
  3. 鸡蛋掉落----经典dp(动态规划)
  4. android 双清菜单,什么是双清?如何双清手机?安卓手机双清教程
  5. html如何加入浮动客服,css如何实现客服悬浮效果
  6. linux禁止root用户远程登录,linux禁止root用户远程登录
  7. android studio 第一个画面设定,2.3 使用Android Studio 简单设计UI界面
  8. java1.8 64位,jdk 1.8 64位 下载_jdk 1.8 64位 官方版_魅蓝下载
  9. linux下二进制包、源代码包、rpm包
  10. rocketmq问题记录