正在重定向C中的stderr



我正在用C编写一个简单的shell,遇到了一个小问题。我有以下功能:

int execStdErr(char** parsedArguments, int numberOfArgs) {
fflush(stderr);
int fd;
int parsedCommandLength = 0;
char** parsedCommand = parseLine(parsedArguments[0], &parsedCommandLength);
parsedArguments[numberOfArgs - 1] = deleteSpaces(parsedArguments[numberOfArgs - 1]);
if (fork() == 0) {
if (fd = open(parsedArguments[numberOfArgs - 1], O_WRONLY | O_CREAT |O_TRUNC,  S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) < 0) {
perror("lsh");
return 1;
}
if (dup2(fd, 2) < 0) {
perror("lsh") ;
return 1;
}
close(fd);
execvp(parsedCommand[0], parsedCommand);
exit(0);
}
close(fd);
wait(NULL);
return 0;
}

parsedArguments是由2>分割的参数,然后我将最后一个作为我的文件名,并通过在空间上分割它们来处理前一个(它们在parsedCommand中(。由于某种原因,stderr在屏幕上打印,如果它不存在,它会创建一个文件,但它总是空的。我不知道这里可能出了什么问题。

常见错误:

if (fd = open(...) < 0) 

相当于

if (fd = (open(...) < 0)) 

这不是你想要的。您需要:

if ( (fd = open(...)) < 0) 

open成功时,open(...) < 0评估为false,fd = open(...) < 00分配给fd。但是,open返回的值丢失了。

相关内容

  • 没有找到相关文章

最新更新