helloworld, аргументы командной стоки. argv [0] НЕ имя пограммы.

Модератор: Модераторы разделов

Аватара пользователя
жучара
Сообщения: 1099
ОС: астралинукс

helloworld, аргументы командной стоки. argv [0] НЕ имя пограммы.

Сообщение жучара »

Друзья! Вот код:

Код: Выделить всё

/*hello.c*/
#include <stdio.h>
int main(int argc, char **argv)
{
  printf("name is %s\n",argv[0]);
  return 0;
}
Компилим, запускаем

Shell

$ gcc -o hello hello.c
$ ./hello
name is ./hello
$
Да, но если породить процесс hello из другого процесса с помощью функции execl, то argv [0] уже НЕ БУДЕТ именем ./hello

Код: Выделить всё

/*execl.c*/
#include <stdio.h>
#include <unistd.h>
int main()
{
  execl("hello", "+", NULL);
  return 0;
}

Shell

$ gcc -o execl execl.c
$ ./execl
name is +
$
Занавес.

argv[0] это всегда имя программы. Должно быть. ЧЯДНТ? Спасибо, кто откликнется.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5421
ОС: Gentoo

Re: helloworld, аргументы командной стоки. argv [0] НЕ имя пограммы.

Сообщение /dev/random »

жучара писал(а):
15.10.2025 16:54
argv[0] это всегда имя программы. Должно быть.
argv[0] - это строка, в которой запускающая программа должна передать запускаемой программе имя команды, по которой производился запуск. Это не обязательно имя программы. Оболочки (например, bash) обычно передают первое поле командной строки после всех подстановок (но до поиска исполняемого файла). В любом случае, ответственность за передачу этой строки лежит на вызывающей программе. Вы передали "+".
Спасибо сказали: