[cdev] утилита dd

Grigoriy A. Sitkarev sitkarev на komitex.ru
Сб Май 1 22:01:34 MSK 2010


Здравствуйте.

Федюк Сергей пишет:
> Здраствуйте
> внес изменения в утилиту, чтобы опции if и of не были жёстко привязаны к конкретной позиции
> но возникла проблема

> Проблема вот в этой строчке в name при написании в строчке  dd2 if=1 of=2 
> должно быть в последовательно в первом вхождении ша
> во втором of
> при написании printf("s",name);
> так и отобразиться, а всравнении неверно
> подскажите как правильно записать эту строку
> 		if (name == "if") {
> 			input_file = val;
> 			input_flags = 1;
> 		} else {
> 			if (name == "of") {
> 				output_file = val;
> 				output_flags = 1;
> 			}
> 		}

Вам не понятно как Си работает со строками. Вообще говоря такого типа 
как "строка" в Си нет. Строка в Си это не что иное как последовательно 
размещённые байты с ASCII-символами (массив из char) завершающийся 
специальным символом '\0' (его код равен двоичному 0). Так как строка 
это массив, то можно работать с ней также как с массивом и использовать 
указатели при работе со строками тоже удобно.

Поэтому строки сравниваются как последовательности байтов. Или вы пишете 
свою функцию или же пользуетесь библиотечными. Т.к. у вас есть 
стандартная библиотека Си, то на выбор есть минимум две функии это 
strcmp(3) и strncmp(3). Читайте man-страницу, будут вопросы - пишите.

if (strcmp(name, "if") == 0) {
	input_file = val;
	input_flags = 1;
}

У вас сравниваются не строки, а значения указателей т.е. адреса ячеек.

--
Г.А.




Подробная информация о списке рассылки cdev