С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
1 / 1 / 1
Регистрация: 17.10.2013
Сообщений: 41

Реализация команды "tail" на Windows на языке C++

09.09.2016, 10:16. Показов 4338. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем задание следующее: В консоли Linux есть команда "tail", аналог которой надо сделать под консоль Windows на языке C++. В идеале требуется реализация посредством WinAPI, но можно и иначе. В общем надеюсь на помощь.
Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.09.2016, 10:16
Ответы с готовыми решениями:

Команды безусловного и условного переходов в языке Ассемблер. Реализация конструкции if-else на языке c++
Команды безусловного и условного переходов в языке Ассемблер. Реализация конструкции if-else на языке c++ и ассемблерных вставок.

Разработать командный файл (аналог команды tail в Unix)
Помогите Разработать командный файл (аналог команды tail в Unix). Командный файл печатает конец файла. По умолчанию - 10 последних строк,...

Разработать командный файл (аналог команды tail в Unix). Командный файл печатает конец файла
Здравствуйте, при запуске командного файла пишет, что "системе не удается найти указанный путь".Программа создает текстовый документ,...

6
Заблокирован
09.09.2016, 11:14
Хорошо. А в чем вопрос? Позиция для чтения в файле может быть установлена любая. Соответственно, ты можешь установить ее ближе к концу, прочитать буфер, вывести строки. И так читать, двигаясь в началу файла, пока не наберешь нужное кол-во строк, либо не достигнешь конца файла.
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
09.09.2016, 16:11
http://git.savannah.gnu.org/cg... src/tail.c
1
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
09.09.2016, 23:32
Именно, как советует nimazzzy: отобразить в память, для бинарных данных отсчитать от конца файла размер, для текстовых - обратным поиском отсчитать нужное число EOL и с этого места вывести текст.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.09.2016, 11:42
Цитата Сообщение от gazlan Посмотреть сообщение
Именно, как советует nimazzzy: отобразить в память, для бинарных данных отсчитать от конца файла размер, для текстовых - обратным поиском отсчитать нужное число EOL и с этого места вывести текст
nimazzzy советовал немного другое (если я вообще правильно его понял, т.к. написано мутно). Он предлагал читать данные с конца и искать начала строк. Такой метод не будет работать (или будет работать с большим геморроем) в случаях, когда файл содержит данные в кодировке с плавающим размером символа (типа utf-8)

Твой вариант представляет собой топорное решение, которое не будет работать в случае, когда большой файл не лезет в память

Обе проблемы можно решить так. Допустим, нам надо 10 последних строк. Завожу массив из 10 элементов. Потом побайтно (построчно, не суть) читаю файл и ищу те позиции, которые соответсвуют началу строки. В 1-й элемент массива заношу позицию в файле начала 1-й строки, во 2-й элемент массива заношу позицию в файле начала 2-й строки и т.п. Когда доходим до 11-й строки, то делаю сдвиг в массиве таким образом, что 1-й элемент массива начинает содержать позицию 2-й строки, 2-й элемент массива начинает содержать позицию 3-й строки и т.п. В освободившийся 10-й элемент записываем позицию 11-й строки. И так далее. Постоянно сдвигая массив и записывая в конец позицию текущей строки мы будем иметь информацию о позициях последних 10 строк. Математически оно выглядит как постоянный сдвиг массива, но технически это будет кольцевой буфер без операций сдвига, хотя принципиально разницы не играет, т.к. основные потери времени будут в чтении файла, а вовсе не в сдвиге массива

Но лучше всего взять и разобраться с исходниками вражеского tail'а и не изобретать велосипеды
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
10.09.2016, 12:12
Цитата Сообщение от Evg Посмотреть сообщение
nimazzzy советовал немного другое (если я вообще правильно его понял, т.к. написано мутно). Он предлагал читать данные с конца и искать начала строк. Такой метод не будет работать (или будет работать с большим геморроем) в случаях, когда файл содержит данные в кодировке с плавающим размером символа (типа utf-8)

Твой вариант представляет собой топорное решение, которое не будет работать в случае, когда большой файл не лезет в память
И то и другое и третье неверно.
  • nimazzzy написал предельно ясно
  • EOL в UTF-8 (как и любой другой символ ASCII-127) выглядит "как обычно".
  • Проецируемая в память порция файла не связана с его полным размером.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.09.2016, 13:07
Цитата Сообщение от gazlan Посмотреть сообщение
EOL в UTF-8 (как и любой другой символ ASCII-127) выглядит "как обычно"
Согласен, тут погорячился
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.09.2016, 13:07
Помогаю со студенческими работами здесь

Реализация UNIX команды "cat" в консоли Windows с использованием WinAPI
В консоли Linux есть команда "cat", аналог которой надо сделать под консоль Windows на языке C++. Требуется реализация посредством WinAPI....

Реализация команды "cat" в консоли Windows
В общем задание следующее: В консоли Linux есть команда "cat", аналог которой надо сделать под консоль Windows на языке C++. В идеале...

WPF команды и MVVM. Часть 2. Всплытие команд. Реализация команды для списка элементов [WPF, Элд Хасп]
Тема из цикла https://www.cyberforum.ru/wpf-silverlight/thread2384523.html На практике часто встречаются случаи когда команда и кнопка...

Выполните последовательно команды на языке программирования
Команда Команда на языке программирования Объявите переменную А типа int Объявите сразу две переменных А1 и А2 типа int Объявите...

Команды пересылки и обмена данными в языке Ассемблер
Обменять значения 2-х регистров процессора с использованием оперативной памяти (переменных на С++)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru