Table of Contents
//Writing process" >//Writing process
//Reading process" >//Reading process
1. The writing process is blocked and the reading process is blocked. " >1. The writing process is blocked and the reading process is blocked.
2. The writing process is blocked and the reading process is non-blocking. " >2. The writing process is blocked and the reading process is non-blocking.
3. The writing process is non-blocking and the reading process is blocking. " >3. The writing process is non-blocking and the reading process is blocking.
4. The writing process is non-blocking and the reading process is non-blocking. " >4. The writing process is non-blocking and the reading process is non-blocking.
Home System Tutorial LINUX Linux Named Pipes (FIFO): A simple yet powerful way to communicate between processes

Linux Named Pipes (FIFO): A simple yet powerful way to communicate between processes

Feb 11, 2024 pm 09:36 PM
linux linux tutorial linux system linux command shell script embeddedlinux Getting started with linux linux learning

Linux system is an operating system that supports concurrent execution of multi-tasks. It can run multiple processes at the same time, thereby improving system utilization and efficiency. However, if data exchange and collaboration are required between these processes, some inter-process communication (IPC) methods need to be used, such as signals, message queues, shared memory, semaphores, etc. Among them, the famous pipe (FIFO) is a relatively simple and powerful IPC method. It allows two or more processes to transmit data through a file without caring about the content and format of the file. This article will introduce the blocking and non-blocking reading and writing methods of famous pipes (FIFO) in Linux systems, including the creation, opening, reading, writing, closing and deletion of famous pipes.

Linux Named Pipes (FIFO): A simple yet powerful way to communicate between processes

//Writing process

#include

#include

#include

#include

#include

#include

#define FIFO_NAME “/tmp/myfifo”

main()

