Скомпилируйте файл .c (с помощью gcc) и запустите его, принимая входные данные из файла - PullRequest
0 голосов
/ 15 сентября 2018

Я создаю веб-сайт (php) для компиляции файлов .c и запускаю файл .exe с некоторыми входными данными, который находится в файле.Моя операционная система Windows.Я загружаю файл .c, а затем я выполняю команду exec (gcc ...).Не могли бы вы рассказать, как этот загруженный файл можно скомпилировать (если есть другой лучший способ), запустить с некоторыми входными данными и вернуть результаты?

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Ответ прост: из cmd, если вы хотите запустить файл test.exe с входными данными из input.txt и сохранить выходные данные в output.txt, вы просто пишете это.test.exe output.txt

0 голосов
/ 15 сентября 2018

Возможно, вы захотите использовать перенаправление (в вашем окне cmd) при запуске yourprog.exe.Поэтому, если ваши данные находятся внутри mydata.txt, вы должны запустить yourprog.exe < mydata.txt в командной строке.

Вы можете использовать file I / O (например, вызов fopen), когда ваш main имеет более одного аргумента (например, когда вы запускаете yourprog.exe mydata.txt).Затем вы проверите, когда argc передается на main> 1, и в этом случае выполните FILE*f = fopen(argv[1], "r"); и прочитаете ваш ввод (используя fscanf) из этого f (после проверки этого fне является нулевым).

Перед написанием кода обязательно прочитайте документацию (например, о каждой функции, которую вы используете).Не забудьте включить все предупреждения и отладочную информацию (поэтому скомпилируйте с gcc -Wall -Wextra -g yourprog.c -o yourprog.exe ... улучшите свой код, чтобы не получать предупреждений).

Конечно прочитайте Как отлаживать небольшие программы

Я создаю веб-сайт для компиляции файлов .c и запускаю файл .exe с некоторыми входными данными

Вы, вероятно, этого не делаетеиметь навыки, чтобы сделать это с умом (есть огромные риски безопасности);если бы вы это сделали, вы бы не задавали свой вопрос в таких смутных терминах.Почему бы вам не использовать godbolt ?

Если вы все еще хотите скомпилировать и запустить произвольный код C на общедоступном веб-сервере, сначала вам следует подумать об избежании уязвимостей (вы не хотите отправляться в тюрьму, если какой-то плохой парень на другом континенте загрузил вредоносный код C и запустил его на на вашем сервере, и вы, вероятно, будете нести ответственность и нести юридическую ответственность, когда это произойдет),Прочитайте о контейнеризация и помните, что большинство решений (их трудно понять) выше Linux (поэтому вам нужно сначала изучить Linux)

Возможно, вы также рассмотрите возможность перевода кода C в Webassembly (или, возможно, Javascript) и запустите результат в браузере пользователя.Это будет непросто, но снизить риски на веб-сервере (поскольку код C запускается в браузере клиента).

Если вы просто хотите разработать внутренний сайт (доступный только в некоторой интрасети от людей)вы доверяете) вы можете рассмотреть возможность использования PHP popen функции (для запуска какой-либо команды gcc.exe или для запуска yourprog.exe и позаботиться о ее выводе).Эта PHP-функция основана на POSIX popen (3) (для которого вы найдете множество примеров и объяснений).

Возможно, вам не хватает базовых знаний об операционных системах.Вы могли прочитать Операционные системы: Три Легких Части , чтобы получить их.Не забудьте также лучше понять протокол HTTP и HTML5 и связанные с ним технологии (AJAX, Websockets и т. Д.).Вам также может не хватать знаний о них!

Я также склонен полагать, что Linux (который используется на большинстве веб-серверов, кстати) гораздо более дружественен для ваших целей, чем Windows.Но ваши цели намного более амбициозны и трудны, чем вы думаете.

...