易截截图软件、单文件、免安装、纯绿色、仅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内核中的获知方法
1.通过bootloader 的 tag mem传入。
Setup.c 中的函数如下:
static int __init parse_tag_mem32(const struct tag *tag)
{
if (meminfo.nr_banks >= NR_BANKS) {
printk(KERN_WARNING
"Ignoring memory bank 0x%08x size %dKB\n",
tag->u.mem.start, tag->u.mem ......

Linux 系统内核参数 sysctl.conf优化方案

 中国最完整的sysctl.conf优化方案
网上关于sysctl.conf的优化方案有各种版本,大多都是抄来抄去的,让新人看了很迷茫。为解决此问题,经过两天的整理,查了N多资料,将大家常用的总结如下,很多默认的不需要修改的暂未涉及,今后将逐步把所有的项目都有个翻译、讲解、修改建议,如有修改,将以此文为准,其他地方的 ......

Linux busybox小问题的解决

编译并安装Busybox 1.15.3到L inux2.6.11.1,启动系统
进入shell 提示:  ./ash : can't access tty; job control turned off.
分析发现
 /etc/inittab文件中有一行:
     ::askfirst:/bin/ash
   这在busybox 1.2.1运行正常
修改为
  tty1::askfirst:/bin/ash
后正常. ......

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


  一个正则表达式的教程可以参看(里面有个测试正则表达式的工具)
     http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm#ad
 
     正则表达是用来匹配字符串的好东东。
   
     如果用户熟悉Lin ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号