编写线程并发拷贝程序,通过模拟管道文件的实现(管道定义、创建管道、读管道程序和写管道程序程序实现)
使用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 展开
要使用ppipe(fdp) (ppipe(、、、)是自己定义的函数,模拟管道文件的创建)。
要使用pread(fdp[0],abuf,BSIZE)和pwrite(fdp[1],abuf,BSIZE) (pread(、、、)和pwrite(、、、)是自己定义的函数,分别模拟文件的读和写。)
求大虾救火,100分奉上
可以发到我邮箱124527943@qq.com 展开
1个回答
展开全部
#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);
}
}
#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);
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询