用法
// fifo1.c
#include <func.h>
int main(int argc, char* argv[]) {
printf("fifo1 start\n");
int fd = open("pipe", O_RDONLY);
printf("pipe open\n");
char buf[128] = "";
read(fd, buf, 128);
puts(buf);
return 0;
}
// fifo2.c
#include <func.h>
int main(int argc, char* argv[]) {
int fd = open("pipe", O_WRONLY);
sleep(5);
write(fd, "Hello fifo\n", 11);
return 0;
}
远程拷贝
// send.c
#include <func.h>
#define MAXSIZE 4096
int main(int argc, char* argv[]) {
// ./send file
if (argc != 2) {
error(1, 0, "Usage: %s file", argv[0]);
}
// 1.打开文件描述符
int fileFd = open(argv[1], O_RDONLY);
if (fileFd == -1) {
error(1, errno, "open %s", argv[1]);
}
// fifo 是事先用 mkfifo 命令创建的有名管道
int fifoFd = open("fifo", O_WRONLY);
if (fifoFd == -1) {
error(1, errno, "open fifo");
}
// 2.传输文件
char buf[MAXSIZE];
int nbytes;
while ((nbytes = read(fileFd, buf, MAXSIZE)) > 0) {
write(fifoFd, buf, nbytes);
}
// 关闭文件描述符
close(fileFd);
close(fifoFd);
return 0;
}
// recv.c
#include <func.h>
#define MAXSIZE 4096
int main(int argc, char* argv[]) {
// ./recv file
if (argc != 2) {
error(1, 0, "Usage: %s file", argv[0]);
}
// 1.打开文件描述符
int fileFd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0666);
if (fileFd == -1) {
error(1, errno, "open %s", argv[1]);
}
// fifo 是事先用mkfifo命令创建的有名管道
int fifoFd = open("fifo", O_RDONLY);
if (fifoFd == -1) {
error(1, errno, "open fifo");
}
// 2.保存文件
char buf[MAXSIZE];
int nbytes;
while ((nbytes = read(fifoFd, buf, MAXSIZE)) > 0) {
write(fileFd, buf, nbytes);
}
// 3.关闭文件描述符
close(fileFd);
close(fifoFd);
return 0;
}