【问题标题】:creating file for shell output redirection为 shell 输出重定向创建文件
【发布时间】:2013-10-07 19:10:07
【问题描述】:

这是一个学校作业。

所以基本上我已经为 shell 编写了一个 C 代码,它使用& 处理终止命令,并使用><. 使用管道和fork()execvp() 进行输入/输出重定向。

问题是我的输入/输出重定向只处理已经存在的文件。

我需要知道的是如何将输出重定向到一个不存在的文件 - 我知道我必须创建该文件,但我不确定它是如何工作的。

例如:ls -a < test.txt

如果 test.txt 不在目录中,我需要创建它并将输出重定向到该目录。 那么如何创建这个文件呢?

这里是一些基本的示例代码,它不会创建新文件:

        else if( '>' ==  buff[i] ){
           i++;
           j=0;

           if( ' ' == buff[i] ) 
              i++;

           while( ' ' != buff[i] && i < len )
              out_file[j++]=buff[i++];
           out_file[j]='\0';


           if ( ( ofd = open(out_file,1) ) < 0 ){
              perror("output redirected file");
              exit( 1 );
           }

           close(1);
           dup(ofd);
        }

任何有关如何输出和创建新文件的帮助将不胜感激!谢谢!

【问题讨论】:

  • 小技术说明:您的意思是ls -a &gt; test.txt

标签: c++ c shell unix redirect


【解决方案1】:

如有必要,您需要告诉open 创建文件:

if ( ( ofd = open(out_file, O_WRONLY | O_CREAT) ) < 0 ) {

请注意,如果您将命名常量用于open 的标志,您的代码将更具可读性。与功能等效的比较

if ( ( ofd = open(out_file, 513) ) < 0 ) {

甚至

if ( ( ofd = open(out_file, 0x0201) ) < 0 ) {

【讨论】:

    猜你喜欢
    • 2014-03-03
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 2014-07-01
    • 1970-01-01
    • 2015-04-04
    相关资源
    最近更新 更多