我有一个练习要求我补充代码,以便他的执行结果等同于$ date> out.txt
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#define NEWFILE (O_WRONLY | O_CREAT)
#define MODE644 (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
int main() {
int fd;
if (fork() == 0) {
//// Code Here for add/// Result
fd=open("out.txt",NEWFILE,MODE644);
dup2(fd,1);
close(fd);
execlp("date",NULL);
exit(0);
}
wait(NULL);
}
我无法理解已添加的三行:
fd=open("out.txt",NEWFILE,MODE644);
dup2(fd,1);
close(fd);
答案 0 :(得分:0)
棘手的一点是dup2
。
int dup2(int fildes, int fildes2);
关闭filedes2
并将其作为filedes
的克隆。这意味着,从现在开始,当您引用filedes2
时,就像您提到filedes
一样。回到您的代码,您应该知道STDOUT_FILENO
是1
。
所以你的代码意味着:
filedes
)STDOUT_FILENO
并将其引用至filedes
答案 1 :(得分:0)
open
打开文件并返回文件描述符。 dup2(fildes, fildes2)
“将导致文件描述符fildes2引用与文件描述符fildes相同的打开文件描述”,即它关闭标准输出(如果它打开)并使stdout成为新文件描述符的副本。 close
然后关闭fd
,因为它不再需要,因为stdout现在是您刚刚打开的文件。