copy_process.c(采用进程间管道通信方式实现复制)
来源:互联网 发布:淘宝客的原理 编辑:程序博客网 时间:2024/05/23 13:03
/*
*
*Filename: copy_process.c
*Description: 实现功能主要是,子进程从文件上读取数据,
* 采用管道通信机制,传递给父进程,由父进程
* 写入本地另外一个文件中,实现拷贝。
*/
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <string.h>
#define BUFFERSIZE 1024
int main(int argc,char *argv[])
{
if(argc != 3)
{
printf("copy <src_filename> <dest_filename>\n");
exit(-1);
}
int filedes[2]; //定义管道,filedes[0]为读端,filedes[1]为写端
int fd_read; //read返回值
int fd_write; //write返回值
int pipe_ret; //pipe返回值
char tmp[BUFFERSIZE] = {0}; //定义缓存区
ssize_t ret; //定义变量,表示字节数
pid_t p_ret; //p_ret为fork函数返回值
pipe_ret = pipe(filedes); //建立管道通信,必须要在fork函数之前
if (-1 == pipe_ret)
{
perror("pipe");
exit(-1);
}
p_ret = fork(); //创建子进程
if(p_ret == -1) //返回-1出错
{
perror("fork");
exit(-1);
}
else if(p_ret == 0) //返回0进入子进程
{
printf("I am sun process\n");
fd_read = open(argv[1], O_RDONLY); // 以只读的形式打开文件
if (-1 == fd_read)
{
perror("open");
exit(-1);
}
if(read(fd_read, tmp, BUFFERSIZE) < 0) //将文件内容读到tmp缓存区
{
perror("read error!\n");
exit(-1);
}
printf("从文件中读到内容 : %s",tmp);
close(filedes[0]); //关闭管道的读端
if((ret = write(filedes[1],tmp,strlen(tmp))) < 0) //向管道中写数据
{
perror("write error!\n");
exit(-1);
}
printf("向管道内写了 %d 个字节\n",ret);
}
else
{
wait(NULL);
printf("I am parent process\n"); //提示进入父进程
close(filedes[1]); // 关闭写端
if((ret = read(filedes[0],tmp,BUFFERSIZE)) < 0) //从管道的读端读取管道内数据
{
perror("read error!\n");
exit(-1);
}
printf("从管道内读了%d 个字节\n",ret);
printf("读取的内容为: %s",tmp);
// 创建文件
fd_write = open(argv[2], O_WRONLY | O_CREAT, 0777); //打开文件,若不存在则新建并设置权限
if (fd_write < 0)
{
perror("open");
exit(-1);
}
if((ret = write(fd_write, tmp, strlen(tmp))) < 0) //将tmp内数据写入fd_write指向文件中
{
perror("write error!\n");
return -1;
}
printf("向 %s 中成功写入内容为 %s",argv[2],tmp); //输出提示信息
}
exit(0);
}
- copy_process.c(采用进程间管道通信方式实现复制)
- 进程间通信--管道的实现方式
- 进程间通信方式----管道通信
- 管道实现进程间通信
- C语言无名管道实现父子进程间通信
- linux c之通过管道实现兄弟间进程通信:
- C语言创建管道实现进程间通信
- Linux C命名管道实现进程间通信
- 进程间通信方式介绍-管道
- 进程间通信方式(1)---管道
- 进程间通信方式之管道
- 进程间通信方式之有名管道
- 进程间的通信方式:管道
- 管道(传统进程间通信方式)
- 进程间通信的方式(一):管道
- 进程间通信方式(一)管道
- 进程间通信方式之管道--无名管道
- 进程间通信方式之管道--有名管道
- Java 中数据类型转换成 byte[] 方法
- 中断处理流程
- 解决Starting MySQL...The server quit without updating PID file的问题
- 解决“System.Data.OracleClient需要Oracle客户端软件8.1.7或更高版本”
- runtime library介绍
- copy_process.c(采用进程间管道通信方式实现复制)
- matplotlib绘制动画的示例
- PSQL VS MySQL 如何选择开源数据库
- IOS CoreLocation
- android 中 Notification 关于状态栏的一些操作
- 关于抽象类和接口
- Perl 语言简介
- java中读取csv文件,并在文件末尾添加数据
- 迭代器(Iterator)