Ваш read
определенно заявляет, что ему нужны только два символа, так что это все, что он получает. Вы не вводите больше символов в область st
, чтобы не допустить нарушений сегментации.
Что касается того, почему он выполняет часть df
, то на самом деле это не происходит в моей непосредственной системе, так как программа зависает до нажатия клавиши ENTER, и кажется, что ввод-вывод программы поглощает дополнительное. Но эта непосредственная система - Cygwin - см. Обновление ниже, чтобы узнать о поведении в «реальном» окне UNIX.
И вы получите EFAULT
только если st
находится за пределами вашего адресного пространства или иным образом недействителен. Это не тот случай.
Обновление:
Пробуя это в Ubuntu 9, я вижу, что поведение идентично вашему. Когда я добавляю символы asls
, программа выводит as
, затем выводит список каталогов
Это означает, что ваша программа читает только два символа, а оставшаяся остается для чтения следующей программы, которая является оболочкой.
Только убедитесь, что вы не пытаетесь ввести:
asrm -rf /
(нет, серьезно, не не делайте этого).