Linux программирование в примерах
Linux программирование в примерах читать книгу онлайн
В книге рассмотрены вопросы, связанные с программированием под Linux: файловый ввод/вывод, метаданные файлов, основы управления памятью, процессы и сигналы, пользователи и группы, вопросы интернационализации и локализации, сортировка, поиск и многие другие. Много внимания уделено средствам отладки, доступным под GNU Linux. Все темы иллюстрируются примерами кода, взятого из V7 UNIX и GNU. Эта книга может быть полезна любому, кто интересуется программированием под Linux.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Строка 49 сохраняет начальный каталог для дальнейшего использования, пользуясь
getcwd()Строка 51 вычисляет число дескрипторов, которые может использовать
nftw()getdtablesize()SPARE_FDSЭта процедура служит основанием для больших объяснений. В обычном случае по крайней мере три дескриптора уже используются для стандартного ввода, стандартного вывода и стандартной ошибки.
nftw()opendir()open()nftw()nftw()Строки 52–58 являются главным циклом над нашими аргументами; строки 53–57 проверяют ошибки; когда они появляются, код выводит диагностическое сообщение и увеличивает значение переменной
errorsСтроки 60–64 являются частью эксперимента с
FTW_CHDIR-сПо-настоящему интересной функцией является
process()nftw()switchflag69 /* process --- выводит каждый файл на нужном уровне */7071 int process(const char "file, const struct stat *sb,72 int flag, struct FTW *s)73 {74 int retval = 0;75 const char *name = file + s->base;7677 printf("%*s", s->level * 4, ""); /* сделать отступ */7879 switch (flag) {80 case FTW_F:81 printf("%s (file)n", name);82 break;83 case FTW_D:84 printf("%s (directory)n", name);85 break;86 case FTW_DNR:87 printf("%s (unreadable directory)n", name);88 break;89 case FTW_SL:90 printf("%s (symbolic link)n", name);91 break;92 case FTW_NS:93 printf("%s (stat failed): %sn", name, strerror(errno));94 break;95 case FTW_DP:96 case FTW_SLN:97 printf("%s: FTW_DP or FTW_SLN: can't happen'n", name);98 retval = 1;99 break;100 default:101 printf("%s: unknown flag %d: can't happen'n", name, flag);102 retval = 1;103 break;104 }105106 return retval;107 }Строка 75 использует '
file + s->basenameСтрока 77 делает отступ нужного размера, используя красивый трюк. Используя
%*sprintf()level * 4printf()Строки 79–104 являются оператором
switchХотя эта программа не использует
struct statЗАМЕЧАНИЕ. Джим Мейеринг (Jim Meyering), сопроводитель GNU Coreutils, замечает, что дизайн
nftw()nftw()nftw()fts()8.5. Обход дерева файлов: GNU
duGNU версия
dunftw()du
