编写线程并发拷贝程序,通过模拟管道文件的实现(管道定义、创建管道、读管道程序和写管道程序程序实现)

使用C语言,Linux环境下实现,实现同步互斥,检验程序运行结果。要使用ppipe(fdp)(ppipe(、、、)是自己定义的函数,模拟管道文件的创建)。要使用pread... 使用C语言,Linux环境下实现,实现同步互斥,检验程序运行结果。
要使用ppipe(fdp) (ppipe(、、、)是自己定义的函数,模拟管道文件的创建)。
要使用pread(fdp[0],abuf,BSIZE)和pwrite(fdp[1],abuf,BSIZE) (pread(、、、)和pwrite(、、、)是自己定义的函数,分别模拟文件的读和写。)
求大虾救火,100分奉上
可以发到我邮箱124527943@qq.com
展开
 我来答
moxsone
2011-01-07 · TA获得超过3332个赞
知道大有可为答主
回答量:2796
采纳率:50%
帮助的人:1502万
展开全部
#include <sys/wait.h>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char *argv[])
{
int pfd[2];
pid_t cpid;
char buf;

assert(argc == 2);

if (pipe(pfd) == -1)
{
perror("pipe");
exit(EXIT_FAILURE);
}

//创建子进程
cpid = fork();

if (cpid == -1)
{
//创建子进程失败
perror("fork"); exit(EXIT_FAILURE);
}

if (cpid == 0)
{ /* 子进程中读取管道里面读数据 */
close(pfd[1]); /* 关闭不使用的管道写入端 */

while (read(pfd[0], &buf, 1) > 0)
{
write(STDOUT_FILENO, &buf, 1);//在标准的输出设备上输出读取管到的内容
}

write(STDOUT_FILENO, "\n", 1);
close(pfd[0]);
_exit(EXIT_SUCCESS);

}
else
{ /* 父进程将参数 argv[1]字符串 写入管道 */
close(pfd[0]); /* 关闭不使用的管道读取端 */
write(pfd[1], argv[1], strlen(argv[1]));
close(pfd[1]); /* 关闭管道写入端,此时读取端就会收到 EOF 标志*/
wait(NULL); /* 等待子进程运行结束 */
exit(EXIT_SUCCESS);
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式