2015-02-26 4 views
1

Для моего задания на домашнюю работу я должен убедиться, что мой результат соответствует решению выход 100%, или я не получаю кредит.Что такое^X в Linux?

Мой выход:

hw05-данных 10.txt: мин = 5, макс = 90, среднее = 51.23, дисперсия = 618,34

Выход решение:

hw05-данных 10.txt: мин = 5, макс = 90, среднее = 51.23, дисперсия = 618,34

Они выглядят одинаково, однако, когда я использую diff mine.txt solution.txt, я получаю разницу.

cat -tev mine.txt я и cat -tev solution.txt найти разницу, и я обнаружил, что мое выглядит следующим образом:

hw05-данных-10.txt^X: мин = 5, макс = 90, среднее = 51,23, дисперсия = 618,34 $

и раствор выглядит следующим образом:

hw05-данных 10.txt: мин = 5, макс = 90, среднее = 51.23,

дисперсия = 618,34 $

Что такое ^X? Я пробовал оглядываться, но я не могу найти ответ. Как я могу удалить это из моего вывода? Это программа на C.

+2

Не увидев вашу программу на C или как она генерирует (переформатирует входные данные?), Никто не сможет сказать вам, как ее исправить. – tink

+1

Поскольку проблема вызвана программой C, было бы лучше, если бы она была отредактирована как вопрос программирования C, а не вопрос ОС (не забудьте обновить теги). –

ответ

0

По словам мужчины странице cat команды,

-v флаг: отображение непечатаемых символов, чтобы они были видимы. Управляющие символы печатаются как ^X для управления-X; символ удаления (восьмеричный 0177) печатает как ^?. символы не-ASCII (с высоким битом) печатаются как M- (для меты) с последующим символом для низких 7 битых

-e флаг: отображение непечатаемых символов (см опции -v) , и отобразите знак доллара (`$ ') в конце каждой строки.

Таким образом, ответ ^X является Control Character. Чтобы удалить из вывода, удалите флаг -v и -e из вашей команды cat, если это возможно. Если вы не можете, вам нужно исследовать вашу программу на C: почему она генерирует этот контрольный символ.

+0

Даже при удалении флага -v он все равно печатает тот же результат с помощью^X. После запуска программы он не показывает^X, и даже когда я использую cat mine.txt, он все еще не показывает^X. Однако, когда я открываю файл my.txt в vim, он показывает^X. Я весьма озадачен. – Hazim

+0

Дальше посмотрите man-страницу, флаг '-e' также инструктирует команду' cat' отображать непечатаемые символы. Используйте команду 'man cat', чтобы узнать больше. – Raptor

+0

Скорее всего (с просмотром фактического кода) в выходном буфере есть мусор, возможно, в поле с именем файла. предварительно задавая поля для всех «\ 0», вы удалите мусор. – user3629249

1

^X является CTRL-X характер, сделать видимым, -v флагом cat.

Если вы хотите, чтобы избавиться от него, вы можете передать содержимое через что-то вроде:

tr -d '[:cntrl:]' 

Смотрите следующую расшифровку для примера (^X вставляется в bash с CTRL-VCTRL-X):

pax> echo '123^X456' | cat -v 
123^X456 

pax> echo '123^X456' | tr -d '[:cntrl:]' | cat -v 
123456 

Если вы хотите, чтобы удалить его в источника, а т han после события, вам необходимо изучить программу, которая создает файл mine.txt. Это будет тот, который вставляет персонажа изгоев.

+4

Не было бы лучше проверить, почему программа, которая создала выход, написала контрольный символ и избавилась от него в источнике? – Thilo

0

^X есть ASCII CAN, отменить управление знак. Обычно он не используется драйвером linux tty на выходе, поэтому вы не увидите его при выходе на терминал. Если вы используете его на входе, драйвер linux tty будет интерпретировать его как символ STOP и пошлет сигнал SIGSTOP в процесс переднего плана, в результате чего он прекратит выполнение, пока не получит сигнал SIGSTART. Описанный вами персонаж, вероятно, несколько вставляется в строку формата, которую вы использовали для вызова printf (3). (вы не указали свой фрагмент кода в вопросе)

Символ ^X также используется в некоторых средах окон для вырезания выделенного текста, поэтому, возможно, вы вставили его в какое-то нежелательное место в исходном коде программы.

Смежные вопросы