单线程读fifo写文件
来源:互联网 发布:鬼谷战术风雨家淘宝 编辑:程序博客网 时间:2024/05/16 15:20
int log_fifo2file(char *fifoname, char *filename, size_t size, int expire, int *exitflag){ int fd1, fd2; size_t nread, nwrite, sum; char file[PATH_MAX], filenew[PATH_MAX], tmp[16]; char buffer[65536]; struct pollfd pfds[1]; int nfds; time_t create, now; struct stat st; struct tm tm; if(fifoname == NULL || filename == NULL) return EINVAL; /* open fifo */ mkfifo(fifoname, 0644); if(stat(fifoname, &st) != 0) return errno; if(!S_ISFIFO(st.st_mode)) return -1; if((fd1 = open(fifoname, O_RDWR|O_NONBLOCK, 0)) < 0) return errno; pfds[0].fd = fd1; pfds[0].events = POLLIN; /* open file */ snprintf(file, sizeof(file), "%s.tmp", filename);write: if((fd2 = open(file, O_WRONLY|O_NONBLOCK|O_CREAT, 0644)) < 0) return errno; create = time(NULL); sum = 0; /* read fifo, write file */ while(!*exitflag){ nfds = poll(pfds, 1, 1000); if(nfds <= 0) goto check; nread = read(fd1, buffer, sizeof(buffer)); if(nread < 0) continue; if(nread == 0) break; nwrite = write(fd2, buffer, nread); if(nwrite < 0) continue; sum += nwrite;check: now = time(NULL); if((size > 0 && sum > size) || (expire > 0 && now > create + expire)){ close(fd2); localtime_r(&now, &tm); sprintf(tmp, "%04d%02d%02d%02d%02d%02d", tm.tm_year+1900, tm.tm_mon+1,tm.tm_mday, tm.tm_hour, tm.tm_min, tm .tm_sec); snprintf(filenew, sizeof(filenew), "%s-%s.log", filename, tmp); rename(file, filenew); goto write; } } close(fd1); close(fd2); now = time(NULL); localtime_r(&now, &tm); sprintf(tmp, "%04d%02d%02d%02d%02d%02d", tm.tm_year+1900, tm.tm_mon+1,tm.tm_mday, tm.tm_hour, tm.tm_min, tm .tm_sec); snprintf(filenew, sizeof(filenew), "%s-%s.log", filename, tmp); rename(file, filenew); return 0;}
0 0
- 单线程读fifo写文件
- Java 单线程写文件 多线程读文件
- C/C++实现FIFO(FIFO满,写失败;FIFO空,读失败
- 单线程写多线程读安全的结构体
- 单线程写多线程读安全的结构体
- FIFO管道写规则
- FIFO 两个进程同时写同一个FIFO
- c++写的单线程扫描器
- 用C写的单线程扫描器
- TCP单线程上传文件
- 11-单线程下载文件
- 四个线程写四个文件
- FIFO 和普通文件
- 用文件初始化FIFO
- FIFO文件实现分析
- fifo文件(未完)
- FIFO和线程的使用
- 单线程支持断点续传文件下载
- 进程与线程的区别(面试高频问题)
- javax.xml.ws.soap.SOAPFaultException: Cannot create a secure XMLInputFactory
- 数据链路层的是三个基本问题
- AndroidStudio与GitHub
- 九度OJ 1352:和为S的两个数字 (查找)
- 单线程读fifo写文件
- ajax的基础:XMLHttpRequest对象
- Linux设备驱动程序简介
- 魔方阵
- C 专家编程的一些小知识点
- android 图片缩放手势
- android 转场之transition
- 1032. Sharing (25)
- JSON 和 XML 优缺点的比较