易截截图软件、单文件、免安装、纯绿色、仅160KB

linux C使用管道通信(一)

 Linux中的进程通信
1.管道
   函数原型:int pipe(int filedes[2]);
   函数返回值: 正确返回0;错误返回-1
   其中的文件描述符filedes[0]是用来读取数据的,filedes[1]是用来写数据的。
例子1:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#define MAXLINE 1024
int main(void)
{
int n,files[2];
pid_t pid;
char line[MAXLINE];
if(pipe(files)<0)
{
fprintf(stderr,"pipe error!\n);
exit(1);
}
if((pid=fork())<0)
{
fprintf(stderr,"fork error!\n");
exit(1);
}
else if(pid>0)
{
close(fd[0]);
write(fd[1],"how are you!\n",13);
}
else
{
close(fd[1]);
n=read(fd[0],line,MAXLINE);
write(STDOUT_FILENO,line,n);
}
exit(0);
}
例子2:
以下是计算两个数的和:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#define MAXLINE 1024
int main(void)
{
int n,int1,int2;
char line[MAXLINE];
while((n=read(STDIN_FILENO,line,MAXLINE))>0)
{
line[n]=0;
if(sscanf(line,"%d+%d",&int1,&int2)==2)
{
sprintf(line,"%d\n",int1+int2);
n=strlen(line);
if(write(STDOUT_FILENO,line,n)!=n)
{
fprintf(stderr,"write error!\n");
exit(1);
}
}
else
{
if(write(STDOUT_FILENO,"invalid args\n",13)!=13)
{
fprintf(stderr,"write error error!\n");
exit(1);
}
}
}
exit(0);
}

下面的程序调用上面的add程序,并通过管道传值:
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#define MAXLINE 1024
static void sig_pipe(int);
int main(void)
{
int n,fd1[2],fd2[2];
pid_t pid;
char line[MAXLINE];
if(signal(SIGPIPE,sig_pipe)==SIG_ERR)
{
fprintf(stderr,"signal error!\n");
exit(1);
}
if(pipe(fd1)<0 || pipe(fd2)<0)
{
fprintf(stderr,"pipe error!\n");
exit(1);
}
if((pid=fork())<0)
{
fprintf(stderr,"fork error!\n");
exit(1);
}
else if(pid>0)
{
close(fd1[0]);
close


相关文档:

Linux服务器维护的几个原则

Linux服务器虽然相对来说比Windwos服务器要稳定与安全。但是稳定安全的Linux服务器,仍然离不开合理的及时的维护工作。
  一、让软件包保持最新的版本
  Linux服务器的软件包也如同Windwos操作系统的补丁一样在不断的升级。Linux服务器软件的升级主要有两个目的。一是增强软件的功能,二是解决一些已知的安全漏洞。如 ......

Linux下samba服务器架设方法.

++++++++++++++++++++++++++++++++++++++++++++++++
技术资料备份
++++++++++++++++++++++++++++++++++++++++++++++++
0、架设Samba 服务器的前提;
Linux是一个多用户的操作系统,对任何服务器的架设与都用户、用户组及权限相关,这是操作的基础。Samba服务器也不例外,对这些知识的掌握也是极为重要的。在Windows系统 ......

在linux下,如何在C语言中使用正则表达式(整理)


  一个正则表达式的教程可以参看(里面有个测试正则表达式的工具)
     http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm#ad
 
     正则表达是用来匹配字符串的好东东。
   
     如果用户熟悉Lin ......

linux 硬盘分区方式

                                                   ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号