Одна возможность состоит в том, что HTTP требует, чтобы строки заканчивались CRLF ("\r\n"
); фактически, большинство интернет-протоколов используют линии.
Теперь, есть некоторые смягчающие наблюдения, которые могут относиться к вашему коду. Стандарт C говорит, что текстовые потоки должны преобразовываться из локальных окончаний собственных строк в \n
при вводе и из \n
в локальные окончания внутренних строк при выводе. Вопрос будет: «Является ли stdout
текстовым потоком или двоичным потоком в Windows?», И на этот вопрос я не знаю ответа (но «текст» - правдоподобное предположение - в этом случае код должно нормально работать на Windows).
Так как сообщение об ошибке идентифицирует проблему как байт 0x90, который не показан в коде, возможно, здесь есть что-то еще. Вы сами запускали программу?
Разве расширение для исполняемого файла не должно быть .exe
в Windows? Возможно, ваша программа интерпретирует cmd.exe
или какой-то другой интерпретатор команд для интерпретации какого-либо сценария, и он вам не очень нравится. (Тем не менее, ISTR указывает, что GCC в Windows добавляет суффикс .exe
, поэтому фактические результаты из ваших компиляций равны first.cgi.exe
.)