Как создать файл, только если он не существует?

Я написал демон UNIX (нацеленный на Debian, но это не должно иметь значения), и я хотел предоставить какой-то способ создания «pid-файла» (файла, который содержит идентификатор процесса демона).

Я искал способ открыть файлтолько если этоне существует, но не может найти.

В принципе, я мог бы сделать что-то вроде:

if (fileexists())
{
  //fail...
}
else
{
  //create it with fopen() or similar
}

Но в его нынешнем виде этот код не выполняет задачу атомарным образом, и это будет опасно, поскольку другой процесс может создать файл во время моего теста и создания файла.

Ребята, у вас есть идеи, как это сделать?

Спасибо.

P.S: Бонус за решение, которое включает в себя толькоstd::streams.

Ответы на вопрос(5)

Ваш ответ на вопрос