news 2026/8/5 4:49:07

I/O重定向程序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/29 6:15:39

无人机飞行姿态稳不稳?关键看这个MEMS IMU

惯性测量单元&#xff08;IMU&#xff09;是无人机飞控系统的核心感知部件&#xff0c;也是无人机实现稳定飞行、姿态控制与自主导航的基础硬件。无人机依靠 IMU 实时感知自身的运动与姿态状态&#xff0c;再由飞控算法快速输出控制指令&#xff0c;驱动电机与旋翼调整姿态&…

作者头像 李华
网站建设 2026/7/28 5:49:02

机器学习 —— 关联规则

摘要&#xff1a;关联规则挖掘是机器学习中用于发现数据集中项目间关联关系的技术&#xff0c;主要应用于购物篮分析等领域。该方法通过支持度和置信度指标衡量规则强度&#xff0c;其中支持度反映规则普遍性&#xff0c;置信度表示规则可靠性。使用Python的mlxtend库可实现关联…

作者头像 李华
网站建设 2026/7/26 6:38:59

计算机Java毕设实战-基于Java web的酒店管理系统设计与实现在线查询空闲客房、提交预订申请、支付押金【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/8/4 13:15:25

超声波测距设计研究

超声波测距设计研究 一、研究背景与意义 超声波测距凭借非接触式测量、抗干扰能力强、成本低廉等优势&#xff0c;广泛应用于工业液位检测、智能机器人避障、车辆倒车雷达、安防距离监测等领域。传统超声波测距系统存在测量精度低、测距范围窄、受环境因素影响大等问题&#xf…

作者头像 李华
网站建设 2026/7/26 19:18:43

跨境电商必看:Etsy保号防封全攻略(2026)

Etsy作为全球领先的手工艺品和创意商品销售平台&#xff0c;吸引了成千上万的卖家。但当你刚准备大干一场&#xff0c;Etsy新店24小时就封了&#xff1f;上架第一个产品&#xff0c;店直接没了&#xff1f;本文将带你了解常见的封号原因&#xff0c;并提供实操干货&#xff0c;…

作者头像 李华
网站建设 2026/7/28 13:42:29

自动禁用触控板工具支持winxp/win7/win8.1/win10

平时应该有朋友遇到过手不小心碰到触控板非常影响打字的体验&#xff0c;根本用上不&#xff0c;都是用鼠标&#xff0c;这个触控板就很鸡肋&#xff0c;如果要禁用&#xff0c;可以考虑使用这个工具。能禁用大部分的触控板&#xff0c;需要的保存试试。 下载地下载地址&#x…

作者头像 李华