[rrd-developers] rrdtool args too long for shell - solution

rik1083 rkearsley at blueyonder.co.uk
Sun Aug 1 02:38:43 CEST 2010

Hi Guys
Thanks for your wonderful tool, I use it all the time. 
I've been hitting a problem while combining several rrds into a single
graph, for example:
300 rrds, 14 datasources in each.. and combining them all
basically 100's if not 1000's of arguements
The problem is that the shell was hitting a length limit!
My solution - write args to text file (1 per line) and pass the filename as
the arg and read them in from the text file..
I'm not sure I did it in a great way but it works and could be useful if
anyone comes across this problem too. Code:
I renamed the original main() to rrdmain() and  made a new main which calls
rrdmain() after it has read the args from the file:

int main (int argc, char **argv[]) {

	FILE*fp ;
	int i;
	char line[1600];
	char** myargv;
	char* carriage;

	if (argc > 2 && strcmp("file", argv[1]) == 0) {

         fp = fopen ( argv[2],"r" ) ;
         if( fp == NULL )
               puts ( "cannot open file" ) ;
               return 0;

		i = 0;
			//printf("line %s", line);
		myargv = calloc(i, sizeof(char*));

		fp = fopen ( argv[2],"r" ) ;
			carriage = strrchr(line, '\n');
			if (carriage != NULL) { *carriage = 0; }
			myargv[i] = strdup(line);
			printf("line %s", line);
		rrdmain(i, myargv);
	else {
		rrdmain(argc, argv);

int rrdmain(
    int argc,
    char **argv[])
{ //original main follows unmodified

again, it's not great but it got me past the limitation and maybe you can
use the idea in future versions


View this message in context: http://rrd-mailinglists.937164.n2.nabble.com/rrdtool-args-too-long-for-shell-solution-tp5359835p5359835.html
Sent from the RRDtool Developers Mailinglist mailing list archive at Nabble.com.

More information about the rrd-developers mailing list