Какое у вас определение безопасности? Вы не будете сбивать систему, а readdir / scandir не будет сбивать вашу программу. Хотя они могут дать вам данные, которые немедленно устарели.
Обычная семантика для чтения каталога состоит в том, что если вы читаете каталог от начала до конца, вы увидите все файлы, которые не изменились за это время ровно один раз, и вы увидите файлы, которые были созданы или удалены в течение этого времени не более одного раза.
В UNIX-подобных системах readdir () и scandir () - это библиотечные функции, реализованные поверх одного и того же системного вызова (getdents () в Linux, getdirentries () в BSD). Поэтому не должно быть большой разницы в их поведении в этом отношении. Я думаю, что readdir () немного более стандартен и поэтому будет более переносимым.