[rrd-developers] Re: calling rrd_create directly in librrd.so

Chris Carton u43o1 at unb.ca
Fri Jul 20 01:58:20 MEST 2001

>===== Original Message From Ashok Mandala <amandala at speedtrak.com> =====
>I am trying to use the "C" API  for the rrd functionality to
>create/update rrd files. I have created the proper argument list that
>rrd_create expects, but I get a segmentation fault from rrd_create when
>I try to use it. I have stepped through the code using gdb and have
>followed it to the point in rrd_create.c where it calls getopt_long() -
>there it issues a segmentation fault when I try to step into it. I saw
>some code for getopt_long() definition in getopt1.c included with
>rrdtool - so this call should have gone to that getopt_long() and the
>source should have opened up. Is the call binding to the libc
>getopt_long() ? Has anyone faced this same problem before ?

This is a common stumbling block people run into. These functions really 
shouldn't have been designed to assume that they are called from the command 
line, but ahh well.

getopt() uses a global variable 'optind' to indicate the next option in the 
command line that has to be parsed. Before you can call these rrd functions 
you need to set this variable to 0.

Declare it like this:
extern int optind;

Then set it to zero just prior to calling any rrd_* functions.

This should fix the problem.


Unsubscribe mailto:rrd-developers-request at list.ee.ethz.ch?subject=unsubscribe
Help        mailto:rrd-developers-request at list.ee.ethz.ch?subject=help
Archive     http://www.ee.ethz.ch/~slist/rrd-developers
WebAdmin    http://www.ee.ethz.ch/~slist/lsg2.cgi

More information about the rrd-developers mailing list