Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение /proc/self/cmdline 
V
    Опции темы
Alca
Дата 15.3.2011, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: нет
Всего: 50



Пытаюсь прочитать файл /proc/self/cmdline, но его размер равен 0, хотя файл не пуст, в нем есть данные.
Не понял юмора. Как тогда читать файл, не зная его размера?



--------------------
PM WWW ICQ Skype Jabber   Вверх
Alca
Дата 15.3.2011, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: нет
Всего: 50



Почему размер нулевой?

Это сообщение отредактировал(а) Alca - 15.3.2011, 13:27


--------------------
PM WWW ICQ Skype Jabber   Вверх
bsa
Дата 15.3.2011, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



потому что содержимое файла создается в момент чтения.
PM   Вверх
Alca
Дата 15.3.2011, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: нет
Всего: 50



  а можно как то узнать размер данных?


--------------------
PM WWW ICQ Skype Jabber   Вверх
svlary
Дата 16.3.2011, 06:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 8.9.2009

Репутация: 4
Всего: 4



Цитата(Alca @  15.3.2011,  16:54 Найти цитируемый пост)
а можно как то узнать размер данных? 

  Зачем ?  Что бы выполнить системный вызов read(...) ?  Надо просто выделить буфер размера, заведомо большего, чем размер командной строки и читать в него :

Код

char cmd_buf[4096];
ssize_t rc;
. . . 
rc = read (fd, cmd_buf, 4095);

И в переменной rc будет реальное значение длины командной строки.  

PM MAIL   Вверх
Alca
Дата 16.3.2011, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: нет
Всего: 50



Цитата

Надо просто выделить буфер размера, заведомо большего, чем размер командной строки и читать в него 

А что макс. размер коммандной строки это константа?


--------------------
PM WWW ICQ Skype Jabber   Вверх
MAKCim
Дата 16.3.2011, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(Alca @  16.3.2011,  10:26 Найти цитируемый пост)
А что макс. размер коммандной строки это константа? 

в цикле читай пока read() не возвратит 0


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alca
Дата 16.3.2011, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: нет
Всего: 50



Спасибо


--------------------
PM WWW ICQ Skype Jabber   Вверх
svlary
Дата 17.3.2011, 05:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 8.9.2009

Репутация: 4
Всего: 4



Цитата(Alca @  16.3.2011,  10:26 Найти цитируемый пост)
макс. размер коммандной строки это константа? 

МАКСИМАЛЬНЫЙ оразмер, разумеется - константа. И можно даже эту константу найти где-то в исходных кодах bash...

PM MAIL   Вверх
Alca
Дата 17.3.2011, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: нет
Всего: 50



Код

#include <unistd.h>
...
printf("%ld\n", sysconf(_SC_ARG_MAX));


Добавлено @ 10:26
Цитата

       ARG_MAX - _SC_ARG_MAX
              The maximum length of the arguments to the exec(3) family of functions.
              Must not be less than _POSIX_ARG_MAX (4096).


Цитата

BUGS         top
       It is difficult to use ARG_MAX because it is not specified how much of the
       argument space for exec(3) is consumed by the user's environment variables.

       Some returned values may be huge; they are not suitable for allocating memory.


Добавлено через 9 минут и 40 секунд
Цитата

getconf ARG_MAX
2 097 152 (bytes)

Чего-то мне влом выделять стока памяти

Это сообщение отредактировал(а) Alca - 17.3.2011, 10:29


--------------------
PM WWW ICQ Skype Jabber   Вверх
bsa
Дата 17.3.2011, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



Зачем усложнять себе жизнь? Читаешь с помощью read() в буфер, при заполнении буфера увеличиваешь его размер в 2 раза (realloc()), дочитываешь...

Добавлено через 1 минуту и 30 секунд
А потом, в *nix существуют еще файлы устройств. Таких, как например последовательный порт. И как можно определить объем данных, передаваемых через него? Никак. Поэтому и нет функции GetFileSize() smile
PM   Вверх
Alca
Дата 17.3.2011, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: нет
Всего: 50



ясно


--------------------
PM WWW ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0533 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.