Linux下C语言问题 pipe问题(急)
小弟最近才开始学Linux下的C语言变成,还是只菜鸟。请问我下面的代码有什么问题啊?
小弟想写一个在主函数先输入N个单词,然后主函数生成N个子进程。然后父函数通过pipe将单词传给子进程,是子进程输出单词,具体想这么输出:
./a.out aa bbb cccc d
然后输入上面命令后,电脑输出:
2345 : aa
2356 : bbb
2378 : cccc
2379 : d
但是下面的代码运行后却是这样输出的:
root@localhost usp_ch06]# gcc parentwritepipe.c
[root@localhost usp_ch06]# .a.out aaa bb vv
[3076] aaa
[3076] bb
[3076] vv
[root@localhost usp_ch06]# [3077] aaa
q
bash q command not found
[root@localhost usp_ch06]# .a.out aaa bb vv
[3079] aaa
[3079] bb
[3079] vv
[root@localhost usp_ch06]# [3080] aaa
q
bash q command not found
[root@localhost usp_ch06]#
请问这是哪里有问题啊,下面是代码,这个代码是我从书上一个例题改编的,问题应该很多,请大家指教
小弟想写一个在主函数先输入N个单词,然后主函数生成N个子进程。然后父函数通过pipe将单词传给子进程,是子进程输出单词,具体想这么输出:
./a.out aa bbb cccc d
然后输入上面命令后,电脑输出:
2345 : aa
2356 : bbb
2378 : cccc
2379 : d
但是下面的代码运行后却是这样输出的:
root@localhost usp_ch06]# gcc parentwritepipe.c
[root@localhost usp_ch06]# .a.out aaa bb vv
[3076] aaa
[3076] bb
[3076] vv
[root@localhost usp_ch06]# [3077] aaa
q
bash q command not found
[root@localhost usp_ch06]# .a.out aaa bb vv
[3079] aaa
[3079] bb
[3079] vv
[root@localhost usp_ch06]# [3080] aaa
q
bash q command not found
[root@localhost usp_ch06]#
请问这是哪里有问题啊,下面是代码,这个代码是我从书上一个例题改编的,问题应该很多,请大家指教
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#define BUFSIZE 10
int main(int argc,char *argv[])
{
int i=1;
int bytesin;
pid_t childpid;
int fd[2];
if (argc < 2)
{
fprintf(stderr,"Usage: %s command arg1 arg2 ...\n",argv[0]);
return 1;
}
if (pipe(fd) == -1)
{
perror("Failed to create the pipe");
return 1;
}
bytesin = strlen(argv[1]);
childpid = fork();
if (childpid == -1)
{
perror("Failed to fork");
return 1;
}
while(argv[i] != NULL)
{
if (childpid) /* parent code */
write(fd[1], argv[i], strlen(argv[i])+1);
else /* child code */
bytesin = read(fd[0], argv[i], BUFSIZE);
fprintf(stderr, "[%ld]: %.*s\n",
(long)getpid(), bytesin, argv[i]);
i=i++;
}
return 0;
}
...全文
相关推荐
linux内核pipe机制实现
### Linux内核Pipe机制实现详解#### 一、概述与背景在Linux内核中,管道(pipe)是一种用于进程间通信的重要机制。
pipe管道详解
### 二、创建与使用管道在C语言中,使用`pipe()`系统调用可以创建一个管道。
linux C语言开发管道通信实例详解
在Linux系统中,C语言是开发底层程序和系统级应用的常用工具,而管道(Pipe)是实现进程间通信的一种简单而有效的方法。本篇将深入解析如何在Linux环境下使用C语言开发管道通信实例。
LINUX下C语言编写的FTP服务器
在本项目中,你将学习到如何在Linux环境下编写一个基于C语言的FTP(File Transfer Protocol)服务器。
浅析如何在c语言中调用Linux脚本
【标签】: "C语言", "调用", "Linux脚本"【正文】:在C语言编程中,调用Linux脚本是一种常见的需求,特别是在系统级编程或者需要集成脚本语言功能的场景。


