linux 重定向 2gt;gt;,编写我自己的linux shell I / O重定向’gt;’函数
我正在编写重定向函数,将命令的输出写入给定的文件名.
例如:
echo Hello World> hello.txt会将’Hello World’写入hello.txt.
ls -al> file_list.txt会将当前目录中所有文件/目录名称的列表写入file_list.txt.
到目前为止,我的功能定义为:
int my_redirect(char **args, int count) {
if (count == 0 || args[count + 1] == NULL) {
printf("The redirect function must follow a command and be followed by a target filename.\n");
return 1;
}
char *filename = args[count + 1];
//Concatenates each argument into a string separated by spaces to form the command
char *command = (char *) malloc(256);
for (int i = 0; i < (count); i++) {
if (i == 0) {
strcpy(command, args[i]);
strcat(command, " ");
}
else if (i == count - 1) {
strcat(command, args[i]);
}
else {
strcat(command, args[i]);
strcat(command, " ");
}
}
//command execution to file goes here
free(command);
return 1;
}
其中args [count]是“>”.
如何执行args [0]到args [count-1]的字符串给出的命令到args [count 1]给出的文件?
编辑
这些是我们给出的指示:
“通过向文件添加stdout的重定向来改进你的shell.只有在完成功能后才尝试1.为>解析行,将所有内容作为命令,然后将第一个单词作为文件名(忽略> ;,|等).
标准输出被写出到文件描述符1(stdin为0,stderr为2).因此,可以通过打开文件,并使用dup2系统调用将其文件描述符复制到1来实现此任务.
int f = open( filename , O_WRONLY|O_CREAT|O_TRUNC, 0666) ;
dup2( f , 1 ) ;
注意:使用系统调用open not library wrapper fopen here.“
解决方法:
如果允许您以特殊方式解决此问题,那么它仅适用于一系列问题,例如将命令的stdout捕获到文件中,您可以使用< stdio中的popen()函数重新发明轮子.H取代.
该计划草图:
>确定输出文件名
>打开输出文件进行写入
>确定命令和参数
>构造从args到>的命令字符串.
>调用FILE * cmd = popen(命令,“r”);
>从cmd流读取行,写入输出文件
>在cmd流上没有EOF的情况下转到6.
> pclose(cmd),fclose输出流
只有当您的教师不希望您使用fork,dup和friends时才这样做.
标签:shell,c-3,linux,io-redirection
来源: https://codeday.me/bug/20190711/1431445.html
linux 重定向 2gt;gt;,编写我自己的linux shell I / O重定向’gt;’函数相关推荐
- 嵌入式 linux 启动脚本 编写,[9构建嵌入式linux系统项目-启动脚本的编写.ppt
[9构建嵌入式linux系统项目-启动脚本的编写 启动脚本 教学回顾 shell语法 管道.重定向 变量 结构性语句 教学内容 启动脚本的写法 教学要求 熟悉掌握启动脚本的写法 shell 函数 在s ...
- Linux下python脚本编写小结
Linux下python脚本编写小结 1.如何在linux系统中,看是否安装了python: -which python 或者 which python3 如何在python脚本中使用shell命令: ...
- 嵌入式Linux设备驱动程序:编写内核设备驱动程序
嵌入式Linux设备驱动程序:编写内核设备驱动程序 Embedded Linux device drivers: Writing a kernel device driver 编写内核设备驱动程序 最 ...
- linux下 为自己编写的程序 添加tab自动补全 功能
linux下 为自己编写的程序 添加tab自动补全功能 入门 complete 在我的tmp下随便写了一个a.sh, 为他补全 edit /etc/bash_completion.d/foo _foo ...
- Linux 多线程应用中编写安全的信号处理函数
2019独角兽企业重金招聘Python工程师标准>>> Linux 多线程应用中编写安全的信号处理函数 在 开发多线程应用时,开发人员一般都会考虑线程安全,会使用 pthread_m ...
- linux+管道+分段,Linux中shell基础、重定向、管道符、环境变量
原标题:Linux中shell基础.重定向.管道符.环境变量 1.什么是shell Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解释器).它接收用户输入的命令并把它送入内核 ...
- Linux下shellcode的编写
Linux下shellcode的编写 来源 https://xz.aliyun.com/t/2052 EdvisonV / 2018-02-14 22:00:42 / 浏览数 6638 技术文章 技 ...
- 在Linux下使用Vim编写C++
在Linux下使用Vim编写C++ 在Linux下使用Vim编写C++ 进入Linux控制页面. 在 vim 编辑模式下,打开某个文件vim 编辑代码 编译 运行 运行图 后续 在Linux下使用Vi ...
- linux 邮件开源工具_使用Linux和开源工具编写剧本
linux 邮件开源工具 早在今年5月,Jason van Gumster编写了4个开源工具来编写您的下一个剧本 . 它包括一些我以前从未听说过的工具,一些我非常熟悉的工具,并且缺少一些我自己喜欢的工 ...
最新文章
- java例7_Java中单例七种写法(懒汉、恶汉、静态内部类、双重检验锁、枚举)
- Python入门学习(四)
- Java执行存储过程
- iOS多线程:『pthread、NSThread』详尽总结
- python中二进制表示_Python中的二进制搜索:直观介绍
- 计算机科学与技术考研考西南交通大学,西南交大计算机科学与技术考研怎么样...
- 凯撒密码的实践使用-2--加密,解密的python代码事项
- noip_最后一遍_2-图论部分
- 正向代理和反向代理详解(纯小白必看 最好懂的白话文教程)
- html中的特殊符号表示法
- 免费赠品发布:Wintry Blue Wallpaper
- linux rarp命令,通过源码理解Rarp协议(基于linux1.2.13)
- 程序员接私活10个月接30单,纯赚40w!
- 小米5s Plus 安装Xposed框架
- Mysql进阶优化篇02——索引失效的10种情况及原理
- JAVA知识体系之JVM篇(新)
- DNA旋转特效 html+css
- 中华大地第二次大变革 看印度反思自我之四 印度穷人甘做“贫民窟业主”
- 系统辨识实例(2)——利用BP神经网络进行基本非线性函数辨识
- 视频号如何做种草号转化,视频号种草账号怎么运营:国仁楠哥