Dear R-people! I??m trying to write a C program that write to the standard input of R and read the standard output. I can perfectly read the R output, but I??m not able of writing anything to R. This program really works with the 'cat?? UNIX command, but it does not work with R. What I??m doing wrong??? It is possible to do it??? I want to start R once and use it thousands of times... that??s why I??m trying to use this system. pipe(fdW); pipe(fdR); pid = fork(); if (pid==-1) perror("Error fork"); if (pid==0) { close(0); dup(fdW[0]); close(fdW[0]); close(fdW[1]); close(1); dup(fdR[1]); close(fdR[1]); close(fdR[0]); execlp("R","R","--slave",NULL); perror("Error exec"); } else { close(fdW[0]); close(fdR[1]); write(fdW[1], "3+7", 3); total = 0; while (total<3) { leidos = read(fdR[0], &k, sizeof(k)); printf("leidos son %d \n",leidos); k[leidos]='\0'; if (leidos > 0){ total = total + leidos; printf("%s\n",k); } } } exit(0); Best regards, Victor
Victor Robles wrote:> Dear R-people! > > I??m trying to write a C program that write to the standard input of R > and read the standard output. > I can perfectly read the R output, but I??m not able of writing anything > to R. > > This program really works with the 'cat?? UNIX command, but it does not > work with R. What I??m doing wrong??? It is possible to do it???Please read the manual "Writing R Extensions", in particular the lines about "Rprintf". Uwe Ligges> I want to start R once and use it thousands of times... that??s why I??m > trying to use this system. > > > pipe(fdW); > pipe(fdR); > > pid = fork(); > if (pid==-1) > perror("Error fork"); > > if (pid==0) > { > close(0); > dup(fdW[0]); > close(fdW[0]); > close(fdW[1]); > > close(1); > dup(fdR[1]); > close(fdR[1]); > close(fdR[0]); > > execlp("R","R","--slave",NULL); > perror("Error exec"); > } > else > { > close(fdW[0]); > close(fdR[1]); > > write(fdW[1], "3+7", 3); > > total = 0; > while (total<3) > { > leidos = read(fdR[0], &k, sizeof(k)); > printf("leidos son %d \n",leidos); > k[leidos]='\0'; > if (leidos > 0){ > total = total + leidos; > printf("%s\n",k); > } > } > } > exit(0); > > > Best regards, > Victor > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
On Wed, 17 Nov 2004, Victor Robles wrote:> I'm trying to write a C program that write to the standard input of R > and read the standard output. I can perfectly read the R output, but > I'm not able of writing anything to R. > [SNIP C code]Several years ago, I wrote some software that used S-plus as its back-end and Java for the front-end. I found what worked best was to add a pseudoterminal inbetween; you can use the code from "UNIX Programming Environment" to create one. The solution was later reused when a similar project used R for its back-end. ---------------------------------------------------------- SIGSIG -- signature too long (core dumped)
On Wed, 17 Nov 2004, Victor Robles wrote:> I'm trying to write a C program that write to the standard input of R > and read the standard output. I can perfectly read the R output, but > I'm not able of writing anything to R. > [SNIP C code]Several years ago, I wrote some software that used S-plus as its back-end and Java for the front-end. I found what worked best was to add a pseudoterminal inbetween; you can use the code from "UNIX Programming Environment" to create one. The solution was later reused when a similar project used R for its back-end. ---------------------------------------------------------- SIGSIG -- signature too long (core dumped)