簡體   English   中英

如何在新創建的c shell中放置輸入/輸出重定向?

[英]How to put input/output redirection in your newly-created c shell?

我想知道是否有人可以指出正確的方向? 例如,如果我寫“ ls> contents.txt”,我希望將ls的輸出寫到content.txt中。

到目前為止,這就是我所擁有的。

 #include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <ctype.h>

void  parse(char *line, char **argv)
{
     while (*line != '\0') { 
          while (*line == ' ' || *line == '\t' || *line == '\n')
               *line++ = '\0';     
          *argv++ = line;          
          while (*line != '\0' && *line != ' ' && 
                 *line != '\t' && *line != '\n') 
               line++;            
     }
     *argv = '\0';               
}

void  execute(char **argv)
{
     pid_t  pid;
     int    status;

     if ((pid = fork()) < 0) {     
          printf("*** ERROR: forking child process failed\n");
          exit(1);
     }
     else if (pid == 0) {          
          if (execvp(*argv, argv) < 0) {     
               printf("*** ERROR: exec failed\n");
               exit(1);
          }

     }
     else {                                 
          while (wait(&status) != pid)      
               ;
     }
}
void main(char *envp[])
{
    char line[1024];
    char *argv[64];
    while (1){
      printf("shell>>");
      gets(line);
      printf("\n");
      parse(line, argv);
      if (strcmp(argv[0], "exit")==0)
    exit(0);
      execute(argv);
    }
}

您將需要:

  • 在傳遞的命令中檢查> [filename]
  • 如果存在,則打開相關文件進行輸出,然后使用dup2將獲得的fd附加到派生進程的stdout中。

這足以將您指向正確的方向。

在pid == 0的測試與運行execvp()的測試之間,需要以下代碼:

int fd=open(outputfile,O_WRONLY|O_CREAT); 
dup2(fd,1);

這實際上會將execvp()運行的程序的標准輸出設置為此新文件。 您將必須修改解析代碼以查找“>”並將其后的內容解析為文件名並存儲在outputfile中。 您還需要進行一些其他檢查,以確保新文件打開確定,等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM