功能:

父进程创建一个子进程父进程负责读用户终端输入,并写入管道

子进程从管道接收字符流写入另一个文件

代码:

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <fcntl.h>
#define MAX 100 int main()
{
int n,c = ;
int fd[];
char ch;
pid_t pid;
char buffer[MAX+]; if(pipe(fd) < ) { //创建管道
puts("管道创建失败");
exit();
}
pid = fork(); //创建子进程
if(pid < )
puts("子进程创建失败");
else if(pid > ) { //父
close(fd[]); //关闭读端口
puts("please input what you want to say:");
while((ch = getchar()) != '\n') { //读字符串(可空格)到buffer
if(c == MAX) { puts("buffer is fulled!"); break; }
buffer[c++] = ch;
}
buffer[c] = '\0';
write(fd[], buffer, c); //写入管道
}
else { //子
close(fd[]); //关闭写端口
n = read(fd[], buffer, MAX); //从管道中读出数据,n为读出的字符个数
printf("What you input is: [/home/whatbeg/hq/oshomework.txt]\n");
int dft_fd = open("/home/whatbeg/hq/oshomework.txt", O_RDWR | O_CREAT, ); //打开文件,如果没有,创建一个对三方都可读可写可执行的txt文件
if(dft_fd == -) { //打开失败
puts("打开文件失败!\n");
exit();
}
write(STDOUT_FILENO, buffer, n); //写到终端,方便观测
write(dft_fd, buffer, n); //写到文件
close(dft_fd); //关闭文件
}
return ;
} // 'gets' is deprecated
//警告: the 'gets' function is dangerous and should not be used.

运行结果如下:

Linux下管道编程的更多相关文章

  1. linux 下 poll 编程

    poll 与 select 很类似,都是对描述符进行遍历,查看是否有描述符就绪.如果有就返回就绪文件描述符的个数将.poll 函数如下: #include <poll.h> int pol ...

  2. Linux下Socket编程的端口问题( Bind error: Address already in use )

    Linux下Socket编程的端口问题( Bind error: Address already in use ) 在进行linux网络编程时,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误 ...

  3. Linux 下IOport编程訪问

    曾经写的一篇笔记.偶尔翻出来了,放在这里做个纪念 Linux 下IOport编程訪问 这里记录的方法是在用户态訪问IOport,不涉及驱动程序的编写. 首先要包括头文件 /usr/include/as ...

  4. linux下socket编程实例

    linux下socket编程实例一.基本socket函数Linux系统是通过提供套接字(socket)来进行网络编程的.网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符.s ...

  5. Linux 下shell 编程学习脚手架

    linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...

  6. linux下libnet编程 亲自测试可用

    linux下libnet编程 亲自测试可用 亲自测试  如果build包的时候 只要把类型改了 就能改成相应的协议. 0x0800 ip 0x0806 arp 0x86DD    IPv6 0x86e ...

  7. Linux下socket编程基本知识

    本文档主要讲解了Linux下socket编程的一些基本知识,主要包括套接字和字节序的概念,以及一些常用的结构体和函数. 本文是在网易云课堂学习过程中的记录,这个老师讲得很不错,推荐大家围观. Linu ...

  8. linux 下 epoll 编程

    转载自 Linux epoll模型 ,这篇文章讲的非常详细! 定义: epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显 ...

  9. Linux下的编程实战【转】

    一篇比较不错的文章, 降到了 makefile make , gcc编译器,GDB调试器, Linux文件系统,Linux文件API,.C语言库函数(C库函数的文件操作实际上是独立于具体的操作系统平台 ...

随机推荐

  1. Spring Boot中静态资源(JS, 图片)等应该放在什么位置

    Spring Boot的静态资源,比如图片应该放在什么位置呢, 如果你放在传统WEB共的类似地方, 比如webapp或者WEB-INF下,你会得到一张示意文件未找到的破碎图片.那应该放哪里呢? 百度一 ...

  2. 51nod 算法马拉松18 A 染色问题

    染色问题 基准时间限制:1 秒 空间限制:10240 KB 分值: 40 一个n(3<=n<=100)个点的完全图,现在给出n,要求将每条边都染上一种颜色k(1<=k<=n), ...

  3. IT基础架构规划方案之实际网络设计案例

    根据某集团总部新办公大楼.厂房和分支机构(店面)的情况,以及IT部门对网络节点数.网络应用和分支机构(店面)的初步规划,对企业的总体网络拓扑结构进行设计,如下图. 设备选型和部署参考: 类型 设备选型 ...

  4. spring整合hibernate

    spring整合hibernate包括三部分:hibernate的配置.hibernate核心对象交给spring管理.事务由AOP控制 好处: 由java代码进行配置,摆脱硬编码,连接数据库等信息更 ...

  5. jquery选项卡

    用jquery实现选项卡功能 css部分: html部分: 记得一定要引入jquery文件 jquery部分:

  6. JS事件-让网页交互

    什么是事件 JavaScript 创建动态页面.事件是可以被 JavaScript 侦测到的行为. 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件. 比如说,当用户单击 ...

  7. Thrift-java实例

    ➠更多技术干货请戳:听云博客 Thrift实例1 功能描述:客户端与服务器端分别是两个应用,先启动服务器端,再启动客户端,实现执行客户端运行服务器端的加法方法. 源码截图(源码在附件中): 客户端: ...

  8. iOS开发之功能模块--根据需求开发横向的子弹盒View

    这个需求是本人工作开发中后期需求要添加的新功能,本人模仿UITableView的代理和数据源方法进行了第一阶段的开发.第二阶段是添加丰富的动画. 这个功能需求描述:能上传添加五个待选头像,五个头像分别 ...

  9. Gui系统之View体系(2)---View的setContent

    1.从SetContentView讲起 1.1Activty的setContentView里面的内容 public void setContentView(@LayoutRes int layoutR ...

  10. VS单元测试

    弄了好久才明白 ,但是收获确实挺大的,话不多说,直接上图. 1 打开VS建立项目 2 建立一个类 3 点击创建单元测试 4 在运行模块里重新输入代码 5 在空白处 点击鼠标右键 选择运行测试 6 测试 ...