文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | firefox | WPS | 杀毒软件 | Picasa
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形图像 办公软件 媒体动画 精文荟萃 常用软件 网页编程 技术开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发C/C++进程和线程编程
精品推荐
特别推荐
·C语言编程易犯毛病集合
·C语言编程常见问题解答(目录)
·C#程序开发中的常用函数汇总
·C#数据库操作的三种经典用法
·C/C++笔试、面试题目大汇总
·Beej的网络socket编程指南
·socket编程原理
·C语言的常用库函数使用方法分析及用途
·在C语言中如何处理时间和日期
·C++设计模式之Singleton
·VC++动态链接库编程之MFC扩展 DLL
·TCP/IP网络重复型服务器通信软件的设计
·DirectX游戏开发入门
·经典与现代的结合:在MFC中集成RAD .NET框架
·Windows API-GDI入门基础知识详解(2)
·Visual C++ 入门精解
·C#基础概念二十五问
·用C#实现pdf文件的完整性验证
·成为嵌入式程序员应知道的0x10个问题
·TCP/IP编程实现远程文件传输
热点TOP10
·C#编写的windows计算器-源代码
·socket编程原理
·TCP/IP编程实现远程文件传输
·C#基础概念二十五问
·Beej的网络socket编程指南
·C/C++笔试、面试题目大汇总
·如何用C#编写文本编辑器
·C#源码读取excel数据到程序中-SQL SERVER-到dataset中
·飞机订票系统设计
·C# GridView 排序及分页
·C语言图形函数
·学生成绩管理系统实习
·DirectX游戏开发入门
·Windows下C语言网络编程快速入门
·扑克牌的发牌程序(用伪随机数实现)
·C语言编程常见问题解答(目录)
·c#的random shuffle
·用C#下的Raw Socket编程实现网络封包监视
·进程调度模拟程序
·Visual C++ 实现数字化图像的分割

进程和线程编程

日期:2008年4月7日 作者: 查看:[大字体 中字体 小字体]


popen("ls~scottb","r");
popen("sort>/tmp/foo","w");
popen("sortuniqmore","w");
下面的程序是另一个使用popen()的例子,它打开两个管道(一个用于ls命令,另一个用于
sort命令):
#include<stdio.h>
intmain(void)
{
FILE*pipein_fp,*pipeout_fp;
charreadbuf[80];
/*Createonewaypipelinewithcalltopopen()*/
if((pipein_fp=popen("ls","r"))==NULL)
{
perror("popen");
exit(1);
}
/*Createonewaypipelinewithcalltopopen()*/
if((pipeout_fp=popen("sort","w"))==NULL)
{
perror("popen");
exit(1);
}
/*Processingloop*/
while(fgets(readbuf,80,pipein_fp))
fputs(readbuf,pipeout_fp);
/*Closethepipes*/
pclose(pipein_fp);
pclose(pipeout_fp);
return(0);
}
最后,我们再看一个使用popen()的例子。此程序用于创建一个命令和文件之间的管道:
#include<stdio.h>
intmain(intargc,char*argv[])
{
FILE*pipe_fp,*infile;
charreadbuf[80];
if(argc!=3){
fprintf(stderr,"USAGE:popen3[command][filename]
");
exit(1);
}
/*Open up input file*/
if((infile=fopen(argv[2],"rt"))==NULL)
{
perror("fopen");
exit(1);
}
/*Create one way pipe line with call topopen()*/
if((pipe_fp=popen(argv[1],"w"))==NULL)
{
perror("popen");
exit(1);
}
/*Processingloop*/
do{
fgets(readbuf,80,infile);
if(feof(infile))break;
fputs(readbuf,pipe_fp);
}while(!feof(infile));
fclose(infile);
pclose(pipe_fp);
return(0);
}
下面是使用此程序的例子:
popen3sortpopen3.c
popen3catpopen3.c
popen3morepopen3.c
popen3catpopen3.cgrepmain




[目录]

--------------------------------------------------------------------------------


命名管道

命名管道和一般的管道基本相同,但也有一些显著的不同:
*命名管道是在文件系统中作为一个特殊的设备文件而存在的。
*不同祖先的进程之间可以通过管道共享数据。
*当共享管道的进程执行完所有的I/O操作以后,命名管道将继续保存在文件系统中以便以后使用。

一个管道必须既有读取进程,也要有写入进程。如果一个进程试图写入到一个没有读取进程的管道中,那么系统内核将会产生SIGPIPE信号。当两个以上的进程同时使用管道时,这一点尤其重要。


[目录]

--------------------------------------------------------------------------------


创建FIFO

可以有几种方法创建一个命名管道。头两种方法可以使用shell。
mknodMYFIFOp
mkfifoa=rwMYFIFO
上面的两个命名执行同样的操作,但其中有一点不同。命令mkfifo提供一个在创建之后直接改变FIFO文件存取权限的途径,而命令mknod需要调用命令chmod。
一个物理文件系统可以通过p指示器十分容易地分辨出一个FIFO文件。

$ls-lMYFIFO
prw-r--r--1rootroot0Dec1422:15MYFIFO

请注意在文件名后面的管道符号“”。
我们可以使用系统调用mknod()来创建一个FIFO管道:

库函数:mknod();
原型:intmknod(char*pathname,mode_tmode,dev_tdev);
返回值:如果成功,返回0
如果失败,返回-1:errno=EFAULT(无效路径名)
EACCES(无存取权限)
ENAMETOOLONG(路径名太长)
ENOENT(无效路径名)
ENOTDIR(无效路径名)

下面看一个使用C语言创建FIFO管道的例子:

mknod("/tmp/MYFIFO",S_IFIFO0666,0);

在这个例子中,文件/tmp/MYFIFO是要创建的FIFO文件。它的存取权限是0666。存取权限
也可以使用umask修改:

final_umask=requested_permissions&~original_umask

一个常用的使用系统调用umask()的方法就是临时地清除umask的值:
umask(0);
mknod("/tmp/MYFIFO",S_IFIFO0666,0);

另外,mknod()中的第三个参数只有在创建一个设备文件时才能用到。它包括设备文件的
主设备号和从设备号。
}
}






[目录]

--------------------------------------------------------------------------------


操作FIFO

FIFO上的I/O操作和正常管道上的I/O操作基本一样,只有一个主要的不同。系统调用open用来在物理上打开一个管道。在半双工的管道中,这是不必要的。因为管道在系统内核中,而不是在一个物理的文件系统中。在我们的例子中,我们将像使用一个文件流一样使用管道,也就是使用fopen()打开管道,使用fclose()关闭它。

上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页 




上一篇:如何实现大图标风格的打开对话框

下一篇:ar和nm命令的使用

进程和线程编程 相关文章:
·Windows系统进程列表完全解析
·windows 2000进程一览
·进程调度模拟程序
·识别非法进程及手工杀毒技巧
·notepad - notepad.exe - 进程信息
·进程和线程编程
·无进程DLL木马开发思路与实现
·详细讲解Linux操作系统的进程管理的功能
·windows进程中的内存结构
·操作系统学习:认识 Rundll32.exe 进程
进程和线程编程 相关软件:
·进程管理王 V1.35 绿色版
·ECQ (进程浏览器) V6.0 绿色版
·UNIX网络编程 第2版 第2卷 进程间通信
·Windows进程管理器 V4.01
·进程执法官V1.50 个人版
·进程端口关联监视工具 3.02
·列举进程DELPHI教程
·进程杀手V1.04 增强版
·进程间谍V1.1.1.0
·进程猎人V3.2

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:vipcn