YouTip LogoYouTip

Python3 Os Mkfifo

## Python3 os.mkfifo() Method The `os.mkfifo()` method in Python is used to create a **FIFO (First-In, First-Out)** named pipe at a specified path with a defined permission mode. Named pipes (FIFOs) are a type of special file used for Inter-Process Communication (IPC). They allow unrelated processes to communicate with each other by reading from and writing to the pipe as if it were a standard file. --- ### Description The `os.mkfifo()` method creates a FIFO special file named `path` with the numeric mode `mode`. The default permission mode is `0o666` (octal). > **Note:** This method is only available on Unix-like operating systems (such as Linux and macOS). It is not supported on Windows. --- ### Syntax ```python os.mkfifo(path, mode=0o666, *, dir_fd=None) ``` ### Parameters * **`path`** -- The file path where the FIFO named pipe should be created. * **`mode`** -- The numeric permission mode to set for the FIFO (expressed as an octal number, e.g., `0o666` or `0o644`). This value is modified by the process's current `umask` value. * **`dir_fd`** *(Optional)* -- A file descriptor referring to a directory. If supplied, `path` will be interpreted relative to this directory (if `path` is relative). ### Return Value This method does not return any value (`None`). --- ### Code Example The following example demonstrates how to create a FIFO named pipe using `os.mkfifo()`, write data to it from a writer process, and read data from it using a reader process. #### 1. Creating the FIFO Pipe ```python #!/usr/bin/python3 import os # Path where the FIFO will be created fifo_path = "/tmp/my_named_pipe" try: # Create the FIFO with 0o644 permissions (read/write for owner, read for others) os.mkfifo(fifo_path, 0o644) print(f"FIFO named pipe created successfully at: {fifo_path}") except FileExistsError: print(f"FIFO already exists at: {fifo_path}") ``` #### 2. Inter-Process Communication (IPC) Example Because reading and writing to a FIFO is blocking by default, you typically need two separate processes (or threads) to communicate. **Writer Process (`writer.py`):** ```python import os fifo_path = "/tmp/my_named_pipe" print("Opening FIFO for writing... (This will block until a reader opens it)") # Open the FIFO in write-only mode with open(fifo_path, 'w') as fifo: print("Reader connected! Writing data...") fifo.write("Hello from the Writer Process!\n") fifo.flush() print("Data sent successfully.") ``` **Reader Process (`reader.py`):** ```python import os fifo_path = "/tmp/my_named_pipe" print("Opening FIFO for reading...") # Open the FIFO in read-only mode with open(fifo_path, 'r') as fifo: print("Writer connected! Reading data...") data = fifo.read() print(f"Received message: {data}") ``` **Output:** If you run `writer.py` in one terminal and `reader.py` in another, they will unblock each other, and the reader terminal will output: ```text Opening FIFO for reading... Writer connected! Reading data... Received message: Hello from the Writer Process! ``` --- ### Important Considerations 1. **Platform Dependency:** `os.mkfifo()` is specific to POSIX-compliant systems (Linux, macOS, BSD). Attempting to run this on Windows will raise an `AttributeError: module 'os' has no attribute 'mkfifo'`. 2. **Blocking Behavior:** Opening a FIFO for reading blocks the calling process until another process opens it for writing, and vice versa. 3. **File Exists Error:** If a file or FIFO already exists at the specified `path`, `os.mkfifo()` will raise a `FileExistsError`. It is recommended to check if the path exists or handle the exception using a `try-except` block. 4. **Permissions (Umask):** The actual permissions of the created FIFO are affected by the system's current `umask` mask. The final permission is calculated as `mode & ~umask`.
← Python3 Os PathconfPython3 Os Makedev β†’