|
0 / 0 / 0
Регистрация: 14.01.2009
Сообщений: 35
|
|
Как прочитать результат работы system?19.01.2009, 11:26. Показов 11258. Ответов 31
Метки нет (Все метки)
Программа на Си с помощью вызова system запускает wget, который должен скачать из нета определенный файл, результаты своей работы wget выдает в кансоль, как в моей программе посмотреть эти результаты (тупо узнать, докачался файл или нет).
0
|
|
| 19.01.2009, 11:26 | |
|
Ответы с готовыми решениями:
31
Как вывести результат из system()? Как получить результат выполнение system()? Задачу создать 2-мя способами:1) передавать результат работы подпрограммы через результат, возвращаемый функци |
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|||||||
| 19.01.2009, 11:32 | |||||||
|
В мане по system написано:
0
|
|||||||
|
57 / 53 / 4
Регистрация: 04.05.2008
Сообщений: 272
|
|
| 19.01.2009, 11:55 | |
|
Есть команда аналогичная system, она возвращает результат из консоли в файл:
FILE *popen (const char *command, const char *tipe); затем ты можешь прочитать файл и найти ту информацию, которая тебе нужна. Подробнее об этой команде можешь прочитать в man.
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 19.01.2009, 11:57 | |
|
Зачем нам пайпы юзать там, где можно без них...
0
|
|
|
0 / 0 / 0
Регистрация: 14.01.2009
Сообщений: 35
|
|
| 19.01.2009, 13:37 [ТС] | |
|
Vourhey, спасибо за совет, но если
я запущу допустим system(wget); То он начнет закачивать файл с нета, по идее, когда он закачает, он выведет результат в кансоль, но это будет не сразу, вашим способом я могу в любой момент проверить статус?
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 19.01.2009, 13:42 | |
|
А как ты его в любой момент проверишь, если программа не завершила свою работу?
(man waitpid)
0
|
|
|
0 / 0 / 0
Регистрация: 14.01.2009
Сообщений: 35
|
|
| 19.01.2009, 13:45 [ТС] | |
|
Извините за тупость, но тогда что конкретно мне написать,
чтобы моя программа остановилась и дождалась завершения работы вызванного wget? Или как реализовать периодическую проверку работает wget или нет?
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 19.01.2009, 13:54 | |
|
Я написал выше. Можно использовать waitpid. Почитай про нее.
Добавлено через 7 минут 4 секунды Вот руссифицированный ман: http://linux.jgfs.net/man/ru/man2/wait.2.html Разобраться в ней труда не составит. Попробуй сам.
0
|
|
|
0 / 0 / 0
Регистрация: 14.01.2009
Сообщений: 35
|
||||||
| 19.01.2009, 13:55 [ТС] | ||||||
|
Прочитал.
Т.е. нужно выолнить
Но не понял, что написать в скобках waitpid, откуда узнать пид запущенного wget?
0
|
||||||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 19.01.2009, 14:04 | |
|
Обычно, сначала fork'ается дочерний процесс, потом он подменяется одной из exec-функций, соответственно после проверяется состоянее дочернего процесса. (system не создает дочерний процесс, он просто выполняет внешнюю команду)
http://www.opennet.ru/docs/RUS/glibc/glibc-23.html
0
|
|
|
0 / 0 / 0
Регистрация: 14.01.2009
Сообщений: 35
|
|
| 19.01.2009, 14:31 [ТС] | |
|
Я понял, что вы мне советуете, но к сожалению не умею работать
с fork(); Я думал, что fork запустит точно такуюже программу и вернет ее пид, но как подменить на execl("/program/wget",NULL);
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 19.01.2009, 14:40 | |
|
fork запустит текущую копию проги и вернет пид. Верно. А exec-вызовы подменяют собой работающий процесс. Сечешь?
0
|
|
|
0 / 0 / 0
Регистрация: 14.01.2009
Сообщений: 35
|
||||||
| 19.01.2009, 14:41 [ТС] | ||||||
|
А если так:
моя программа
else wait(pid); - в родительском ждем завершения дочернего будет работать или я слишком туп?
0
|
||||||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 19.01.2009, 14:48 | |
|
Будет. Только код напиши правильно, чтобы зомби не создать
![]() Если у тебя один дочерний процесс, то даже просто wait можно использовать.
1
|
|
|
0 / 0 / 0
Регистрация: 14.01.2009
Сообщений: 35
|
||||||
| 19.01.2009, 14:58 [ТС] | ||||||
|
А что происходит с визуальными компанентами в дочернем процессе,
мне нужно чтобы дочерний процесс их не трогал и своих не создавал. А как правильно завершить дочерний процесс? Что в нем написать? А зомби это как? И что значит правильно написать программу. Помните мы разбирались с перезапуском программы на си, так вот после
0
|
||||||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 19.01.2009, 15:17 | |
|
Сколько много вопросов
Погугли.Вижу, ты даже про форк не смотрел. Он создает копию родительского процесса начиная с кода вызова самого форк. Кстати, вызов system также создает fork, а потом execl внутри себя, чтобы вызвать шелл. А уже потом в нем команду. Читай маны, на все твои вопросы тут слишком много писать надо, чтобы ты все до конца понял. Я сказал, как это примерно можно сделать, ты почитай еще, а потом попробуй. Добавлено через 2 минуты 23 секунды P. S. пример своего кода сейчас не приведу, так как, линух на текущий момент от меня далеко, я не на своей тачке. Кто-нибудь придет - напишет. Если никто, то я к вечеру доберусь до своего компа.
0
|
|
|
0 / 0 / 0
Регистрация: 14.01.2009
Сообщений: 35
|
|
| 19.01.2009, 15:25 [ТС] | |
|
Т.е. если начинается с кода вызова fork, то никаких визуальных компанет,
которые были в родителе в дочернем не будет? - если это так, то это мне и надо. А после вызова execl("/program/wget",NULL) можно exit(0) написать для выхода из дочернего процесса?
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 19.01.2009, 15:41 | |
|
Зависит от того, где ты форк будешь вызывать. Ты так спрашиваешь, как будто сам не можешь проверить.
Ты хоть что-нибудь где-нибудь читаешь по поводу того, что я тебе говорю?
0
|
|
|
0 / 0 / 0
Регистрация: 14.01.2009
Сообщений: 35
|
|
| 19.01.2009, 18:01 [ТС] | |
|
Читаю, но не все понимаю, тяжело изучать си самому, да еще с середины,
а проверить пока не мог, потому что писал с работы, где нет линуха. В общем идею понял, буду разбираться, а через несколько дней, если не получится, то буду задавать вопросы с конкретными кусками кода. Спасибо за оказанную помощь. Тему пока не закрывайте.
0
|
|
|
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||
| 20.01.2009, 04:44 | ||||||
1
|
||||||
| 20.01.2009, 04:44 | |
|
Помогаю со студенческими работами здесь
20
Как вернуть результат работы функции? Как правильно сохранять результат работы
Как увидеть результат работы компилятора ?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|