Собественно subj. Мне надо моей программулине задать название, под которым она будет запускаться.
>Собественно subj. Мне надо моей программулине задать название, под которым она будет
>запускаться.
Тебе помочь придумать название программе ? Или что ? :))
>Собественно subj. Мне надо моей программулине задать название, под которым она будет
>запускаться.Если ты имеешь в виду название процесса, которое выдаётся при ps, то его точно можно изменить. Где-то я раньше про это читал. Уже точно не помню, но возможно через argv[0], но может это и глупость.
>Если ты имеешь в виду название процесса, которое выдаётся при ps, то
>его точно можно изменить. Где-то я раньше про это читал. Уже
>точно не помню, но возможно через argv[0], но может это и
>глупость.Во, ща посмотрю так или не так.
>>Если ты имеешь в виду название процесса, которое выдаётся при ps, то
>>его точно можно изменить. Где-то я раньше про это читал. Уже
>>точно не помню, но возможно через argv[0], но может это и
>>глупость.
>
>Во, ща посмотрю так или не так.
argv[argc-1][strlen(argv[argc-1])] = 1;
/* Tell the kernel - we have new command line */
sprintf(argv[0], "MyNewName");
>
>argv[argc-1][strlen(argv[argc-1])] = 1;
>/* Tell the kernel - we have new command line */
>sprintf(argv[0], "MyNewName");Segmentation Fault.
>>
>>argv[argc-1][strlen(argv[argc-1])] = 1;
>>/* Tell the kernel - we have new command line */
>>sprintf(argv[0], "MyNewName");
>
>Segmentation Fault.Это неправильный код, но идея похожа на правду.
Сначала необходимо сделать vfork() или fork(),
а потом вызвать себя с помощью execve, передав как argv[0] необходимое имя ...
>Собественно subj. Мне надо моей программулине задать название, под которым она будет
>запускаться.
под freebsd есть ф-ция setproctitleили можно поюзать вот это (стянуто из сырцов ftpd)
#include <stdio.h>
#include <stdarg.h>char **Argv = NULL; /* pointer to argument vector */
char *LastArgv = NULL; /* end of argv */void setproctitle(const char *fmt, ...)
{
int i;
va_list ap;
char *p, *bp, ch;
char buf[256];va_start(ap,fmt);
(void)vsnprintf(buf, sizeof(buf), fmt, ap);
/* make ps print our process name */
p = Argv[0];i = strlen(buf);
if (i > LastArgv - p - 2) {
i = LastArgv - p - 2;
buf[i] = '\0';
}
bp = buf;
while (ch = *bp++)
if (ch != '\n' && ch != '\r')
*p++ = ch;
while (p < LastArgv)
*p++ = ' ';
}
int main(int argc,char **argv,char **envp)
{
/*
* * Save start and extent of argv for setproctitle.
* */
Argv = argv;
while (*envp)
envp++;
LastArgv = envp[-1] + strlen(envp[-1]);setproctitle("new title");
sleep(1000);
return 0;
}