I actually wish to obtain all the network parameters like IP address, DNS server etc. on a .txt file using a C program on Linux.
Is there a way to obtain the output of a linux command(like ifconfig) on a .txt file using a C program? [duplicate]
Asked Answered
You want popen()
. Here's an example, taken from... (see below).
void get_popen_data() {
FILE *pf;
char command[COMMAND_LEN];
char data[DATA_SIZE];
// Execute a process listing
sprintf(command, "ps aux wwwf");
// Setup our pipe for reading and execute our command.
pf = popen(command,"r");
if(!pf){
fprintf(stderr, "Could not open pipe for output.\n");
return;
}
// Grab data from process execution
fgets(data, DATA_SIZE , pf);
// Print grabbed data to the screen.
fprintf(stdout, "-%s-\n",data);
if (pclose(pf) != 0)
fprintf(stderr," Error: Failed to close command stream \n");
return;
}
Edit: I have removed the link to the original source code as it looks like a domain change has occurred and the site now contains some nasty looking malware.
Yeah but too tasty not to answer. –
Kinser
Another example of this: How can I run an external program from C and parse its output? –
Livraison
Yes, popen
is good,while I have another way. You just open the file and use dup2
convert the fileds to STDOUT_FINO
, then call system
,do anything you want. the output is just print to the filea.txt
Code:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc,char *argv[])
{
int fd;
if(argc != 2)
{printf("./a.out <cmdString>\n"); return -1;}
if((fd = open("a.txt",O_RDWR|O_CREAT|O_TRUNC)) < 0)
{printf("open a.txt error\n");return -1;}
if(dup2(fd,STDOUT_FILENO) != STDOUT_FILENO)
{printf("dup2 error\n");return -1;}
system(argv[1]);
close(fd);
return 0;
}
Compile and call ./a.out ifconfig .
File a.txt:
eth0 Link encap:Ethernet HWaddr 00:26:22:0A:CD:51
inet addr:192.168.1.4 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::226:22ff:fe0a:cd51/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1655 errors:0 dropped:0 overruns:0 frame:2
TX packets:1344 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:829059 (809.6 Kb) TX bytes:180519 (176.2 Kb)
Interrupt:17
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:617 errors:0 dropped:0 overruns:0 frame:0
TX packets:617 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:49256 (48.1 Kb) TX bytes:49256 (48.1 Kb)
© 2022 - 2024 — McMap. All rights reserved.