


Linux Named Pipes (FIFO): A simple yet powerful way to communicate between processes
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.
//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!

The core of the Linux operating system is its command line interface, which can perform various operations through the command line. 1. File and directory operations use ls, cd, mkdir, rm and other commands to manage files and directories. 2. User and permission management ensures system security and resource allocation through useradd, passwd, chmod and other commands. 3. Process management uses ps, kill and other commands to monitor and control system processes. 4. Network operations include ping, ifconfig, ssh and other commands to configure and manage network connections. 5. System monitoring and maintenance use commands such as top, df, du to understand the system's operating status and resource usage.

Introduction Linux is a powerful operating system favored by developers, system administrators, and power users due to its flexibility and efficiency. However, frequently using long and complex commands can be tedious and er

Linux is suitable for servers, development environments, and embedded systems. 1. As a server operating system, Linux is stable and efficient, and is often used to deploy high-concurrency applications. 2. As a development environment, Linux provides efficient command line tools and package management systems to improve development efficiency. 3. In embedded systems, Linux is lightweight and customizable, suitable for environments with limited resources.

Introduction: Securing the Digital Frontier with Linux-Based Ethical Hacking In our increasingly interconnected world, cybersecurity is paramount. Ethical hacking and penetration testing are vital for proactively identifying and mitigating vulnerabi

The methods for basic Linux learning from scratch include: 1. Understand the file system and command line interface, 2. Master basic commands such as ls, cd, mkdir, 3. Learn file operations, such as creating and editing files, 4. Explore advanced usage such as pipelines and grep commands, 5. Master debugging skills and performance optimization, 6. Continuously improve skills through practice and exploration.

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.

The disadvantages of Linux include user experience, software compatibility, hardware support, and learning curve. 1. The user experience is not as friendly as Windows or macOS, and it relies on the command line interface. 2. The software compatibility is not as good as other systems and lacks native versions of many commercial software. 3. Hardware support is not as comprehensive as Windows, and drivers may be compiled manually. 4. The learning curve is steep, and mastering command line operations requires time and patience.

Linuxisnothardtolearn,butthedifficultydependsonyourbackgroundandgoals.ForthosewithOSexperience,especiallycommand-linefamiliarity,Linuxisaneasytransition.Beginnersmayfaceasteeperlearningcurvebutcanmanagewithproperresources.Linux'sopen-sourcenature,bas


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Atom editor mac version download
The most popular open source editor

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

SublimeText3 Chinese version
Chinese version, very easy to use

WebStorm Mac version
Useful JavaScript development tools

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft