3

我正在编写 ac 程序,它使用 execl() 函数调用进程。我得到了进程的输出以及我的 c 程序输出。我需要将使用 execl() 调用的进程的输出存储到文件中。我知道编程基础知识以及文件输入和输出。

这是我的程序:

#include<stdio.h>
#include<unistd.h>
main()
{
printf("\nDisplaying output of ifconfig\n");
execl("/sbin/ifconfig","ifconfig",NULL);
}

输出:

Displaying output of ifconfig

eth1      Link encap:Ethernet  HWaddr 02:00:00:a1:88:21  
      ...........

lo        Link encap:Local Loopback  
      ........

我需要将 ifconfig 的输出存储在文件中。我该怎么做?

4

2 回答 2

2

您可以使用popen来运行程序而不是调用execl,并将其读取出来并将其写入文件。或者使用system调用 shell 的函数,因此可以包含完整的 shell 重定向。

或使用打开文件open,然后使用dup2将其重定向到STDOUT_FILENO.

实际上,使用这样的exec功能是非常不寻常的。通常你创建一个新进程并调用exec子进程。


在这种情况下,我建议使用openand :dup2

#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>

...

/* Open the file for writing (create it if it doesn't exist) */
int fd = open("/path/to/file", O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP);

/* Make the standard output refer to the newly opened file */
dup2(fd, STDOUT_FILENO);

/* Now we don't need the file descriptor returned by `open`, so close it */
close(fd);

/* Execute the program */
execl("/sbin/ifconfig","ifconfig",NULL);

注意:我在上面的代码中没有任何类型的错误处理,你应该有。

于 2013-11-01T18:18:04.470 回答
2
 /* Open the command for reading. */
      fp = popen("COMMAND", "r");
        if (fp == NULL) {
                printf("Failed to run command\n" );
                    exit;
        }

          /* Read the output a line at a time - output it. */
          while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) {
                  printf("buffer = %s", buffer);
            }

            /* close */
            pclose(fp);
于 2013-11-01T18:24:39.877 回答