C - я должен указать тип монтирования каждый раз? - PullRequest
0 голосов
/ 02 июля 2018

Мне нужно ваше мнение о системном вызове: mount ().

Сегодня проблема вернула это сомнение. Я вижу много кода, который вызывает / использует системный вызов mount (). Но недавно, запустив Valgrind, он показал ошибку, говорящую, что вы нельзя указать NULL в качестве аргумента 'type' функции монтирования.

Пример из кода ядра:

ret = mount("/dev/pts/ptmx", "/dev/ptmx", NULL, MS_BIND, NULL);

Valgrind жаловался на первый параметр NULL, который ссылается на к типу крепления:

==18012== Syscall param mount(type) points to unaddressable byte(s)

После замены NULL на тип "none" ошибка исчезла. Я прочитал документацию об этом, говоря, что лучше использовать «нет» для вариантов BIND и MOVE. Но я не прав насчет этого.

Биты x86_64 не используют тип для BIND и MOVE. Если я читаю код правой арки.

Есть ли у вас какая-либо документация или рекомендации по использованию этого системного вызова?

1 Ответ

0 голосов
/ 02 июля 2018

При передаче MS_BIND в mount() среди флагов передача NULL в качестве третьего аргумента не является неправильной, а передача "none" не является ни лучше, ни хуже. Оба полагаются на тот факт, что этот аргумент игнорируется при монтировании bind (и это задокументировано в руководстве ).

Valgrind прав в том, что NULL является указателем, который не указывает на данные, и что при представлении в качестве аргумента "none" затухает до указателя, который указывает на данные. Недостаточно разглядеть, что здесь это не имеет значения. Если молчание Valgrind об этой проблеме является вашей главной задачей, тогда передача "none" является хорошим способом сделать это.

Сам, я, вероятно, просто использовал бы NULL, поскольку это лучше передает другим (включая меня в будущем), что я передаю то, что не ожидаю использовать. По той же причине, если бы я использовал здесь строку для смягчения раздражительного Вальгринда, я бы, вероятно, выбрал еще одну, например "not used because MS_BIND".

С другой стороны, когда данные монтирования хранятся в файле (, т.е. /etc/fstab), вы должны поместить что-то в поле, а там , "нет" делает большую работу по передаче информации, которая важна на этом уровне, для потребителей этих данных.

...