LINUX.ORG.RU

История изменений

Исправление 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, происходит зависание?