[英]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.