命名管道
mkfifo
函数原型
int mkfifo(const char *pathname, mode_t mode);
mkfifo
Usage: mkfifo [OPTION]... NAME...
Create named pipes (FIFOs) with the given NAMEs.
# mkfifo tmp.txt
# file tmp.txt
tmp.txt: fifo (named pipe)
# ll tmp.txt
prw-r--r--. 1 root root 0 Oct 7 14:43 tmp.txt
# mkfifo -m ugo+rwx tmp_ugo+rwx.txt
# ll tmp_ugo+rwx.txt
prwxrwxrwx. 1 root root 0 Oct 7 14:44 tmp_ugo+rwx.txt
# mkfifo -m a+rwx tmp_a+rwx.txt
# ll tmp_a+rwx.txt
prwxrwxrwx. 1 root root 0 Oct 7 14:45 tmp_a+rwx.txt
# mkfifo -m 0777 tmp_0777.txt
# ll tmp_0777.txt
prwxrwxrwx. 1 root root 0 Oct 7 14:45 tmp_0777.txt
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <errno.h> #define INITIALIZED_BUFFER_SIZE 8 int main(int argc, char **argv) { char *file = NULL; int fd; int daemon = 0; int i; int n = 0; for (i = 1; i < argc; i++) { if (! strcmp(argv[i], "-d")) { daemon = 1; } else if (! strncmp(argv[i], "--channel=", 10)) { file = argv[i] + 10; } else if (! strncmp(argv[i], "--request-count=", 16)) { char *p = argv[i] + 16; n = atoi(p); } } if (! file) { printf("no file.\n"); return -1; } if (daemon) { printf("daemon.\n"); } // if is's daemon, acts as server to reading request // data from clients. if (daemon) { int rb_size = INITIALIZED_BUFFER_SIZE; char *rb = (char *) malloc(rb_size); int r_offs = 0; fd = open(file, O_RDONLY); if (fd == -1) { printf("file: open err.\n"); return -1; } printf("file: %s open ok.\n", file); while (1) { int nbytes = read(fd, rb + r_offs, rb_size - r_offs); /* if (nbytes == 0) { continue; } */ if (nbytes != -1) { if (nbytes == 0) { printf("read: eof.\n"); free(rb); break; } printf("read: %d bytes read, read buffer=%.*s\n", nbytes, rb_size, rb); for (i = r_offs; i < r_offs + nbytes; i++) { // one request read if (rb[i] == '\n') { printf("---req---:start\n"); printf("%.*s\n", i + 1, rb); printf("---req---:end\n"); break; } } if (i >= r_offs + nbytes) { r_offs += nbytes; if (r_offs >= rb_size) { rb_size += INITIALIZED_BUFFER_SIZE; rb = realloc(rb, rb_size); } } else { int offs = i + 1; memmove(rb, rb + offs, rb_size - offs); r_offs = r_offs + nbytes - offs; } } else { printf("read: err.\n"); } } } // else, acts as a client to writing request data to server. else { char *req = "hello, c\n"; int nbytes; fd = open(file, O_WRONLY); if (fd == -1) { printf("file: open err.\n"); return -1; } printf("file: %s open ok.\n", file); for (i = 0; i < n; i++) { nbytes = write(fd, req, strlen(req)); printf("write: %d bytes writed.\n", nbytes); } } close(fd); }
相关推荐
`demo5.c`和`demo6.c`可以用来演示如何向命名管道写入和读取数据。在`demo5.c`中,程序向`fifo`写入信息,而在`demo6.c`中,程序打开并读取`fifo`中的数据。这两个程序需要配合运行,以展示命名管道的功能。 通过...
管道文件通常由内核自动处理,但程序员可以使用 `mkfifo` 函数创建命名管道。 ```c int mkfifo(const char *pathname, mode_t mode); ``` 以上就是关于 Linux 下 C 语言编程中的文件操作相关知识点的详细介绍。...
命名管道(Named Pipe)是Linux IPC的一种方式,它提供了一种半双工的通信模式,允许一个进程将数据写入管道,而另一个进程则可以从管道中读取数据。在给定的文件“Linux进程间通信-命名管道实例.pdf”中,我们可以...
7. **Linux高级进程通信**:涉及socket编程(本地通信)、命名管道、消息队列等进程间通信方式,这些都是多进程协作的重要手段。 8. **Linux线程管理**:讲解如何在Linux中创建、挂起、终止线程,以及使用互斥锁、...
命名管道(FIFO)是管道的一种,可以在文件系统中作为一个特殊的设备文件而存在,多个进程可以通过命名管道共享数据。命名管道的特点包括可以被多个进程共享,可以在文件系统中保存以便以后使用。 共享内存是进程间...
- **进程间通信(IPC)**: 包括管道(pipe)、命名管道(fifo)、信号量(semaphore)、共享内存(shared memory)等机制。 #### 第三章 文件操作 - **文件打开与关闭**: 如何使用`open()`和`close()`函数来打开和关闭文件...
- 管道与命名管道的区别。 - 管道在进程间通信中的使用。 - FIFO的创建与使用。 - **第18章**:Internet套接字 - 套接字的基本概念。 - TCP/IP协议栈的运作原理。 - 客户端与服务器的编程模型。 - **第19章**...
- `p`:表示命名管道。 - `s`:表示套接字。 - `-`:表示普通文件。 - 第2-10个字符:表示文件权限,分成三个三元组(triplet),分别对应文件属主、同组用户和其他用户的权限。 - 每个三元组中的三个字符分别...
消息管理涉及到进程间的通信,常见的IPC机制包括管道、命名管道、信号量、共享内存等。 #### 七、线程操作 线程是进程中的执行单元,相比进程更加轻量级。在Linux下,使用线程的主要函数有: - `pthread_create()`...
在"Linux下C语言编程--进程通信、消息管理.pdf"文档中,你可能会学到如何使用这些系统调用,以及如何在C代码中实现这些通信机制。文档可能涵盖了以下内容: 1. **进程创建与管理**:讲解`fork`、`exec`系列函数的...
在Linux操作系统中,头文件是C编程中的关键组成部分,它们包含了函数声明、常量定义、数据结构以及各种宏,使得程序员可以使用操作系统提供的功能。这些头文件通常以`.h`为后缀,是编写高效、可靠的Linux程序不可或...
第2章 Linux编程环境 14 2.1 Linux环境下的编辑器 14 2.1.1 vim使用简介 14 2.1.2 使用vim建立文件 15 2.1.3 使用vim编辑文本 16 2.1.4 vim的格式设置 18 2.1.5 vim配置文件.vimrc 19 2.1.6 使用其他...
《Beginning Linux Programming 4th Edition》(中文名:Linux编程基础第四版)是一本经典的Linux编程指南书,由Neil Matthew与Richard Stones共同编著,由Wiley Publishing, Inc.出版发行。该书为读者提供了全面且...
第2章 Linux编程环境 14 2.1 Linux环境下的编辑器 14 2.1.1 vim使用简介 14 2.1.2 使用vim建立文件 15 2.1.3 使用vim编辑文本 16 2.1.4 vim的格式设置 18 2.1.5 vim配置文件.vimrc 19 2.1.6 使用其他...