Решено: Аргументы командной строки и параметры окружающей среды для текущего процесса.

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

Аватара пользователя
begin2009
Сообщения: 349
Статус: Ламер со стажем
ОС: без глюков

Решено: Аргументы командной строки и параметры окружающей среды для текущего процесса.

Сообщение begin2009 »

Собственно, как в программе на С вывести сабж?. Читал маны, но что-то не разобрался.
К примеру, если запустим в консоли "echo $PS1", то выйдет набор символов - атрибуты форматирования. Теперь откомпилируем программу:

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

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[], char *envp[])
{
 system("echo $PS1");
 return 0;
}

После компиляции и запуска не выводится НИЧЕГО! Почему? Попробовал посмотреть в сторону execl, но тоже что-то не понял. К примеру, строка:
execle("/bin/echo", "echo", "$PS1", 0, envp); - корректна или полный бред?

Прошу прощения, если задал глупый вопрос. Я старый дельфист, а вот в Си делаю только первые шаги.
Пессимист видит темный туннель, оптимист видит свет в конце туннеля, реалист видит свет, туннель и поезд.
И только машинист видит этих трех идиотов, сидящих на рельсах.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Решено: Аргументы командной строки и параметры окружающей среды для текущего процесса.

Сообщение diesel »

NAME
getenv - get an environment variable

SYNOPSIS
#include <stdlib.h>

char *getenv(const char *name);

DESCRIPTION
The getenv() function searches the environment list to find the environment variable name, and returns a pointer to the corresponding value string.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5410
ОС: Gentoo

Re: Решено: Аргументы командной строки и параметры окружающей среды для текущего процесса.

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

begin2009 писал(а):
02.11.2009 21:31
После компиляции и запуска не выводится НИЧЕГО!

Подобная программа может ничего не вывести только в одном случае - если в переменной PS1 в окружении данной программы действительно ничего нет. Вы уверены, что она у вас экспортирована?
Спасибо сказали:
Аватара пользователя
begin2009
Сообщения: 349
Статус: Ламер со стажем
ОС: без глюков

Re: Решено: Аргументы командной строки и параметры окружающей среды для текущего процесса.

Сообщение begin2009 »

diesel писал(а):
02.11.2009 22:15
NAME
getenv - get an environment variable

SYNOPSIS
#include <stdlib.h>

char *getenv(const char *name);

DESCRIPTION
The getenv() function searches the environment list to find the environment variable name, and returns a pointer to the corresponding value string.


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

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  printf(getenv("$PS1"),'\n');
  return 0;
}

Опять НИЧЕГО!

/dev/random писал(а):
03.11.2009 01:45
begin2009 писал(а):
02.11.2009 21:31
После компиляции и запуска не выводится НИЧЕГО!

Подобная программа может ничего не вывести только в одном случае - если в переменной PS1 в окружении данной программы действительно ничего нет. Вы уверены, что она у вас экспортирована?

А это как? echo $PS1 в консоле прекрасно показывает [\u@\h \W]\$

Прошу прощения, но совсем туплю!!!
Пессимист видит темный туннель, оптимист видит свет в конце туннеля, реалист видит свет, туннель и поезд.
И только машинист видит этих трех идиотов, сидящих на рельсах.
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Решено: Аргументы командной строки и параметры окружающей среды для текущего процесса.

Сообщение Portnov »

begin2009 писал(а):
03.11.2009 18:03
Опять НИЧЕГО!

man 3 printf.

begin2009 писал(а):
03.11.2009 18:03
А это как? echo $PS1 в консоле прекрасно показывает [\u@\h \W]\$

help export.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
Аватара пользователя
begin2009
Сообщения: 349
Статус: Ламер со стажем
ОС: без глюков

Re: Решено: Аргументы командной строки и параметры окружающей среды для текущего процесса.

Сообщение begin2009 »

Ну чего-то я в жизни добился!

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

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  printf("%s \n",getenv("PATH"));
  return 0;
}

Выводит список путей. Однако, если ставить PS1 (как меня на нем зациклило!), то пишет "(null)" Т.е. дело не в С, а в моем непонимании происходящего в линуксе. Можно ли поподробнее о
Подобная программа может ничего не вывести только в одном случае - если в переменной PS1 в окружении данной программы действительно ничего нет. Вы уверены, что она у вас экспортирована?
Это не "export переменная=значение" ? А как это соотносится с программой?
Пессимист видит темный туннель, оптимист видит свет в конце туннеля, реалист видит свет, туннель и поезд.
И только машинист видит этих трех идиотов, сидящих на рельсах.
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Решено: Аргументы командной строки и параметры окружающей среды для текущего процесса.

Сообщение RasenHerz »

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

int main(int, char** , char **envp) {

    while (*envp)
        printf("%s\n", *envp++);

}
Спасибо сказали:
Аватара пользователя
begin2009
Сообщения: 349
Статус: Ламер со стажем
ОС: без глюков

Re: Решено: Аргументы командной строки и параметры окружающей среды для текущего процесса.

Сообщение begin2009 »

Прошу прощения у всей честной компании, действительно тупил! Комманда "export PS1" и программа выводит эту переменную, как миленькая! А последняя программа, правда я ее немного модернизировал, так как выводило:
[rex@localhost зад1]$ gcc -o sys2 sys2.c
sys2.c: В функции ‘main’:
sys2.c:5: ошибка: опущено имя параметра
sys2.c:5: ошибка: опущено имя параметра
Полностью рабочий код:

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

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

int main(int argc, char *argv[], char **envp)
{
    while (*envp)
        printf("%s\n", *envp++);
}

Выводит ВСЕ!!! Большое спасибо, было бы можно, спасибо поставил бы несколько раз!

PS Собственно, РЕШЕНО!
Пессимист видит темный туннель, оптимист видит свет в конце туннеля, реалист видит свет, туннель и поезд.
И только машинист видит этих трех идиотов, сидящих на рельсах.
Спасибо сказали: