拷贝发送:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
int main(int argc, char const *argv[])
{
if(argc != 2)
{
printf("请输入需要发送的文件\n");
}
//1.创建一个管道文件
mkfifo("/home/gec/pipe",0777);
//2.打开需要发送的文件
int file_fd = open(argv[1], O_RDWR);
//3.打开管道文件
int fd = open("/home/gec/pipe", O_RDWR);
if (fd < 0)
{
perror("管道打开失败\n");
return -1;
}
while (1)
{
//1.读取文件数据
char str[1024] = {0};
int size = read(file_fd, str, 1024);
if (size <= 0)
{
printf("传输完毕\n");
return -1;
}
//2.写到管道中
size = write(fd, str, size);
printf("size:%d\n", size);
}
//关闭所有打开的文件
close(fd);
close(file_fd);
return 0;
}
接收拷贝:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
int main(int argc, char const *argv[])
{
if(argc != 2)
{
printf("请输入需要接收的文件\n");
}
//1.创建一个管道文件
mkfifo("/home/gec/pipe",0777);
//2.打开需要发送的文件
int file_fd = open(argv[1], O_RDWR|O_CREAT|O_TRUNC,0777);
//3.打开管道文件
int fd = open("/home/gec/pipe", O_RDWR);
if (fd < 0)
{
perror("管道打开失败\n");
return -1;
}
while (1)
{
//1.读取文件数据
char str[1024] = {0};
int size = read(fd, str, 1024);
//2.写到管道中
size = write(file_fd, str, size);
printf("size:%d\n", size);
if (size < 1024)
{
printf("接收完毕\n");
return -1;
}
}
//关闭所有打开的文件
close(fd);
close(file_fd);
return 0;
}
效果演示:
个人收获:
学习到管道知识的运用,使用管道和文件IO结合 利用文件IOwrite read 读写文件操作实现,
这里注意点是write read 的参数。
//1.读取文件数据
char str[1024] = {0};
int size = read(fd, str, 1024);
//2.写到管道中
size = write(file_fd, str, size);
printf("size:%d\n", size);
if (size < 1024)
{
printf("接收完毕\n");
return -1;
}
比如这里的size 应该是使用read读到多少返回的size 使用write就写多大的size