473,320 Members | 1,854 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,320 software developers and data experts.

cast to pointer to function

Hello,
I am looking for help for a cast problem:
I want to run functions in thread, using the pthread_create function.
The function to run is the first argument of pthread_create and is
expected to be of type void* (*func)(void*)
My problem is that I want to get the name of the function to run in
a .txt file that I parse at runtime.
I read the file and I get the name in a char* variable.
Now I want that this char* variable is the name of the function to
run. How do I do that?
I want to do something like:
char *func_to_run = scanf(the, good, args);
pthread_create (thread, attr, (magic cast)func_to_run, arg);

Even better, is it possible to test, at run time, that the provided
name is the name of a function that exists somewhere in the compiled
code?

Thanks for any help

Etienne

Jul 18 '07 #1
6 2832
On Wednesday 18 Jul 2007 3:25 pm, in comp.lang.c, etienne
<et***********@lip6.frwrote:
Message ID: <11**********************@g12g2000prg.googlegroups .com>
Hello,
I am looking for help for a cast problem:
I want to run functions in thread, using the pthread_create
function. The function to run is the first argument of
pthread_create and is expected to be of type void* (*func)(void*)
My problem is that I want to get the name of the function to run in
a .txt file that I parse at runtime.
I read the file and I get the name in a char* variable.
Now I want that this char* variable is the name of the function to
run. How do I do that?
I want to do something like:
char *func_to_run = scanf(the, good, args);
pthread_create (thread, attr, (magic cast)func_to_run, arg);

Even better, is it possible to test, at run time, that the provided
name is the name of a function that exists somewhere in the
compiled code?

Thanks for any help
The group has discussed your problem many times before, AFAICT, the
consensus is that this cannot be done within Standard C code. Or
maybe it *can* be done, but then you might have to write an awful
lot of code to accomplish it.

Someone much more experienced than me will probably explain shortly.
Jul 18 '07 #2
etienne <et***********@lip6.frwrote:
I am looking for help for a cast problem:
I want to run functions in thread, using the pthread_create function.
The function to run is the first argument of pthread_create and is
expected to be of type void* (*func)(void*)
My problem is that I want to get the name of the function to run in
a .txt file that I parse at runtime.
I read the file and I get the name in a char* variable.
Now I want that this char* variable is the name of the function to
run. How do I do that?
I want to do something like:
char *func_to_run = scanf(the, good, args);
pthread_create (thread, attr, (magic cast)func_to_run, arg);
Unfortunately, there's no "magic cast" that can convert a
string into a pointer to a function of that name, simply
because information about function and variable names is
not stored in the program - functions and variables get
converted to addresses during compilation (or at least
linking).
Even better, is it possible to test, at run time, that the provided
name is the name of a function that exists somewhere in the compiled
code?
If you don't insist on a "magic cast" there's a trival solution.
Just create an array of structures of a type like this:

struct name2address {
const char *name;
void * ( * addr ) ( void * );
};

Make the array large enough to hold as many structures as you
have functions that you want to know by both name and address
and then initialize the array accordingly. Now, when you read
in your file you just have to search this array for the element
where the name field is identical to the name of the function
you read from the text file. This then gives you the address of
function which you then can use to call it. And a failure to
find the function in the array of structures immediately tells
you that what you did read from the text file was invalid.

Regards, Jens
--
\ Jens Thoms Toerring ___ jt@toerring.de
\__________________________ http://toerring.de
Jul 18 '07 #3
jt@toerring.de (Jens Thoms Toerring) wrote:
# etienne <et***********@lip6.frwrote:
# I am looking for help for a cast problem:
# I want to run functions in thread, using the pthread_create function.
# The function to run is the first argument of pthread_create and is
# expected to be of type void* (*func)(void*)
# My problem is that I want to get the name of the function to run in
# a .txt file that I parse at runtime.
# I read the file and I get the name in a char* variable.
# Now I want that this char* variable is the name of the function to
# run. How do I do that?
# I want to do something like:
# char *func_to_run = scanf(the, good, args);
# pthread_create (thread, attr, (magic cast)func_to_run, arg);
#
# Unfortunately, there's no "magic cast" that can convert a
# string into a pointer to a function of that name, simply
# because information about function and variable names is

There is no magic cast in ANSI C, but there may be system
specific ways to get this. For example, you may be able to
get a load map from the loader and postprocess this into
a function name map; but this would specific to your loader
and development system.

