Hi Aitor, As you can see, popen runs the command opening a pipe to trap its textual output. shell_reader is a pointer to the actual output reader. fgets reads the shell_reader line by line until it returns false. It places lines in buffer using 1024 as a size limit in the quoted code snippet. The read string in buffer is null terminated.
This should set you going. Edward On 06/12/2015, Edward Bartolo <[email protected]> wrote: > Hi Aitor, > > The best way for you is to use the backend's code for reference. What > you want is already implemented there. TProcesss was used to trap the > background cli commands output although there are instances where that > output is discarded. > > What you need is this from the CLI backend's code (core_functions.c): > [ code snippet from getDefaultDevices() ] > > FILE * shell_reader; > char scan_buffer[1024]; > > [...] > > shell_reader = popen(command, "r"); > if(!shell_reader) { > fprintf( > stderr, > "ERROR: getDefaultDevices(): " > "popen() failed (Error: %s)\n", > strerror(errno) > ); > > return -1; > } > > char* ptr; > while((fgets(scan_buffer, 1024, shell_reader))) { > ptr = (char*) scan_buffer; > if (strstr((char *) scan_buffer, "lo") == ptr) > continue; > else if (strstr((char *) scan_buffer, "wl") == ptr) { > snprintf( > _wl, > 1024, > "%s", > (char*) scan_buffer > ); > } else if ( > strstr((char *) scan_buffer, "eth") == ptr || > strstr((char *) scan_buffer, "en") == ptr > ) { > snprintf( > _eth, > 1024, > "%s", > (char*) scan_buffer > ); > } > } > > pclose(shell_reader); > > > Ask again if you in the event you may need more help. > > > Edward > > > On 05/12/2015, aitor_czr <[email protected]> wrote: >> Hi Edward, >> >> I'm trying to scan the existing connections. As i can see in the >> TForm1.btnLoadExistingClick(Sender: TObject) method, you used 'TProcess' >> for running external applications. In C this must be replaced by the >> 'system' command. >> >> Now i'm looking at the TProcess options. For example: >> >> Proc.Executable := 'cat'; >> Proc.Parameters.Add('/etc/network/interfaces'); >> Proc.Options := [poUsePipes, poWaitOnExit]; >> Proc.Execute; >> >> Here are the definitions: >> >> http://olympiad.cs.uct.ac.za/docs/fpc-2.4.4/fcl/process/tprocess.options.html >> >> Cheers, >> >> Aitor. >> >> On 12/04/2015 01:00 PM, Edward Bartolo <[email protected]> wrote: >>> Hi Aitor, >>> >>> I succeeded to run my trial gtk3 application with events without >>> errors. I always wanted to learn coding GUI applications for Linux in >>> C/C++. This can be a good exercise. >>> >>> Edward >>> >>> >>> On 02/12/2015, aitor_czr<[email protected]> wrote: >>>> >Woow !! >>>> > >>>> >On 02/12/15 12:08, Edward Bartolo wrote: >>>>> >>priv = (Private*) g_malloc (sizeof (struct _Private)); >> >> > _______________________________________________ Dng mailing list [email protected] https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng
