Operación de tuberías anónimas
La comunicación solo se puede realizar entre procesos relacionados.
int pipe(int pipefd[2])
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
int main()
{
int pipefd[2] = {
-1};
int ret = pipe(pipefd);
if(ret < 0)
{
perror("pipe error");
return -1;
}
pid_t pid = fork();
if(pid == 0)
{
char buf[1024];
read(pipefd[0],buf,1023);
}
else if(pid > 0)
{
char *str = "hello";
write(pipefd[1],biff,str);
}
return 0;
}
Operación de tuberías con nombre:
Admite el acceso entre diferentes procesos en el mismo host.
int mkfifo(char* name, mode_t mode)
// Nombre y permisos de la tubería.
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/stat.h> //命名管道
#include<errno.h> //错误处理
#include<fcntl.h> //文件操作
int main()
{
umask(0); //设置权限信息
//mkfifo(命名管道名称,管道操作权限)
int ret = mkfifo("./test_fifo",664);
if(ret < 0 && error != EEXIST) //创建失败或者已经存在
{
perror("mkfifo error");
return -1;
}
int fd = open("./test.fifo",O_RDONLY); //以只读的方式打开文件
if(fd < 0)
{
perror("open fifo error");
return -1;
}
return 0;
}
Nota
文件以只读的方式打开,则会被阻塞,直到文件用写的方式进行打开。
文件以只写的方式打开,则会被阻塞,直到文件用读的方式打开。
Leer y escribir características de la canalización:
- La canalización es una comunicación semidúplex y la dirección se puede seleccionar para la transmisión de datos.
- Si no hay datos en la canalización, la lectura se bloqueará y si los datos en la canalización están llenos, la escritura se bloqueará.
- Si se produce una excepción en el extremo de escritura de la canalización, el final de lectura devolverá 0 después de leer los datos de la canalización y no se bloqueará.
- Si el extremo de lectura de la tubería está cerrado, se informa de un error para el segmento de escritura.
- El ciclo de vida de la tubería varía con el proceso. Cuando se salen de todos los procesos que operan la tubería, se libera la tubería.
- La tubería proporciona un servicio de transmisión de flujo de bytes y no lee los mismos datos.
- La canalización viene con sincronización y exclusión mutua.
La canalización viene con sincronización y exclusión mutua.
Sincronización: darse cuenta de la racionalidad temporal del acceso a recursos críticos a través del juicio condicional. Reflejadas en la canalización, las características de lectura y escritura de la canalización son
mutuamente excluyentes: la seguridad del acceso a los recursos críticos se logra mediante un acceso único. Las operaciones de lectura y escritura de canalización tienen atomicidad garantizada en PIPE_BUF.