当前位置:首页 » 编程语言 » c语言pipe

c语言pipe

发布时间: 2022-02-27 11:28:35

A. pipe c语言几个进程同时向一个pipe写通道写数据,会后面的覆盖前面的吗

PapeC语言几个镜头进程,同时向一个pip写通道写戏剧

B. C语言中的fork和pipe

如果 A是定义在fork之前,fork了子进程自然会有A
因为fork之后 子进程复制了父进程的地址空间,父子进程不共享资源
为何要用pipe?

C. C语言编写linux Shell, pipe的问题

在shell里,先用pipe()建个管道。

然后fork一个子进程,在子进程里用p2把管道的输出端复制到标准输出,然后调用exec()装载第一个程序执行,比如ls。

在父进程里,继续fork一个子进程,在子进程里用p2把管道的输入端复制到标准输入,然后调用exec()装载第二个程序执行,比如grep。

这样两个子进程的管道就连通了。

D. linux下c语言exec与pipe问题

可以用popen函数:
FILE *fp = popen("ls", "r");
fgets(xxxxx);
pclose(fp);

具体用法网上很多的

E. 求助!c语言limits.h里面定义的PIPE_BUF值是多少

在2.6.29内核中,\include\linux\limits.h定义:
#define PIPE_BUF 4096

其他平台,比如ARM等,定义如下:
#define PIPE_BUF PAGE_SIZE

这里PAGE_SIZE是在page.h或page_64.h:(与平台和系统相关)
#define PAGE_SHIFT12
#define PAGE_SIZE(1UL << PAGE_SHIFT)
1左移12位,也是4096。

所以,需要你自己弄清楚是什么平台,是32位系统还是64位系统,一般是4096。

希望对你有帮助!

F. Linux下C语言问题 pipe问题(急)

你没给分啊

#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 pfd[2];
if (argc < 2) {
fprintf(stderr, "Usage: %s command arg1 arg2 ...\n", argv[0]);
return 1;
}
if (pipe(pfd) == -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) {
if (write(pfd[1], argv[i], strlen(argv[i])) != -1)
printf("parent write over.\n");
}else {
bytesin = read(pfd[0], argv[i], BUFSIZE);
fprintf(stderr, "[%ld]: %.*s\n", (long) getpid(), bytesin, argv[i]);
}
++i; ############关键是这里
}
return 0;
}

G. C语言创建管道

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

int main(int argc,char *argv[])
{
int pd[2];/*用于保存管道文件描述符*/

char out[80],str[]="safasfsa";/*str是要写入的字符串,out用于保存从管道读取的字符串*/

assert(pipe(pd)!=-1);/*断言用于确定pipe()函数执行成功,如果管道创建失败,则pipe()返回-1*/

if (!fork()) write(pd[1],str,strlen(str));/*创建子进程,并将字符串写入管道*/
else {
read(pd[0],out,strlen(str));/*在主进程中从管道中读取子进程写入的字符串*/
printf("%s\n",out);/*主进程中输出。*/
}
return 0;
}

H. 在C语言中实现 UNIX中的输入\输出重导向,管道(pipe“|”),和后台工作(“&”)命令

要想自行实现
那么就需要从命令行读取识别>和<
在解析出>/<之后, 读取下一个参数,作为重定向文件名
然后,在程序中, 通过freopen 打开重定向文件。
至于管道 就麻烦的多,因为要把输出 作为其他程序输入
这样 需要把输出保存在缓冲中,调用参数程序,然后把缓冲数据作为参数程序的输入。

I. linux下c语言pipe无名管道 main函数创建两个进程p1和p2,p1把一个文件名通过管道给main进程,main进程打开

#include <stdio.h>
main()
{
int i,r,p1,p2,fd[2];
char buf[50],s[50];
pipe(fd); //创建匿名管道,fd[0]为读端,fd[1]为写端
while((p1=fork())==-1); //创建子进程P1,直至成功为止(p1!=-1)
if(p1==0) //子进程P1执行逻辑
{
lockf(fd[1],1,0); //锁定管道写端,保证写入数据的完整性
sprintf(buf,"child process P1 is sending messages!\n"); //在buf中填入准备写入管道的信息数据
printf("child processP1!\n"); //打印“子进程P1正在运行”
write(fd[1],buf,50); //向管道写端fd[1]写入buf中的数据,写完后该数据即可以从读端fd[0]读出
sleep(5); //睡眠5秒
lockf(fd[1],0,0); //解锁管道写端
exit(0); //子进程P1退出
}
else //主进程的执行逻辑
{
while((p2=fork())==-1); //创建第二个子进程P2
if(p2==0) //子进程P2的执行逻辑
{
lockf(fd[1],1,0); //锁定管道写端,保证数据写入完整
sprintf(buf,"child process P2 is sending messages!\n"); //在buf中填入准备写入管道的信息数据
printf("child processP2!\n"); //打印“子进程P2正在运行”
write(fd[1],buf,50); //向管道写端fd[1]写入buf中的数据,写完后该数据即可从读端fd[0]读出
sleep(5); //睡眠5秒
lockf(fd[1],0,0); //解锁管道写端
exit(0); //子进程P2退出
}
//以下为主进程执行逻辑
wait(0); //等待某个子进程退出
if(r=read(fd[0],s,50)==-1) //从管道读端fd[0]读取P1或者P2写入的数据(视哪个子进程抢先执行到lockf函数)
{
printf(:can't read pipe\n"); //读取失败,打印错误信息
}
else
{
printf(:%s\n",s); //打印出读到的信息数据
}
wait(0); //等待第二个子进程退出
if(r=read(fd[0],s,50)==-1) //从管道读端fd[0]读取出P1或者P2写入的数据(视哪个子进程后执行到lockf函数)
{
printf(:can't read pipe\n"); //读取失败,打印错误信息
}
else
{
printf(:%s\n",s); //打印读取到的信息数据
}
exit(0); //主进程退出
}
}

总的说来,就是主进程创建了两个子进程P1、P2,这两个子进程分别向管道写入了一行文字,然后主进程从管道另一端将这两行文字读出并打印出来
由于进程的并发执行性,哪个子进程的信息先写到管道是随机的,因此该程序每次运行的输出可能并不相同,两行文字之间可能会相互交换

热点内容
安卓framework编译 发布:2025-01-11 05:55:00 浏览:694
加密学原理 发布:2025-01-11 05:54:20 浏览:786
ocr编程 发布:2025-01-11 05:51:24 浏览:252
androiddecoder 发布:2025-01-11 05:44:13 浏览:730
苏州数控编程培训 发布:2025-01-11 05:42:51 浏览:855
编程控制小船 发布:2025-01-11 05:35:05 浏览:756
萤石云清理缓存 发布:2025-01-11 05:34:29 浏览:779
怎么在电脑上传照片 发布:2025-01-11 05:30:20 浏览:487
python3哪个版本好 发布:2025-01-11 05:07:29 浏览:864
手机怎么访问外网 发布:2025-01-11 05:07:27 浏览:532