修改之前的myshell使之支持输入输出重定向
1.open函数
这个函数是打开一个文件(文件名叫pathname),以 flag 权限打开,flag 包括了以下几种 O_RDONLY(只读), O_WRONLY(只写), O_RDWR(读写),当文件打开成功时,函数返回所要打开的文件名, 当函数执行失败时,函数返回 -1.
2.write函数
write函数是打开一个文件描述符为 fd 的文件,并将该文件的内容写到 buf 中, 同时期望写 count 个字节,当函数执行成功时返回往 buf 中所写的字节数, 失败时返回值为 -1
3.之前编写的自主shell进行修改,使其支持输入/输出/追加重定向
#include<stdio.h>
#include<fcntl.h>
#include<sys/wait.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>int main()
{char buf[1024] = { 0 };while(1){printf("mysell#");fflush(stdout);size_t s = read( 0, buf, sizeof( buf ) );if(s > 0){buf[s - 1] = '\0';printf("%s\n", buf);}char* start = buf;char* _argv[32];char* argnext[32];_argv[0] = buf;int i = 1;while(*start){if(*start == ' '){*start = '\0';start ++;_argv[i++] = start;}else{start ++;}}_argv[i] = NULL;pid_t pid;pid = fork();if(pid < 0){perror("fork");exit(1);}if(pid == 0){int i = 0;int fd = 0;for(i = 0; _argv[i] != NULL; i++){if(strcmp(_argv[i], ">") == 0){char* file_name = _argv[i + 1];_argv[i] = NULL;close(1);fd = open(file_name, O_CREAT | O_WRONLY, 0664);break;}}execvp(_argv[0], _argv);close(fd);}else if(pid > 0){int st = 0;waitpid(pid, NULL, 0);}}return 0;
}
上一次写了一个简单的shell, 这次给其加上输入重定向
虽然加入了输出重定向,但还没有加入输入重定向以及追加重定向,以及感到,在下一篇当中将会给其加入输入重定向, 追加重定向以及管道。
修改之前的myshell使之支持输入输出重定向相关推荐
- 修改sqlarchemy源码使其支持jdbc连接mysql
注意:本文不会将所有完整源码贴出,只是将具体的思路以及部分源码贴出,需要感兴趣的读者自己实验然后实现吆. 缘起 公司最近的项目需要将之前的部分业务的数据库连接方式改为jdbc,但由于之前的项目都使用s ...
- 修改Mac默认设置使Mac支持NTFS硬盘的读写
前言 NTFS (New Technology File System),是 Windows环境的文件系统,当然,MacOS系统也支持,只不过因为竞品和专利的原因,Mac上的NTFS读写功能被隐藏了. ...
- 成功修改fastreport3.15,使其支持中日韩四(CJK)中编码PDF的导出
几天的辛苦总算有点结果,我这个几乎算是Delphi门外汉的家伙凭着对fastreport和pdf的喜好,实现了对简体PDF,繁体PDF,韩文PDF以及日文PDF的输出,这里记录下,算是留作纪念. 不过 ...
- java nifty_jme3与nifty gui1.3结合,修改使其支持中文的输入与显示
1.nifty gui1.3中修改代码,使其支持中文的输入: com.jme3.input.awt.AwtKeyInput类,添加toAWTCode(int key)方法,将jme3中的keyCode ...
- 用ffmpeg修改MP4文件头信息,使其支持流式加载及播放
经常有用户反映,有些网页中加载的mp4文件,有的可以加载一点就开始播放,有的就必须全部加载完才能播. 经核实,主要是头信息的数据顺序有关,用工具:mp4info.exe可以查看mp4文件的结构信息: ...
- 如何修改 SAP ABAP OData 模型,使其支持 $expand 操作试读版
正如本教程的开篇介绍文章SAP OData 开发教程 - 从入门到提高(包含 SEGW, RAP 和 CDP)所提到的,SAP OData 服务开发,从实现技术上来说,可以分为三大类.因此本教程也分为 ...
- mysql 支持 pdo_使php支持pdo_mysql_睿合科技
使php支持pdo_mysql_睿合科技 发表时间:2020-08-27 14:06:19 文章作者: 浏览次数: 1.下载pdo_mysql包 wget http://pecl.php.net/ge ...
- oracle数字类型ef映射,Entity Framework 学习中级篇5—使EF支持Oracle9i - ♂风车车.Net - 博客园...
从Code MSDN上下载下来的EFOracleProvider不支持Oracle9i.但是,目前我所使用的还是Oracle9i.为此,对EFOracleProvider修改了以下,以便使其支持Ora ...
- 生成自己的数字证书使网站支持HTTPS
生成自己的数字证书使网站支持HTTPS 一.了解keytool命令 二.为服务器端生成证书 三.为客户端生成证书 四.让客户端和服务器相互信任 1. 让服务器信任客户端 2. 让客户端信任服务器 五. ...
最新文章
- 田渊栋的2021年终总结:多读历史!历史就是一个大规模强化学习训练集
- Spring----Spring Boot Rest的使用方法
- HDU 1009 - FatMouse' Trade (部分背包问题)
- MassTransit中RequestResponse基本使用
- 罗马音平假名片假名转换器_零基础日语萌新该如何学习五十音?
- python的setting怎么找_python代码中使用settings
- hdu 2046 骨牌铺方格
- 寒假作业3(传说中的写软件)
- Https下字体文件无法加载的解决方案
- 利用jsoup 如何从网页中下载图片
- python批量音频转格式_GitHub - shede333/SWConvertVideoToAudio: Python批量转换 视频 为 音频MP3(即提取音频文件)...
- java并发增强工具_0318 guava并发工具
- 怎么检查计算机和打印机是否连接网络,如何检查电脑中是否已成功连接网络打印机...
- mysql implode_php implode函数应用
- Linux 重新加载 nginx 配置命令
- 中国千家主要规划设计勘察单位
- javascript 递归乘阶
- iOS主题/皮肤之SakuraKit
- localhost,127.0.0.1,本机IP
- 百度地图注册:申请百度地图秘钥
热门文章
- 如何查看Ubuntu版本,以及Linux内核版本??
- 媒资管理系统的应用与发展
- 输入参数的数目不足_sklearn.decomposition.PCA 参数速查手册
- java文本框双击可编辑_java swing 文本域双击变为可编辑
- python 发邮件_python发邮件
- 图像分割-二阶导数零交叉点的含义
- 01背包怎么不重复_带有重复物品的背包
- c# 无法将类型隐式转换_C#中的隐式类型数组
- Java PropertyPermission newPermissionCollection()方法与示例
- 十八、对已经找到轮廓的图像进行测量