Linux --- Uso de comunicación por tubería

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.

Supongo que te gusta

Origin blog.csdn.net/qq_42708024/article/details/108437473
Recomendado
Clasificación