LINUX.ORG.RU

extern char *__progname; /* Program name, from crt0. */

Подойдет?

tvn
()
Ответ на: комментарий от anonymous

А как можно использовать строку содержащую имя программы? - Как тебе надо так и используй. ;))

Или я не понял вопрос?

tvn
()

наверное все-таки не понял. Вопрос в следующем: некая программа загружает библиотеку и вызывает из нее определенную функцию. Как из этой функции узнать имя программы, обратившейся к ней? Можно узнать PID родительского процесса и по нему найти в /proc'e нужный файл и прочитать его содержимое, но дело в том, что ф-ция вызывается слишком часто и чтение файлов не желательно т.к. будет тормозить.

anonymous
()

через environ variable не катит?
[0][lg:p3][~/tmp/lalala]$ cat m.c
int
main()
{
   setenv("PROGNAME", "TEST_PASSED", 1);
    
   return print_title();
}
[0][lg:p3][~/tmp/lalala]$ cat pt.c
extern char *getenv(const char *);

int
print_title()
{
  char *title = 0;

  title = getenv("PROGNAME");
  if (title)
    printf("OK: title: %s\n", title);
  else
    printf("can't get PROGNAME\n");

  return 0;
}
[0][lg:p3][~/tmp/lalala]$ gcc -c pt.c
[0][lg:p3][~/tmp/lalala]$ ar -cr libpt.a pt.o   
[0][lg:p3][~/tmp/lalala]$ ranlib libpt.a 
[0][lg:p3][~/tmp/lalala]$ gcc -o m m.c -L. -lpt
[0][lg:p3][~/tmp/lalala]$ ./m
OK: title: TEST_PASSED
[0][lg:p3][~/tmp/lalala]$ 

lg ★★
()

в том-то и дело, что я делаю только библиотеку не знаю какие программы будут ее вызывать и тем более у меня нет их исходников )).

anonymous
()

В библиотеке можно попытаться использовать переменные char * program_invocation_name (или char* program_invocation_short_name). Правда компилироваться нужно с флагом _GNU_SOURCE (info libc).

anonymous
()

Библиотека языка C GNU glibc: --- Библиотека имеет функции и переменные, разработанные, чтобы облегчить для вашей программы вывод информативных сообщений об ошибках в обычном формате. Функции strerror и perror дают Вам стандартное сообщение об ошибках для данного кода ошибки; переменная program_invocation_short_name дает Вам удобный доступ к имени программы, которая столкнулась с ошибкой. ---

наверное это мне не подходит. Ведь имя программы тпм появляется только при ошибке.

anonymous
()
Ответ на: комментарий от anonymous

Имя программы и содержится в этой переменной. extern необходимо потому что она объявлена в crt0.

Как пример рекомендую посмотреть на syslog.c - в нем выводится имя программы которая к нему обратилась, реализовано все это в виде библиотеки

tvn
()

огромное спасибо, все получилось, надо было только добавить extern в строке extern char * program_invocation_name;

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.