我正在编写重定向函数,将命令的输出写入给定的文件名.

例如:

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;’函数相关推荐

  1. 嵌入式 linux 启动脚本 编写,[9构建嵌入式linux系统项目-启动脚本的编写.ppt

    [9构建嵌入式linux系统项目-启动脚本的编写 启动脚本 教学回顾 shell语法 管道.重定向 变量 结构性语句 教学内容 启动脚本的写法 教学要求 熟悉掌握启动脚本的写法 shell 函数 在s ...

  2. Linux下python脚本编写小结

    Linux下python脚本编写小结 1.如何在linux系统中,看是否安装了python: -which python 或者 which python3 如何在python脚本中使用shell命令: ...

  3. 嵌入式Linux设备驱动程序:编写内核设备驱动程序

    嵌入式Linux设备驱动程序:编写内核设备驱动程序 Embedded Linux device drivers: Writing a kernel device driver 编写内核设备驱动程序 最 ...

  4. linux下 为自己编写的程序 添加tab自动补全 功能

    linux下 为自己编写的程序 添加tab自动补全功能 入门 complete 在我的tmp下随便写了一个a.sh, 为他补全 edit /etc/bash_completion.d/foo _foo ...

  5. Linux 多线程应用中编写安全的信号处理函数

    2019独角兽企业重金招聘Python工程师标准>>> Linux 多线程应用中编写安全的信号处理函数 在 开发多线程应用时,开发人员一般都会考虑线程安全,会使用 pthread_m ...

  6. linux+管道+分段,Linux中shell基础、重定向、管道符、环境变量

    原标题:Linux中shell基础.重定向.管道符.环境变量 1.什么是shell Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解释器).它接收用户输入的命令并把它送入内核 ...

  7. Linux下shellcode的编写

    Linux下shellcode的编写 来源  https://xz.aliyun.com/t/2052 EdvisonV / 2018-02-14 22:00:42 / 浏览数 6638 技术文章 技 ...

  8. 在Linux下使用Vim编写C++

    在Linux下使用Vim编写C++ 在Linux下使用Vim编写C++ 进入Linux控制页面. 在 vim 编辑模式下,打开某个文件vim 编辑代码 编译 运行 运行图 后续 在Linux下使用Vi ...

  9. linux 邮件开源工具_使用Linux和开源工具编写剧本

    linux 邮件开源工具 早在今年5月,Jason van Gumster编写了4个开源工具来编写您的下一个剧本 . 它包括一些我以前从未听说过的工具,一些我非常熟悉的工具,并且缺少一些我自己喜欢的工 ...

最新文章

  1. java例7_Java中单例七种写法(懒汉、恶汉、静态内部类、双重检验锁、枚举)
  2. Python入门学习(四)
  3. Java执行存储过程
  4. iOS多线程:『pthread、NSThread』详尽总结
  5. python中二进制表示_Python中的二进制搜索:直观介绍
  6. 计算机科学与技术考研考西南交通大学,西南交大计算机科学与技术考研怎么样...
  7. 凯撒密码的实践使用-2--加密,解密的python代码事项
  8. noip_最后一遍_2-图论部分
  9. 正向代理和反向代理详解(纯小白必看 最好懂的白话文教程)
  10. html中的特殊符号表示法
  11. 免费赠品发布:Wintry Blue Wallpaper
  12. linux rarp命令,通过源码理解Rarp协议(基于linux1.2.13)
  13. 程序员接私活10个月接30单,纯赚40w!
  14. 小米5s Plus 安装Xposed框架
  15. Mysql进阶优化篇02——索引失效的10种情况及原理
  16. JAVA知识体系之JVM篇(新)
  17. DNA旋转特效 html+css
  18. 中华大地第二次大变革 看印度反思自我之四 印度穷人甘做“贫民窟业主”
  19. 系统辨识实例(2)——利用BP神经网络进行基本非线性函数辨识
  20. 视频号如何做种草号转化,视频号种草账号怎么运营:国仁楠哥

热门文章

  1. [私]-图片backup
  2. VMware虚拟机安装Ubuntu
  3. OSX 使用“终端”远程登录linux主机
  4. 2、MySQL使用(DISTINCT)过滤重复数据
  5. 1.2 Java系统流
  6. Mysql内连接_INNER JOIN
  7. 数据结构—分别用头插法和尾插法建立单链表
  8. 第一届河北工业大学程序设计竞赛校赛 【个别题的解析】
  9. Thymeleaf语法变量
  10. python profile_python程序之profile分析