--
SM Ryan http://www.rawbw.com/~wyrmwif/
If you plan to shoplift, let us know.
Thanks
Jul 18 '07 #4
etienne wrote:
Hello,
I am looking for help for a cast problem:
I want to run functions in thread, using the pthread_create function.
The function to run is the first argument of pthread_create and is
expected to be of type void* (*func)(void*)
My problem is that I want to get the name of the function to run in
a .txt file that I parse at runtime.
I read the file and I get the name in a char* variable.
Now I want that this char* variable is the name of the function to
run. How do I do that?
I want to do something like:
char *func_to_run = scanf(the, good, args);
pthread_create (thread, attr, (magic cast)func_to_run, arg);

Even better, is it possible to test, at run time, that the provided
name is the name of a function that exists somewhere in the compiled
code?
This is Question 20.6 in the comp.lang.c Frequently
Asked Questions (FAQ) list, <http://c-faq.com/>.

--
Eric Sosman
es*****@ieee-dot-org.invalid
Jul 18 '07 #5
etienne wrote:
I want to do something like:
char *func_to_run = scanf(the, good, args);
pthread_create (thread, attr, (magic cast)func_to_run, arg);

Even better, is it possible to test, at run time, that the provided
name is the name of a function that exists somewhere in the compiled
code?
System specific solutions exist to call the dynamic linking loader:
You might want to look at the man page of functions
dlopen(), dlsym(), dlclose()...

--
regis
Jul 18 '07 #6
On 18 juil, 15:46, regis <regis.barbanc...@free.frwrote:
etienne wrote:
I want to do something like:
char *func_to_run = scanf(the, good, args);
pthread_create (thread, attr, (magic cast)func_to_run, arg);
Even better, is it possible to test, at run time, that the provided
name is the name of a function that exists somewhere in the compiled
code?

System specific solutions exist to call the dynamic linking loader:
You might want to look at the man page of functions
dlopen(), dlsym(), dlclose()...

--
regis

These functions do more or less what I want to do. I will try to use
them.
Thanks for your help.

Jul 19 '07 #7

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

18
by: Graham Nicholls | last post by:
Hi. I'm having some fun with numbers. I've extraced an image sizes from a jpeg file img_x,img_y=image.getsize() then I'm trying to use those sizes to scale the image, but because python...
5
by: Patrick Guio | last post by:
Dear all, I have a C function that returns a void pointer (void *). This object pointer is actually a pointer to function. I have the following declarations: void *pobj; double...
10
by: LaEisem | last post by:
On-the-job, I have "inherited" a lot of old C language software. A question or two about when "casting" of null pointer constants is needed has occurred during behind-the-scenes cleanup of some...
9
by: Frederick Gotham | last post by:
Let's assume that we're working on the following system: CHAR_BIT == 8 sizeof( char* ) == 4 (i.e. 32-Bit) Furthermore, lets assume that the memory addresses are distributed as follows: ...
7
by: llothar | last post by:
When i use -W4 on visual c 7.0 i get warning C4054 translator1.c(1703) : warning C4054: 'type cast' : from function pointer 'void * (__cdecl *)(se_agent *)' to data pointer 'void *'...
18
by: Felix Kater | last post by:
I haven't been thinking about it for years but recently I've stumbled on the fact that 'casting' is actually doing (at least) two different things: On the one hand 'casting' means: 'Change...
1
by: etienne | last post by:
Hello all, i'm experimenting a problem in trying to cast a char * variable to a pointer to a function. My problem is that I want to execute functions in threads, using the pthread_create...
5
by: =?utf-8?b?QXNiasO4cm4gU8OmYsO4?= | last post by:
For various reasons, I have a number of typedefs to name arrays of various sizes and for various purposes. I also have functions taking variables of such typedef-ed types as their input arguments....
3
by: Bartc | last post by:
I have a variable like this: int *p; Sometimes this points to an int location containing the address of a void(void) function. How can I cast it so that I can call that function? I've...
7
by: * Tong * | last post by:
Hi, I couldn't figure out how to properly type cast in this case: $ cat -n type_cast.c 1 #include <stdio.h> 2 3 typedef unsigned char Byte; 4 typedef signed char Small_Int; 5
0
by: DolphinDB | last post by:
Tired of spending countless mintues downsampling your data? Look no further! In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
1
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
0
by: ArrayDB | last post by:
The error message I've encountered is; ERROR:root:Error generating model response: exception: access violation writing 0x0000000000005140, which seems to be indicative of an access violation...
1
by: PapaRatzi | last post by:
Hello, I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
0
by: Defcon1945 | last post by:
I'm trying to learn Python using Pycharm but import shutil doesn't work
1
by: Shællîpôpï 09 | last post by:
If u are using a keypad phone, how do u turn on JavaScript, to access features like WhatsApp, Facebook, Instagram....
0
by: af34tf | last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.