Sponsored Content
Top Forums Programming find the fully-qualified path for the app my module is running in Post 95389 by vino on Tuesday 10th of January 2006 11:58:14 PM
Old 01-11-2006
Quote:
Originally Posted by jim mcnamara
There is no one perfect way to do this in Linux/Unix.
I agree. But the following solution might work for the OP (Caution.. a /proc based solution.)

Code:
#include <limits.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

/* Finds the path containing the currently running program executable.
  The path is placed into BUFFER, which is of length LEN. Returns
  the number of characters in the path, or -1 on error. */

size_t get_executable_path (char* buffer, size_t len)
{
 char* path_end;
 /* Read the target of /proc/self/exe. */
 if (readlink ("/proc/self/exe", buffer, len) <= 0)
  return -1;
 /* Find the last occurrence of a forward slash, the path separator. */
 path_end = strrchr (buffer, '/');
 if (path_end == NULL)
  return -1;
 /* Advance to the character past the last slash. */
 ++path_end;
 /* Obtain the directory containing the program by truncating the
   path after the last slash. */
 *path_end = '\0';
 /* The length of the path is the number of characters up through the
   last slash. */
 return (size_t) (path_end - buffer);
}

int main ()
{
 char path[PATH_MAX];
 get_executable_path (path, sizeof (path));
 printf ("this program is in the directory %s\n", path);
 return 0;
}

This solution fixes problems such as env settings which are exclusive for the app, and which are required to be set by the user prior to executing the app.

I picked this up from the net a long time ago.

Last edited by vino; 01-11-2006 at 01:11 AM..
 

10 More Discussions You Might Find Interesting

1. Programming

Need help with C app on Oracle running on Solaris 6

Hello, I would really appreciate some help with a problem my current client is having. He has an old legacy app that does his company's financial accounting and ERP for manufacturing, etc. The app was written by a company called "Just in time" in Austin, TX, and they are no longer in business. ... (2 Replies)
Discussion started by: w0lf
2 Replies

2. Solaris

Hostname not fully qualified..

Hi Friends.. I have a small problem with the hostname of my system.I had installed Solaris 10 X86 on Vmware in my windows 2000 system.After booting of my solaris system,if i give check-hostname command it says ,, hostname is not fully qualified ,,change the hostname to hostname.xxx.xxxxxx.com... (3 Replies)
Discussion started by: sdspawankumar
3 Replies

3. Programming

Running app after logout and monitoring

Hello! I just programmed a very simple app, it's function is to report every minute the state of the memory and cpu and put it to and xml. All this stuff is working ok since I'm logged in into the machine, but i want it to run as a service, how can I do that?? P.S: Any one knows how can I... (1 Reply)
Discussion started by: ncatdesigner
1 Replies

4. IP Networking

Unable to ping freebsd machine using fully qualified domain name

hi all. am unable to ping a freebsd machine using fully qualified domain name from a windows machine. i have already set the fqdn for the machine. plz advise me. thanks. (2 Replies)
Discussion started by: coolatt
2 Replies

5. Windows & DOS: Issues & Discussions

Display running 'app' in terminal titlebar?

Hi. I was, not too long ago, an OS X home user. One of the things I remember from using the Apple-installed Terminal is: whenever an executable that took more than a split second to do its thing was running, its name would appear in the title bar in a way similar to "Terminal: ssh" or "Terminal:... (0 Replies)
Discussion started by: SilversleevesX
0 Replies

6. Shell Programming and Scripting

how to get fully qualified path name

hi actually i want to get fully qualified path name of the file when the file name is entered as command line argument while running a shell script ex. if i run the shell as $./test.sh ./nsdnet_file.csv the it should display me the full path of the file like /dialp/Release/bin/nsdnet_file.csv... (3 Replies)
Discussion started by: priyanka3006
3 Replies

7. AIX

AIX 6.1 app running on 5.x?

Hi, A quick question. If I build an application on AIX 6.1 TL3 using XL C/C++ 8.0 and Oracle 10g, can I then take those binaries and run them on AIX 5.3 and previous? Regards Kevin (3 Replies)
Discussion started by: KevB
3 Replies

8. Solaris

Can't change fully qualified host name

I tried changing my /etc/inet/hosts file for my server to: <ip address> <hostname> <fqdn> but when I go to reboot the file changes right back to: <ip address> <hostname> how do I get the <fqdn> to stick on a reboot. Thanks (2 Replies)
Discussion started by: jastanle84
2 Replies

9. Programming

Running bin file from a module

Hi I actually wrote a simple module and I need to call a bin file from that module. Could you give me some hints how to do that? (I tried with stdlib.h and 'system()', but cannot call that function from a module). Regards. (28 Replies)
Discussion started by: Chrisdot
28 Replies

