Первая линия
printf((fileStat.st_mode & S_IRUSR) ? "r" : "-");
Это печатает r
если есть права на чтение (S_IRUSR) и -
в противном случае.
Чтобы предотвратить против форматной строки атаки (https://en.wikipedia.org/wiki/Uncontrolled_format_string), вы должны написать:
printf("%c", (fileStat.st_mode & S_IRUSR) ? 'r' : '-');
Вторая линия
printf((fileStat.st_mode & S_IWUSR) ? "w" : "-");
Это печатает w
если есть записи разрешений (S_IWUSR) и -
. Опять же, чтобы предотвратить атаки форматной строки, вы должны написать:
printf("%c", (fileStat.st_mode & S_IWUSR) ? 'w' : '-');
&
является побитовое и оператора. В этом случае он используется для проверки наличия битового поля. Переменная x
могла быть установлена, например, A | B | C
. Для того, чтобы проверить, если C
немного дальше, писать
if (x & C)
// the bit has been set
Это побитовое и оператор – alain
Спасибо! Я новичок в C. –