简易聊天程序的编写<2>————————————长标题!
来源:互联网 发布:小黑屋码字软件 编辑:程序博客网 时间:2024/05/22 04:48
/*~~~~~~~~~~~~~~~* litozhangup-r.c*~~~~~~~~~~~~~~~*//* 本程序用于同一个电脑的两个不同的终端之间的通信*/#include<stdio.h>#include<unistd.h>#include<stdlib.h>//open #include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>//write,read,close#include <unistd.h>//fork#include <unistd.h>//memset#include<string.h>int main(void){int zhangtoli,litozhang,writeok,readok;char writebuffer[25] ;char readbuffer[25] ;pid_t pid;// open/* 打开由zhangtoli.c 创建的管道 */if(( zhangtoli = open("/root/zhangtoli",O_RDWR))<0 ){printf("open zhangtoli error!\n");} else{printf("open zhangtoli success!\n");}if(( litozhang = open("/root/litozhang",O_RDWR))<0 ){printf("open litozhang error!\n");} else{printf("open litozhang success!\n");}// comu/* 通过fork 创建两个同时进行的进程,这样就可以完成,在同一个shell中同时进行读和写的操作 */pid = fork();if(pid > 0){while(1){/* 此处打印\n 是为了每次在开始循环之前要清理缓存,把打印输出,这样就可以实时响应了 */printf("\n");memset(writebuffer,0,25);printf("litozhang:");scanf("%s",writebuffer);//writewriteok = write(litozhang,writebuffer,25);/*if(writeok < 0){printf("write error\n");}else{printf("write success!\n");}*/sleep(0.1);//printf("in faps:");}}//readelse if( 0 == pid ){while(1){/* 此处打印\n 是为了每次在开始循环之前要清理缓存,把打印输出,这样就可以实时响应了 */printf("\n");memset(readbuffer,0,25);readok = read(zhangtoli,readbuffer,25);/*if(readok < 0){printf("read error\n");}else{printf("read success!\n");}*///outputprintf("zhangtoli: %s\n ",readbuffer);sleep(0.1);//printf("in chps:");}}else {printf("error in fork()!\n");}return 0;}
编程思路:通过利用mkfifo创建两个管道文件分别是zhangtoli和litozhang,然后在一个客户端,比如说lizhangtoup-r端 我们通过fork()创建子进程,然后在父进程中不断的写入litozhang管道,而在子进程中不断的读取zhangtoli的管道然后打印。
编程中遇到的问题:
1. 这种创建管道是要拥有一定的权限的,很可能不能成功,我在ubuntu 11.04上没有做出来,但是在redhat 6.0 上就完成了。
2. 凡是在遇到需要实时打印时,需要注意打印的缓存的问题,养成良好的习惯,输出完了之后一定要加上'\n',这样就清理了缓存。
3. 在读取和清空字节的时候,我们要注意长度的问题,避免自己要读取的长度小于输入的长度,或者清空的长度小于原有读取的长度,一个简单的做法就是把所有的长度都设为总长,这样就减小了出错的可能!
- 简易聊天程序的编写<2>————————————长标题!
- 简易聊天程序的编写<1>————————————长标题!
- Winsock控件用法示例—简易聊天程序之服务端程序设计
- 简易聊天——消息队列实现进程间通信
- 【2013.3.2】标题不长。——Chain Of Responsibility
- 编写界面的最佳实践——聊天界面
- 编写界面的最佳实践——聊天界面
- 即时内部聊天程序——聊天界面
- 正则的使用——编写一个简易的计算器
- 计算机网络课程设计——基于Windows socket编程的简易聊天机器人
- Java通信——聊天程序
- 即时内部聊天程序——服务器
- 即时内部聊天程序——MessageIO
- 即时内部聊天程序——注册
- Socket聊天程序——初始设计
- 黑马程序员—聊天小程序
- 微信小程序例子——修改小程序的标题
- JAVA网络编程——简单的聊天程序
- iPhone 中使用NSLocalizedString实现国际化
- vs2008试用版升级
- 正则表达式 规则
- flash动画在不同浏览器中播放
- 触动心灵的十句箴言
- 简易聊天程序的编写<2>————————————长标题!
- linux添加用户与修改密码
- MIPS 地址空间
- Linux Crontab 定时任务 命令详解
- 新闻系统结构功能图
- 获取SQL数据库中某个表中的所有字段名称的通用方法
- html编辑器fckeditor的使用
- 网络编程学习十步曲
- ARM平台上蓝牙协议栈Bluez的移植使用和配置