Во-первых, если вы хотите написать кросс-платформенного кода (для всех Linux, Windows, MacOSX), вы можете использовать некоторые мультиплатформенный рамочное библиотеки как POCO или Qt
Затем, если вы хотите POSIX конкретные функцию для создания каталога, используйте функцию mkdir. В Linux это mkdir(2) syscall (указан в syscalls(2) ...). Документация объясняет, какие заголовки должны быть включены, и является частью C standard library в Linux.
BTW, в большинстве дистрибутивов Linux вам часто не нужно компилировать Boost; на Debian-подобных дистрибутивов (например, Ubuntu), вы можете установить libboost-all-dev
мета-пакет (все связанные с Повышения библиотеки, для развития) с помощью aptitude install libboost-all-dev
или apt-get install libboost-all-dev
Чтобы получить обзор программ Linux, читайте Advanced Linux Programming
Кроме того, gcc
(и другие компиляторы C или C++) предопределяет набор символов препроцессора. См. this answer. Поэтому в вашем коде вы можете просто использовать #if linux
... #endif
, чтобы обернуть код, специфичный для Linux.
Обратите внимание, что POSIX является стандартной спецификацией: вы должны скомпилировать тот же код на всех совместимых с POSIX операционных системах (в частности, Linux, * BSD, Solaris, MacOSX). К сожалению, Windows не POSIX совместимой (даже если вы можете купить POSIX-совместимый комплект из MicroSoft)
Возможно mkdir
доступен на Windows, тоже ....
Читай также feature_test_macros(7)
Обратите внимание, что «создать каталог в том же пути, что и моя программа», является неоднозначным. Вы можете запустить свою программу в нескольких processes, каждый из которых имеет разный ток working directory. И довольно часто (по крайней мере, в Linux) исполняемая программа устанавливается в какой-то каталог (например, /usr/local/bin/
, /usr/bin/
или $HOME/bin/
), упомянутый в вашем PATH
, но не поддающийся большинству программ. Узнайте больше о Filesystem Hierarchy Standard. Поэтому я не буду persist ваши данные программного обеспечения в том же каталоге, что и ваша программа. Кроме того, вы можете использовать application checkpointing или сохраняете свои данные, используя sqlite или что-то еще (PostGreSQL, MongoDB, JSON, ...)
'_mkdir' требует заголовок' 'для включения. Также стоит отметить, что существует версия Unixode '_wmkdir', которая позволяет надежно создавать каталоги с символами вне диапазона ASCII. –
IInspectable
@ Незначительный, правый. Ред. – jch