формат строки предаваемой команде _popen
От: ivanpetr  
Дата: 27.11.11 04:34
Оценка:
Не работает команда if (i==1) tPipe=_popen("logman create counter ch -c ""\Процесс(ch)\""Рабочее множество"""" -f tsv", "rt"); выдает ошибку Недопустимый путь счетчика множество


27.11.11 13:11: Перенесено из 'C/C++'
Re: формат строки предаваемой команде _popen
От: Centaur Россия  
Дата: 27.11.11 08:12
Оценка: +1
Здравствуйте, ivanpetr, Вы писали:

I>Не работает команда if (i==1) tPipe=_popen("logman create counter ch -c ""\Процесс(ch)\""Рабочее множество"""" -f tsv", "rt"); выдает ошибку Недопустимый путь счетчика множество


У вас тут какой-то полный бред с кавычками. Я бы на месте компилятора отказался это компилировать.
Re: формат строки предаваемой команде _popen
От: Кодт Россия  
Дата: 27.11.11 09:10
Оценка:
Здравствуйте, ivanpetr, Вы писали:

I>Не работает команда if (i==1) tPipe=_popen("logman create counter ch -c ""\Процесс(ch)\""Рабочее множество"""" -f tsv", "rt"); выдает ошибку Недопустимый путь счетчика множество


Строка дважды неправильно закавычена — один раз по-сишному, второй раз — по-командному.
Сдвоенные кавычки в языке си воспринимаются как разрыв строки:
"hello""world" == "hello" "world" == "helloworld"
Бэкслеш — метасимвол, работает в сочетании со следующим(и) за ним симолом(-ами). Например, \\ превращается в \, \" в ", \123 — в букву с восьмеричным кодом 0123. \П — недопустимое сочетание, но компилятор милостиво трактовал его как пару обычных символов.


Аргумент команды — некий \Процесс(ch)\"Рабочее множество" (или, может быть, просто \Процесс(ch)\Рабочее множество ?)
нужно сперва закавычить по правилам шелла (это ведь винды, правильно?):
"\Процесс(ch)\""Рабочее множество""" или "\Процесс(ch)\Рабочее множество" соответственно.

После этого закавычим полученную строку в си
_popen("logman create counter ch -c \"\\Процесс(ch)\\\"\"Рабочее множество\"\"\" -f tsv", "rt");
_popen("logman create counter ch -c \"\\Процесс(ch)\\Рабочее множество\" -f tsv", "rt");
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.