{

int fd;

char w_buf[50];

int w_num;

// If fifo already exists, use it directly, otherwise create it

if((mkfifo(FIFO_NAME,0777)

{

printf(“cannot create fifo…\n”);

exit(1);

}

//Open fifo in blocking write-only mode

fd=open(FIFO_NAME,O_WRONLY);

w_num=write(fd,”abcdg\0″,6);

printf(“%d\n”,w_num);

}

//Reading process

#include

#include

#include

#include

#define FIFO_NAME “/tmp/myfifo”

main()

{

char r_buf[50];

int fd;

int r_num;

// If fifo already exists, use it directly, otherwise create it

if((mkfifo(FIFO_NAME,0777)

{

printf(“cannot create fifo…\n”);

exit(1);

}

//Open fifo in blocking read-only mode

fd=open(FIFO_NAME,O_RDONLY);

if(fd==-1)

{

printf(“open %s for read error\n”);

exit(1);

}

// Enter a string through the keyboard, and then write it to the fifo until "exit" is entered

r_num=read(fd,r_buf,6);

printf(” %d bytes read:%s\n”,r_num,r_buf);

unlink(FIFO_NAME);//Delete fifo

}

1. The writing process is blocked and the reading process is blocked.

Run the writing process first (blocked), then run the reading process, everything is normal.

Run the reading process first (blocked), then run the writing process, everything is normal.

2. The writing process is blocked and the reading process is non-blocking.

Just change the code fd=open(FIFO_NAME,O_RDONLY | O_NONBLOCK), similar to the following.

Run the writing process first (blocked), then run the reading process, everything is normal.

Run the reading process first, and the program crashes directly (Segmentation fault (core dumped)). It is quite natural when you think about it. You have nothing to read and you don’t want to wait.

3. The writing process is non-blocking and the reading process is blocking.

Run the writing process first, the open call will return -1, and the open fails.

Run the reading process first (blocked), then run the writing process, everything is normal.

4. The writing process is non-blocking and the reading process is non-blocking.

In fact, it is an abnormal situation where half of each of the above 2 and 3 categories are taken.

Also, we can see through the ls -la command in the /tmp directory that the size of the pipe file myfifo is always 0. This is because although the FIFO file exists in the file system, the contents of the FIFO are stored in memory. , so the file size is always 0.

This article introduces the blocking and non-blocking reading and writing methods of famous pipes (FIFO) in Linux systems, including the creation, opening, reading, writing, closing and deletion of famous pipes. By understanding and mastering this knowledge, we can better use famous pipes (FIFO) to implement inter-process communication and improve system performance and reliability. Of course, there are many other features and usages of famous pipes (FIFO) in Linux systems, which require us to continue to learn and explore. I hope this article can bring you some inspiration and help.

The above is the detailed content of Linux Named Pipes (FIFO): A simple yet powerful way to communicate between processes. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Unable to log in to mysql as root Unable to log in to mysql as root Apr 08, 2025 pm 04:54 PM

The main reasons why you cannot log in to MySQL as root are permission problems, configuration file errors, password inconsistent, socket file problems, or firewall interception. The solution includes: check whether the bind-address parameter in the configuration file is configured correctly. Check whether the root user permissions have been modified or deleted and reset. Verify that the password is accurate, including case and special characters. Check socket file permission settings and paths. Check that the firewall blocks connections to the MySQL server.

Solutions to the errors reported by MySQL on a specific system version Solutions to the errors reported by MySQL on a specific system version Apr 08, 2025 am 11:54 AM

The solution to MySQL installation error is: 1. Carefully check the system environment to ensure that the MySQL dependency library requirements are met. Different operating systems and version requirements are different; 2. Carefully read the error message and take corresponding measures according to prompts (such as missing library files or insufficient permissions), such as installing dependencies or using sudo commands; 3. If necessary, try to install the source code and carefully check the compilation log, but this requires a certain amount of Linux knowledge and experience. The key to ultimately solving the problem is to carefully check the system environment and error information, and refer to the official documents.

How to solve mysql cannot be started How to solve mysql cannot be started Apr 08, 2025 pm 02:21 PM

There are many reasons why MySQL startup fails, and it can be diagnosed by checking the error log. Common causes include port conflicts (check port occupancy and modify configuration), permission issues (check service running user permissions), configuration file errors (check parameter settings), data directory corruption (restore data or rebuild table space), InnoDB table space issues (check ibdata1 files), plug-in loading failure (check error log). When solving problems, you should analyze them based on the error log, find the root cause of the problem, and develop the habit of backing up data regularly to prevent and solve problems.

Can mysql run on android Can mysql run on android Apr 08, 2025 pm 05:03 PM

MySQL cannot run directly on Android, but it can be implemented indirectly by using the following methods: using the lightweight database SQLite, which is built on the Android system, does not require a separate server, and has a small resource usage, which is very suitable for mobile device applications. Remotely connect to the MySQL server and connect to the MySQL database on the remote server through the network for data reading and writing, but there are disadvantages such as strong network dependencies, security issues and server costs.

Unable to access mysql from terminal Unable to access mysql from terminal Apr 08, 2025 pm 04:57 PM

Unable to access MySQL from the terminal may be due to: MySQL service not running; connection command error; insufficient permissions; firewall blocks connection; MySQL configuration file error.

What is the most use of Linux? What is the most use of Linux? Apr 09, 2025 am 12:02 AM

Linux is widely used in servers, embedded systems and desktop environments. 1) In the server field, Linux has become an ideal choice for hosting websites, databases and applications due to its stability and security. 2) In embedded systems, Linux is popular for its high customization and efficiency. 3) In the desktop environment, Linux provides a variety of desktop environments to meet the needs of different users.

Monitor MySQL and MariaDB Droplets with Prometheus MySQL Exporter Monitor MySQL and MariaDB Droplets with Prometheus MySQL Exporter Apr 08, 2025 pm 02:42 PM

Effective monitoring of MySQL and MariaDB databases is critical to maintaining optimal performance, identifying potential bottlenecks, and ensuring overall system reliability. Prometheus MySQL Exporter is a powerful tool that provides detailed insights into database metrics that are critical for proactive management and troubleshooting.

How to solve the problem of missing dependencies when installing MySQL How to solve the problem of missing dependencies when installing MySQL Apr 08, 2025 pm 12:00 PM

MySQL installation failure is usually caused by the lack of dependencies. Solution: 1. Use system package manager (such as Linux apt, yum or dnf, Windows VisualC Redistributable) to install the missing dependency libraries, such as sudoaptinstalllibmysqlclient-dev; 2. Carefully check the error information and solve complex dependencies one by one; 3. Ensure that the package manager source is configured correctly and can access the network; 4. For Windows, download and install the necessary runtime libraries. Developing the habit of reading official documents and making good use of search engines can effectively solve problems.

See all articles