LinuxForum.Fans
Тема

Добавление новых строк в среду процесса

Автор: Jonikru 7 сообщений 2468 просмотров
#37085

Привет всем!
Столько литературы уже перечитал и всё не как не могу с мёртвой точки сдвинуться. Не могу понять какие такие строки и что за понятие "среда процесса". Хотя со средой какие-то догадки всё таки имеются:) Если кому не трудно подтолкните в нужном направлении.

Задание:

Написать программу, которая добавляет новые строки в среду процесса.
#45646

По разбирал примеры, с putenv возникли проблемы или я не так понял программу. Ввожу любое слово за ним значение.

Вот что выводит:

text

FOO=foo_value1
FOO=foo_value2
FOO is not set
#45686
Jonikru написал:
По разбирал примеры, с putenv возникли проблемы или я не так понял программу. Ввожу любое слово за ним значение.

Вот что выводит:
text

FOO=foo_value1
FOO=foo_value2
FOO is not set

Всё правильно.
strncpy (query_str, "FOO", QUERY_MAX_SIZE-1);
ret = putenv (query_str);
Даст то же результат, что и FOO= в баше.
Если FOO=foo_value1 установит FOO значение foo_value1, то FOO= его снимет.

#47956

CyberDaemon, Да-да, что-то я поспешил не так понял!

Посидел по разбирался. Возникла проблема, он у меня всю мою передаваемую строку (т.е. переменная=значение) воспринимает как имя переменной, т.е. значения не видит, а значит присваивает значение этой переменной NULL.

Код:

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

#define QUERY_MAX_SIZE 32

void print_evar (const char *var) { char *tmp = getenv (var); if (tmp == NULL) { printf ("%s значение отсутствует\n", var); return; } printf ("%s=%s\n", var, tmp); }

int main() {

int ret; char *str = (char *) calloc (QUERY_MAX_SIZE, sizeof(char)), *value = (char *) calloc (QUERY_MAX_SIZE, sizeof(char)), *query_str = (char *) calloc (QUERY_MAX_SIZE, sizeof(char));

if (str == NULL) abort (); if (value == NULL) abort (); if (query_str == NULL) abort ();

printf ("Имя: "); scanf ("%s", str); printf ("Значение: "); scanf ("%s", value);

query_str=str; strcat (query_str, "="); strcat (query_str, value);

ret = putenv (query_str); if (ret != 0) abort (); print_evar (str);

exit (0);

}

Консоль:

text
Имя: FOO
Значение: foo_value1 
FOO=foo_value1 значение отсутствует
#47993
Jonikru написал:
CyberDaemon, Да-да, что-то я поспешил не так понял!

Посидел по разбирался. Возникла проблема, он у меня всю мою передаваемую строку (т.е. переменная=значение) воспринимает как имя переменной, т.е. значения не видит, а значит присваивает значение этой переменной NULL.

Код:
text
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define QUERY_MAX_SIZE 32

void print_evar (const char *var) { char *tmp = getenv (var); if (tmp == NULL) { printf ("%s значение отсутствует\n", var); return; } printf ("%s=%s\n", var, tmp); }

int main() {

int ret; char *str = (char *) calloc (QUERY_MAX_SIZE, sizeof(char)), *value = (char *) calloc (QUERY_MAX_SIZE, sizeof(char)), *query_str = (char *) calloc (QUERY_MAX_SIZE, sizeof(char));

if (str == NULL) abort (); if (value == NULL) abort (); if (query_str == NULL) abort ();

printf ("Имя: "); scanf ("%s", str); printf ("Значение: "); scanf ("%s", value);

query_str=str; strcat (query_str, "="); strcat (query_str, value);

ret = putenv (query_str); if (ret != 0) abort (); print_evar (str);

exit (0);

}

Консоль:

text
Имя: FOO
Значение: foo_value1 
FOO=foo_value1 значение отсутствует

query_str=str; Здесь ошибка.
Должно быть strcpy.

#47994
CyberDaemon написал:

query_str=str; Здесь ошибка.
Должно быть strcpy.

Точняк! Спасибо! Подзабыл уже Си:(

Подскажите, с помощью какой функции можно организовать ввод пустой строки, это надо для ввода пустого значения переменной. Для ввода используется указатель. gets - как я понял не советуют использовать...

Войдите или зарегистрируйтесь, чтобы ответить.