10. UNIX for Dummies Questions & Answers

How to fix Python path for some script/app?

Hello, i have: # python -V Python 2.7.6 But original for my CentOS is 2.3 or 2.4 my python folder: /root/python2.7.6 (inside are folders like lib, include, bin, share) I launched app iotop: # iotop -od 6 Traceback (most recent call last): File "/usr/bin/iotop", line 16, in... (3 Replies)
Discussion started by: postcd
3 Replies
atos(1) 						    BSD General Commands Manual 						   atos(1)

NAME
atos -- convert numeric addresses to symbols of binary images or processes SYNOPSIS
atos [-o <binary-image-file>] [-p <pid> | <partial-executable-name>] [-arch architecture] [-l <load-address>] [-s <slide>] [-printHeader] [-fullPath] [-f <address-input-file>] [<address> ...] DESCRIPTION
The atos command converts numeric addresses to their symbolic equivalents. If full debug symbol information is available, for example in a .app.dSYM sitting beside a .app, then the output of atos will include file name and source line number information. The input addresses may be given in one of three ways: 1. A list of addresses at the end of the argument list. 2. Using the -f <address-input-file> argument to specify the path of an input file containing whitespace-separated numeric addresses. 3. If no addresses were directly specified, atos enters an interactive mode, reading addresses from stdin. The symbols are found in either a binary image file or in a currently executing process, as specified by: -o <binary-image-file> The path to a binary image file in which to look up symbols. -p <pid> | <partial-executable-name> The process ID or the partial name of a currently executing process in which to look up symbols. Multiple process IDs or paths can be specified if necessary, and the two can be mixed in any order. When working with a Mach-O binary image file, atos considers only addresses and symbols defined in that binary image file, at their default locations (unless the -l or -s option is given). When working with a running process, atos considers addresses and symbols defined in all binary images currently loaded by that process, at their loaded locations. The following additional options are available. -arch architecture The particular architecure of a binary image file in which to look up symbols. -l <load-address> The load address of the binary image. This value is always assumed to be in hex, even without a "0x" prefix. The input addresses are assumed to be in a binary image with that load address. Load addresses for binary images can be found in the Binary Images: sec- tion at the bottom of crash, sample, leaks, and malloc_history reports. -s <slide> The slide value of the binary image -- this is the difference between the load address of a binary image, and the address at which the binary image was built. This slide value is subtracted from the input addresses. It is usually easier to directly specify the load address with the -l argument than to manually calculate a slide value. -printHeader If a process was specified, the first line of atos output should be a header of the form "Looking up symbols in process <pid> named: <process-name>". This is primarily used when atos is invoked as part of a stackshot(1) run, for verification of the process ID and name. -fullPath Print the full path of the source files. EXAMPLE
A stripped, optimized version of Sketch was built as an x86_64 position-independent executable (PIE) into /BuildProducts/Release. Full debug symbol information is available in Sketch.app.dSYM, which sits alongside Sketch.app. When Sketch.app was run, the Sketch binary (which was built at 0x100000000) was loaded at 0x10acde000. Running 'sample Sketch' showed 3 addresses that we want to get symbol information for -- 0x10acea1d3, 0x10ace4bea, and 0x10ace4b7a. First notice that the .dSYM is next to the .app: % ls -1 /BuildProducts/Release/ Sketch.app Sketch.app.dSYM Now, to symbolicate, we run atos with the -o flag specifying the path to the actual Sketch executable (not the .app wrapper), the -arch x86_64 flag, and the -l 0x10acde000 flag to specify the load address. % atos -o /BuildProducts/Release/Sketch.app/Contents/MacOS/Sketch -arch x86_64 -l 0x10acde000 0x10acea1d3 0x10ace4bea 0x10ace4b7a -[SKTGraphicView drawRect:] (in Sketch) (SKTGraphicView.m:445) -[SKTGraphic drawHandlesInView:] (in Sketch) (NSGeometry.h:110) -[SKTGraphic drawHandleInView:atPoint:] (in Sketch) (SKTGraphic.m:490) GETTING SYMBOLS FOR A DIFFERENT MACHINE ARCHITECTURE
It is possible to get symbols for addresses from a different machine architecture than the system on which atos is running. For example, when running atos on an Intel-based system, one may wish to get the symbol for an address that came from a backtrace of a process running on an ARM device. To do so, use the -arch flag to specify the desired architecture (such as i386 or arm) and pass in a corresponding symbol- rich Mach-O binary image file with a binary image of the corresponding architecture (such as a Universal Binary). BSD
May 9, 2017 BSD
All times are GMT -4. The time now is 10:34 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy