Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
shell c中的输入输出重定向_C_Linux_Shell_Io - Fatal编程技术网

shell c中的输入输出重定向

shell c中的输入输出重定向,c,linux,shell,io,C,Linux,Shell,Io,我实现了一个简单的shell。我想使用输入/输出重定向。我写了一些代码,但我的代码不起作用。这是我的代码:我认为在你的If条件下你不需要星号*。 您想将args[x]的值与符号“>”进行比较 如果不是它,您能再多写一点发生的错误吗?(习惯在printf语句中写入%s\n) 当编译的程序名为myshell时,当它作为参数提供时,您将看到>: ./myshell arg1 arg2 ">" arg4 如果不引用,shell将负责重定向: # Not what you want: ./mysh

我实现了一个简单的shell。我想使用输入/输出重定向。我写了一些代码,但我的代码不起作用。这是我的代码:

我认为在你的If条件下你不需要星号*。 您想将args[x]的值与符号“>”进行比较

如果不是它,您能再多写一点发生的错误吗?

(习惯在printf语句中写入
%s\n

当编译的程序名为myshell时,当它作为参数提供时,您将看到>:

./myshell arg1 arg2 ">" arg4
如果不引用
,shell将负责重定向:

# Not what you want:
./myshell arg1 arg2 > arg4

将导致使用参数arg1和arg2调用myshell,myshell的结果将重定向到arg4。

您正在将FD复制到FD 0,即
stdin
<代码>标准输出是FD 1。还应使用
dup2
,以便明确指定要分配给哪个FD以及保存FD的宏

dup2(fd, STDOUT_FILENO);
你也应该改变

if (*args[i] == '>')


否则,它将匹配以
开头的任何参数,即使后面有其他字符。

首先,*args[i]='>'-->这不起作用。我写了一个printf来尝试if语句是否正确@cadcan你能提供完整的代码吗?你的括号和codeforatting完全不好…请修复它我修复我的代码@MayukhSarkarshow the complete to以便我们能更好地理解它…如果我不添加*,这将是终端上的一个错误:“警告:指针和整数之间的比较”@Dominik
args[i]
将是地址的一个参数…您需要对其进行反引用以获取值…因此您需要它是如何实现的?我们不知道该代码段中的数组args是什么类型的,但一般来说,您可以在不使用*的情况下引用数组元素的值。请正确检查他是否正在比较“>”这是
char
int
类型数据因此,对于
argv
,您需要将其解引用两次以获得一个字符,因为它是
char*
的数组。哦,很好,该args必须是main的参数**char通常称为argv。我还没有正确理解。谢谢。如果statement@esrtr您需要使用
“>“
而不是
,以避免shell的默认设置redirection@WalterA.您的解决方案基于这样一个事实,即OP的系统基于Linux和Unix,但它是独立于平台的解决方案。我可以创建一个文件,但不能在该文件上写入任何内容。为什么?我不认为他从shell中得到了参数,用户将它们输入到他的程序中,它将它们拆分成
args[]
数组。我应用了你的解决方案。现在没有错误。谢谢你。但是我仍然可以用'>'创建一个文件,但是我不能在这个文件上写任何东西。
if (strcmp(args[i], ">") == 0)