Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > Fortran > Re: calling C f...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 2 of 9 Topic 8540 of 8908
Post > Topic >>

Re: calling C from fortran

by =?iso-8859-1?q?J=F6rgen_Tegn=E9r?= <j.tegner@[EMAIL PROTECTED] > Jul 23, 2008 at 08:57 AM

On Tue, 22 Jul 2008 22:59:49 -0700, rudra wrote:

> dear friend, i have a C++ routine(badly written):
> 
> 
> main()
> {
>   ofstream myfile;
> /********* PART 1: Checking machine bit *********/
> 
> FILE *stream;
> char sys[6],*sysptr;
> int bit;
> sysptr = &sys[0];
> sys[6] = 0x0;

should be sys[5]=0x0;

> stream=popen("/bin/uname -m","r");
> fread(sysptr,1,6,stream);
> pclose(stream);
> //printf("%s\n",sysptr);
> 
> if ((strncmp(sysptr, "i686",4)==0)||
>    (strncmp(sysptr, "i386",4)==0))
>     {
> 	bit=32;
>      }
>      else {
>      bit=64;
>           }
>     myfile.open ("machine");
>     myfile << bit<<"\n";
>   myfile.close();
> 	printf("This is a %d bit machine \n",bit);
> }
> 

Are you just looking for the information uname gives or are you
experimenting 
with popen? If yes to the former, do something like this instead:



#include <stdlib.h>
#include <stdio.h>
#include <error.h>
#include <string.h>
#include <sys/utsname.h>

int my_bit_count_(void)
{
   struct utsname INFO;

   int bits=-1;

   if(uname(&INFO) < 0)
     perror("uname");
   else
     {
/*
        printf("sysname\t%s\n",INFO.sysname);
        printf("release\t%s\n",INFO.release);
        printf("version\t%s\n",INFO.version);
        printf("machine\t%s\n",INFO.machine);
        printf("nodename\t%s\n",INFO.nodename);
//      printf("domainname%s\n",INFO.domainname);
*/

        if(strcmp(INFO.machine,"i686")==0)
          bits=64;
        else
          bits=32;
     }
   return bits;
}    

> wose output is written in "machine" file. a f90 program is supposed to
> read it as
> 
> 
> 
> open(2,file="machine",status="old")
> read(2,*) bit
> close(2)
> 
> I want to use the C code as a function of the f90 program. can anybody
> tell me how can i do that?


And then call the c function something like this:

program main
  implicit none
  integer my_bit_count
  integer bitcount

  bitcount = my_bit_count()

  write(*,*)bitcount

  stop
end

compile with gfortran a.c b.f -W -Wall if yuo have a recent gcc installed.

Jörgen
 




 9 Posts in Topic:
calling C from fortran
rudra <bnrj.rudra@[EMA  2008-07-22 22:59:49 
Re: calling C from fortran
=?iso-8859-1?q?J=F6rgen_T  2008-07-23 08:57:16 
Re: calling C from fortran
fj <francois.jacq@[EMA  2008-07-23 02:02:16 
Re: calling C from fortran
rudra <bnrj.rudra@[EMA  2008-07-23 07:06:41 
Re: calling C from fortran
Dave Seaman <dseaman@[  2008-07-23 14:25:56 
Re: calling C from fortran
"James Van Buskirk&q  2008-07-23 09:40:52 
Re: calling C from fortran
Dave Seaman <dseaman@[  2008-07-23 19:57:43 
Re: calling C from fortran
fj <francois.jacq@[EMA  2008-07-23 09:03:42 
Re: calling C from fortran
Ron Ford <ron@[EMAIL P  2008-07-25 01:34:47 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Wed Nov 19 7:55:18 CST 2008.