История изменений
Исправление pashazz, (текущая версия) :
Я понял почему, breakpoint на execl показал, что возвращается пустая строка, потому что в пайпе к тому времени ничего нет. Ок.
(gdb) print str.c_str()
$2 = 0x7ffff7dda218 <std::string::_Rep::_S_empty_rep_storage+24> ""
(gdb) where
#0 my_system () at fex.cpp:34
#1 0x0000000000400dc0 in main () at fex.cpp:62
(gdb) l 62
57 return status;
58 }
59
60 int main()
61 {
62 my_system();
63 }
(gdb) l 32,35
32 string str;
33 cin >> str;
34 execl (SHELL, SHELL, "-c", str.c_str(), NULL);
35 _exit (EXIT_FAILURE);
Вопрос в следующем. Как заставить child'а ждать появления каких-нибудь данных в пайпе?
И почему, если я в таком варианте кода вызываю waitpid, происходит зависание?
Исходная версия pashazz, :
Я понял почему, breakpoint на execl показал, что возвращается пустая строка, потому что в пайпе к тому времени ничего нет. Ок.
(gdb) print str.c_str()
$2 = 0x7ffff7dda218 <std::string::_Rep::_S_empty_rep_storage+24> ""
(gdb) where
#0 my_system () at fex.cpp:34
#1 0x0000000000400dc0 in main () at fex.cpp:62
(gdb) l 62
57 return status;
58 }
59
60 int main()
61 {
62 my_system();
63 }
Вопрос в следующем. Как заставить child'а ждать появления каких-нибудь данных в пайпе?
И почему, если я в таком варианте кода вызываю waitpid, происходит зависание?