赞
踩
==================================================================
pipe (建立管道)
头文件:
#include <unistd.h>
定义函数:
int pipe(int filedes[2]);
函数说明 :
返回值:
DEMO:
#include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <errno.h> //函数声明 void func(void); int main(int argc, char const *argv[]) { //创建一个无名管道 filedes[0]读取端 filedes[1]写入端 int filedes[2]; int ret = pipe(filedes); if(-1 == ret) { perror("pipe error\n"); return -1; } //创建一个子进程 pid_t x = fork(); //子进程 if(x == 0) { printf("[%d]this is child process\n", (int)getpid()); //往无名管道写入端写 char *buf = malloc(25); printf("child:"); //从键盘输入 bzero(buf, 25); fgets(buf, 25, stdin); write(filedes[1], buf, strlen(buf)); } //父进程 if(x > 0) { printf("[%d]this is father process\n", (int)getpid()); //等待子进程退出 wait(NULL); //从无名管道读取端读 char *buf = malloc(25); bzero(buf, 25); read(filedes[0], buf, 25); printf("[%d]从无名管道子进程中读到的内容:%s", (int)getpid(), buf); } ret = atexit(func); if(-1 == ret) { perror("atexit error\n"); } #ifdef _EXIT _exit(0); //直接退出 #else exit(0); //正常退出 #endif } void func(void) { printf("[%d]eixt succeed\n", (int)getpid()); }
==================================================================
mkfifo ( 建立具名管道 )
头文件:
#include <sys/types.h>
#include <sys/stat.h>
定义函数 :
int mkfifo(const char * pathname, mode_t mode);
函数说明 :
返回值 :
==================================================================
access ( 判断是否具有存取文件的权限 )
头文件 :
#include <unistd.h>
定义函数 :
int access(const char * pathname, int mode);
函数说明 :
返回值:
以下两个demo都得运行
DEMO1:
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <string.h> #include <stdlib.h> #include <errno.h> #define FIFO_PATH "/tmp/xxno/mkfifo" #define BUF_SIZE 30 int main(int argc, char const *argv[]) { //创建有名管道文件: if(access(FIFO_PATH, F_OK | W_OK)) { int ret = mkfifo(FIFO_PATH, 0666); if(-1 == ret) { perror("mkfifo error\n"); return -1; } } //打开管道文件: int fd_fifo = open(FIFO_PATH, O_WRONLY); if(-1 == fd_fifo) { perror("open error\n"); return -1; } while(1) { //往管道文件里写内容: char *buf = malloc(BUF_SIZE); printf("写入管道中:\n"); fgets(buf, BUF_SIZE, stdin); write(fd_fifo, buf, strlen(buf)); } //关闭管道文件: close(fd_fifo); return 0 ; }
DEMO2:
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <string.h> #include <stdlib.h> #include <errno.h> #define FIFO_PATH "/tmp/xxno/mkfifo" #define BUF_SIZE 30 int main(int argc, char const *argv[]) { //创建有名管道文件: if(access(FIFO_PATH, F_OK | R_OK)) { int ret = mkfifo(FIFO_PATH, 0666); if(-1 == ret) { perror("mkfifo error\n"); return -1; } } //打开管道文件: int fd_fifo = open(FIFO_PATH, O_RDONLY); if(-1 == fd_fifo) { perror("open error\n"); return -1; } //往管道文件里写内容: while(1) { char *buf = malloc(BUF_SIZE); int ret = read(fd_fifo, buf, BUF_SIZE); if(0 == ret) { break; } printf("%s\n", buf); } //关闭管道文件: close(fd_fifo); return 0 ; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。