[Rd] File and console output does not work in C code
Benjamin Leblanc
benjamin.leblanc at igh.cnrs.fr
Thu Jan 29 12:26:03 CET 2009
Hi Simon,
Yes, absolutely right, I just did this (...) mistake using copy/paste
and forgetting to rename the called function.
Thank you for the help and the reference to graphic packages.
Benjamin
Simon Urbanek a écrit :
> Ben,
>
> just FYI - GDD package uses libgd to create R graphics images so you
> can have a look at that -- and even better you can use Cairo which has
> much better rendering than libgd ... You can look at the sources if
> you want to customize that ...
>
> Cheers,
> S
>
> PS: I don't think your c_bricks code gets called at all - that's
> probably why you don't see any output.
>
>
> On Jan 28, 2009, at 13:44 , Benjamin Leblanc wrote:
>
>> Here are more specific details: I use GNU/Linux Ubuntu 8.04 on an
>> x86_64 workstation. R environnement was compiled from 2.8.0 sources.
>>
>> Below is a part of my C code to test the file I/O.
>> When compiled as a standalone executable it prints "Test 1" on the
>> console and generates "test.txt" and "test.png" file outputs as
>> expected. When compiled as a shared library and invoked from R
>> environment via .C() interface, it does nothing (to avoid any file
>> access issue, file permissions were set to 777 in the "/test" output
>> folder).
>>
>> Am I missing a configuration option?
>> Thanks for your help,
>>
>>
>> ----
>>
>>
>> #include <R.h>
>> #include <Rmath.h>
>> #include <stdio.h>
>> #include <gd.h>
>>
>> //
>> ------------------------------------------------------------------------------
>>
>> void c_bricks(double *x, int *nx, int *nw, double *gamma, double
>> *Piw, double *V, double *W) {
>>
>> fflush(stdout);
>> printf("Test %10d\n", 1);
>> Rprintf("Test %10d\n", 2);
>> REprintf("Test %10d\n", 3);
>>
>> FILE *txtlog;
>> txtlog = fopen("/test/test.txt", "w");
>> fprintf(txtlog, "Test %10d\n", 1);
>> fclose(txtlog);
>>
>>
>> // *** Code imported from the GD2 tutorial,
>> http://www.libgd.org/Manual ***
>> // Declare the image
>> gdImagePtr im;
>> // Declare output files
>> FILE *pngout;
>> // Declare color indexes
>> int black;
>> int white;
>> // Allocate the image: 64 pixels across by 64 pixels tall
>> im = gdImageCreate(64, 64);
>> /* Allocate the color black (red, green and blue all minimum).
>> Since this is the first color in a new image, it will
>> be the background color. */
>> black = gdImageColorAllocate(im, 0, 0, 0);
>> /* Allocate the color white (red, green and blue all maximum). */
>> white = gdImageColorAllocate(im, 255, 255, 255);
>> /* Draw a line from the upper left to the lower right,
>> using white color index. */
>> gdImageLine(im, 0, 0, 63, 63, white);
>> /* Open a file for writing. "wb" means "write binary", important
>> under MSDOS, harmless under Unix. */
>> pngout = fopen("/test/test.png", "wb");
>>
>> /* Output the image to the disk file in PNG format. */
>> gdImagePng(im, pngout);
>> /* Close the files. */
>> fclose(pngout);
>> /* Destroy the image in memory. */
>> gdImageDestroy(im);
>>
>> }
>>
>>
>>
>> Prof Brian Ripley a écrit :
>>> On Wed, 28 Jan 2009, Benjamin Leblanc wrote:
>>>
>>>> Hello all,
>>>> I am getting into trouble when trying to do standard I/O from a C
>>>> function called within R environment.
>>>>
>>>> This function is written in a small C library that is loaded whith
>>>> dyn.load() and called in R via the .C() interface. I need to debug
>>>> the C code using a text file for some logs, and also to speed up
>>>> its result visualization by creating images on the fly using the GD
>>>> library.
>>>> Both of these outputs require to write into files from this C
>>>> function.
>>>> Allthough everything goes smoothly from compilation and linking to
>>>> execution into R without errors, no file is created. I have also
>>>> tried to do some simple printf(), Rprintf() and REprintf() but even
>>>> that didn't gave me any visible output.
>>>>
>>>> Am I missing something trivial? Could anyone give me a hint on why
>>>> it does not work?
>>>
>>> It works in many other packages. What OS are you using? (There
>>> known issues with using stdout and stderr from GUIs, but those are
>>> documented in the R-exts manual.)
>>>
>>>> Best regards,
>>>>
>>>> Benjamin
>>>>
>>>> --
>>>> Chromatin and Cell Biology Lab.
>>>> Institute for Human Genetics
>>>> 141, rue de la Cardonille
>>>> F-34396 Montpellier
>>>> France
>>>> Phone +33-(0)4 99 61 99 51
>>>> FAX +33-(0)4 99 61 99 01
>>>>
>>>> ______________________________________________
>>>> R-devel at r-project.org mailing list
>>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>>
>>>
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>>
>
>
More information about the R-devel
mailing list