Можно ли перенаправить вывод программы в канал через саму программу? - PullRequest
0 голосов
/ 20 сентября 2011

Ну, это касается программы соревнований.

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

Соревнование оценивает выходные данные, перенаправляя выходные данные (я полагаю, с конвейером) в файл и сопоставляя его MD5 с их ....

Мой вопрос таков: есть ли в C что-либо, что не записывает в выходной поток, но все же канал получает свой ввод. Или, возможно, я даже неправильно формулирую вопрос. Но в любом случае, я нахожусь в затруднении.

Я отбиваюсь оптимизацией алгоритма. Кстати, они принимают make-файл, где многие пытались оптимизировать. Для меня ни один из флагов оптимизации не сработал. Я тоже не знаю, что еще можно с этим сделать ...

Ответы [ 2 ]

0 голосов
/ 20 сентября 2011

Если вам нужно создать программу, которая записывает свой вывод в файл, вам просто нужно:

  • откройте файл с помощью int fd = fopen("/file/path", O_WRONLY); (вам может потребоваться проверить параметры, прошло много времени с тех пор, как я занимался программированием на C), а затем write(fd, ...); или fprintf(fd, ...);
  • откройте файл с помощью fopen, закройте стандартный вывод и используйте dup2(), чтобы скопировать дескриптор файла с дескриптором файла номер 1 (т.е. стандартный вывод).
0 голосов
/ 20 сентября 2011

Вы можете попробовать fprintf на канале fd.

...