当前位置: 首页 > news >正文

I/O重定向程序

从标准输入拷贝文件或从指定磁盘文件拷贝到标准输出。

#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #define DEF_MODE S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH #define DEF_UMASK S_IWGRP|S_IWOTH #define RIO_BUFSIZE 8192 #define MAXLINE 10 typedef struct { int rio_fd; /* Descriptor for this internal buf */ int rio_cnt; /* unread bytes in internal buf */ char *rio_bufptr; /* Next unread bytes in internal buf */ char rio_buf[RIO_BUFSIZE]; /* Internal buffer */ } rio_t; void rio_readinitb(rio_t *rp, int fd); ssize_t rio_readlineb(rio_t *rp, void *usrbuf, size_t maxlen); static ssize_t rio_read(rio_t *rp, char *usrbuf, size_t n); ssize_t rio_writen(int fd, void *usrbuf, size_t n); int main(int argc, char **argv) { int n,fd1; rio_t rio; char buf[MAXLINE]; if((argc!=1) && (argc!=2)) { fprintf(stderr,"usage : %s <infile>\n",argv[0]); exit(1); } if(argc==2){ int fd; if((fd=open(argv[1], O_RDONLY,0))<0) { fprintf(stderr,"Couldn'tread%s\n",argv[1]); exit(1); } dup2(fd, STDIN_FILENO); close(fd); } rio_readinitb(&rio, STDIN_FILENO); while((n = rio_readlineb(&rio, buf, MAXLINE)) != 0) rio_writen(STDOUT_FILENO, buf, n); return 0; } ssize_t rio_writen(int fd, void *usrbuf, size_t n) { size_t nleft = n; ssize_t nwritten; char *bufp = usrbuf; while (nleft > 0){ if ((nwritten = write(fd, bufp, nleft)) <= 0){ if (errno == EINTR) /* Interrupted by sig handler return */ nwritten = 0; /* and call write() again */ else return -1; /* errno set by write() */ } nleft -= nwritten; bufp += nwritten; } return n; } void rio_readinitb(rio_t *rp, int fd) { rp->rio_fd = fd; rp->rio_cnt = 0; rp->rio_bufptr = rp->rio_buf; } ssize_t rio_readlineb(rio_t *rp, void *usrbuf, size_t maxlen) { int n, rc; char c, *bufp = usrbuf; for (n = 1; n < maxlen; n++) { if ((rc = rio_read(rp, &c, 1)) == 1) { *bufp++ = c; if (c == '\n') break; } else if (rc == 0) { if (n == 1) return 0; /* EOF, no data read */ else break; /* EOF, some data was read */ } else return -1; /* Error */ } *bufp = 0; return n; } static ssize_t rio_read(rio_t *rp, char *usrbuf, size_t n) { int cnt; while (rp->rio_cnt <= 0) { /* Refill if buf is empty */ rp->rio_cnt = read(rp->rio_fd, rp->rio_buf, sizeof(rp->rio_buf)); if (rp->rio_cnt < 0) { if (errno != EINTR) /* Interrupted by sig handler return */ return -1; } else if (rp->rio_cnt == 0) /* EOF */ return 0; else rp->rio_bufptr = rp->rio_buf; /* Reset buffer ptr */ } /* Copy min(n, rp->rio_cnt) bytes from internal buf to user buf */ cnt = n; if (rp->rio_cnt < n) cnt = rp->rio_cnt; memcpy(usrbuf, rp->rio_bufptr, cnt); rp->rio_bufptr += cnt; rp->rio_cnt -= cnt; return cnt; }
http://www.jsqmd.com/news/322167/

相关文章:

  • 使用C#调用Yolo26模型的ONNX
  • 数据库分库分表策略:水平拆分与垂直拆分指南
  • 分布式系统面试必问:CAP理论与BASE理论的核心区别与应用场景
  • 廊坊英语雅思培训机构推荐,2026权威测评出国雅思辅导机构口碑榜
  • 铜线绕桩防虫害古代园艺
  • 2026防水材料选购指南:防水涂料厂家排名?全屋卫士成优选
  • Adobe Flash Player 一款轻量级浏览器插件
  • 自动化测试框架:Selenium与Puppeteer选型建议
  • 车灯控制与报警系统设计
  • springer期刊提供的LaTex模板参考文献问题
  • 无人机飞行姿态稳不稳?关键看这个MEMS IMU
  • 2026年高端木作终极选型指南:TOP5预算60万+工艺落地与交付确定性融合的别墅大平层深度测评
  • AI 办公提效的关键是什么?5 个可复用工作流(含 Prompt 模板)
  • 2026气体检测仪市场行情及五大品牌盘点
  • 超声波深度测量仪设计与实现
  • 多项目并行管理四步法:从混沌到有序的系统化解决方案
  • 生成式AI催生GEO优化,如何成为其内容权威信源?
  • 安徽省管理咨询公司前十推荐:助力企业升级转型的专业智囊团
  • 元空AI+Clawdbot:7×24 AI办公智能体新形态详解(长期上下文/自动化任务/工具粘合)
  • 2026年高端木作推荐:真实案例可核验与效果参考路径融合的看图选型深度解析
  • 超声波测距设计研究
  • SCI制图——Origin信号处理:FFT变换与滤波降噪
  • 2026年市面上靠谱的气动吊定做厂家口碑排行榜单,0.5吨气动葫芦/10吨气动葫芦/风动葫芦,气动吊实力厂家哪家权威
  • Avalonia FuncValueConverter的使用
  • 2026年口碑好的电视台广告公司选哪家,户外led大屏广告/广播电台广告,电视台广告代理公司怎么选
  • 腾讯云渠道商:轻量服务器低成本托管小型网站的 5 个关键实践
  • 2026年高端木作终极选型指南:TOP5源头工厂工艺落地与交付确定性融合的广州深圳东莞对比深度解析
  • 图形学WebGL渲染管线与3D可视化性能优化
  • IF=101.8首图激酶树
  • 国产医药研发项目管理系统都有哪些?药企为什么要选择专用系统?