繁体   English   中英

从外壳execlp执行文件

[英]execution of files from shell execlp

我有一个练习,要求我补充代码,以使他的执行等效于$ 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);

棘手的是dup2

int dup2(int fildes, int fildes2);

它关闭filedes2并将其克隆为filedes 这意味着,从现在开始,当您引用filedes2 ,就好像您引用了filedes 回到您的代码,您应该知道STDOUT_FILENO1

因此,您的代码意味着:

  • 打开一个文件(描述符filedes
  • 关闭STDOUT_FILENO并使其指filedes

open打开文件并返回文件描述符。 dup2(fildes, fildes2)dup2(fildes, fildes2)文件描述符fildes2引用与文件描述符fildes相同的打开文件描述”,即,它关闭标准输出(如果已打开),并使stdout成为新文件描述符的副本。 close然后关闭不再需要的fd ,因为stdout现在是您刚刚打开的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM