linux守护进程内的shell命令

时间:2015-08-17 09:09:39

标签: c++ c linux daemon

我写了daemon in C/C++ in linux。 现在我想在守护进程中输出ls -l(列表目录)命令,并将命令输出写入文件。

我知道如何从我的守护进程写入文件,但是,

我不知道如何执行ls -l命令并在缓冲区中获取输出。

这是代码......

   /* Create a new SID for the child process */
    sid = setsid();

    if (sid < 0) {
      /* Log any failures here */

      ofs << "set sid : fail";
      ofs.close();
      exit(EXIT_FAILURE);
    }

        ofs << "\nchdir :" << chdir(filePath) << "\n";

    /* Change the current working directory */
    if ((chdir(filePath)) < 0) {
      /* Log any failures here */

      ofs << "chdir : fail";
      ofs.close();
      exit(EXIT_FAILURE);
    }

    /* Close out the standard file descriptors */
    close(STDIN_FILENO);
    close(STDOUT_FILENO);
    close(STDERR_FILENO);       

        while(1){
            //here I want to execute the ls -l and get output of the command
        }

1 个答案:

答案 0 :(得分:2)

您可以使用执行shell命令的popen并将输出作为管道返回:

#include <stdio.h>
FILE* pipe = popen("ls -l", "r");
if (!pipe) return "ERROR";

您还可以使用system执行任何shell命令:

#include <stdlib.h>
int system(const char *command);

要获取ls -l的输出,请将其转发到文件ls -l >> myls.log,而不是读取该文件。

system("ls -l >> myls.log");