Linux下简单管道测试



read.c

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#define W "/tmp/myfifo"
int main()
{
        if(mkfifo(W, O_CREAT | O_EXCL) < 0)
        {
                printf("mkfifo fail!\n");
                exit(1);
        }
        int fd;
        if((fd = open(W,O_RDONLY | O_NONBLOCK ,0))< 0)           //在创建管道的进程中我没法以只写方式打开管道文件,会返回-1.
        {
                printf("open %s fail!\n", W);
                exit(1);
        }
        char buff[1024];
        memset(buff, 0, sizeof(buff));
        int read_num;
        while(1)
        {
                if((read_num = read(fd, buff, 1024))<=0)          //在write.c没有打开管道文件时,read_num为0,当write.c打开管道文件后且没有输入时,read_nu                                       //m为-1;
                        printf("no data yet!\n");
                else{
                        printf("%s\n", buff);
//                      break;
                }
                sleep(1);

        }
        unlink(W);}
write.c
#include <stdlib.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#define FIFO "/tmp/myfifo"
#include <string.h>

int main()
{
        int fd;
        fd=open(FIFO, O_WRONLY | O_NONBLOCK, 0);
        if(fd == -1)
        {
                printf("open %s fail!\n",FIFO);
                exit(1);
        }
        char write_buff[1024];                //可以将数组赋值给指针,但是不能将指针赋值给数组,会报错!
        memset(write_buff, ‘\0‘, sizeof(char)*1024);      
        gets(write_buff);                  //此处用scanf会因为空格而导致输入结束
        int write_num= write(fd,write_buff, 1024 );
}

  

时间: 2024-08-09 02:19:45

Linux下简单管道测试的相关文章

一个linux下简单的纯C++实现Http请求类(GET,POST,上传,下载)

目录 一个linux下简单的纯C++实现Http请求类(GET,POST,上传,下载) Http协议简述 HttpRequest类设计 请求部分 接收部分 关于上传和下载 Cpp实现 关于源码中的Logger 使用示例 一个linux下简单的纯C++实现Http请求类(GET,POST,上传,下载) 最近写了点关于Http上传下载文件相关的,于是今天整理下代码. Http协议简述 HttpRequest类设计 使用示例 Http协议简述 协议:网络协议的简称,网络协议是通信计算机双方必须共同遵从

Linux下简单的socket通信实例

Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Bruce Lee       学习网络编程也一段时间了,刚开始看<UNIX网络编程>的时候,觉得这本厚厚的书好难啊!看到后来,发现并没有想象中的那么难.如果你是新手,建议你看到第二部分结束后,开始着手写代码.不写代码肯定是不行的.看100遍也没有敲一遍实现一遍来的清楚.敲完以后,带着问题去看书,你会

linux下简单抓包分析

有时候会遇到一些问题需要我们来抓包分析,当手头又没有专业的抓包工具的时候,可以用tcpdump来替代一下(一般的发行版都自带这个工具) 比如我们要分析一下eth0接口下跟192.168.7.188 这个目的IP地址22端口的发包情况 tcpdump -i eth0 dst 192.168.7.188 and port 22 tcpdump -i eth0 dst 192.168.7.188 and port 22 tcpdump: verbose output suppressed, use -

Linux下简单基本操作【备查】

Linux下简单基本操作[备查]①解压文件指令 tar zxvf filename (filename文件名)②查看修改文件内容 vi filename i 进入修改模式 修改后保存步骤 esc——shift+: ——wq(保存退出 q直接退出)③文件删除命令rm 命令格式:rm [fir] 文件或目录 参数说明: -f:强制删除 -i:交互模式,在删除前询问用户是否操作 -r:递归删除,常用在目录的删除 如删除/test目录下的file1文件,可以输入以下命令: rm -i /test/fil

Linux下简单的取点阵字模程序

源:Linux下简单的取点阵字模程序 Linux操作系统下进行简单的图形开发,经常会用到取字模的软件,但是Linux并没有像Windows下的小工具可用,我们也并不希望为了取字模而频繁地切换操作系统.(由于是完全由C语言编写,所以不需要任何修改,这个字库同样可以用在嵌入式环境的Windows操作系统下面) 本人结合网上的资料,对这个问题进行了总结,整理了代码,供有需要的朋友使用我参考.转载请注明出处:http://blog.csdn.net/weiwang876253631/article/de

Linux 下 简单客户端服务器通讯模型(TCP)

原文:Linux 下 简单客户端服务器通讯模型(TCP) 服务器端:server.c #include<stdio.h> #include<stdlib.h> #include<errno.h> #include<string.h> #include<sys/socket.h> #include<sys/types.h> #include <stdio.h> #include <unistd.h> #inclu

linux下简单好用的端口映射转发工具rinetd 转

linux下简单好用的工具rinetd,实现端口映射/转发/重定向 官网地址http://www.boutell.com/rinetd 软件下载 wget http://www.boutell.com/rinetd/http/rinetd.tar.gz 解压安装 tar zxvf rinetd.tar.gz make make install 编辑配置 vi /etc/rinetd.conf 0.0.0.0 8080 172.19.94.3 8080 0.0.0.0 2222 192.168.0

Linux下配置及测试PHP

1.拷贝PHP配置文件 cd /usr/local/php/etc cp php.ini /usr/local/php/lib/php.ini 2.修改apache配置文件 vi /usr/local/apache/conf/httpd.conf 添加对php的支持: LoadModule php5_module modules/libphp5.so AddType application/x-httpd-php .php(注意中间有个空格) 3.测试 1)编写一个php文件,如phpinfo.

linux下简单好用的端口映射转发工具rinetd

linux下简单好用的工具rinetd,实现端口映射/转发/重定向官网地址http://www.boutell.com/rinetd 软件下载wget http://www.boutell.com/rinetd/http/rinetd.tar.gz 解压安装tar zxvf rinetd.tar.gzmakemake install[[email protected] rinetd]# make installinstall -m 700 rinetd /usr/sbininstall -m 6