¿Cómo crear un archivo solo si no existe?

Escribí un demonio UNIX (dirigido a Debian, pero no debería importar) y quería proporcionar alguna forma de crear un "archivo pid" (un archivo que contiene el identificador de proceso del demonio).

Busqué una forma de abrir un archivosolament si se no existe, pero no pude encontrar uno.

ásicamente, podría hacer algo como:

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

Pero tal como está, este código no realiza la tarea de manera atómica, y hacerlo sería peligroso, porque otro proceso podría crear el archivo durante mi prueba y la creación del archivo.

¿Tienen alguna idea de cómo hacer eso?

Gracias

P.S: punto de bonificación para una solución que solo involucrastd::streams.

Respuestas a la pregunta(10)

Su respuesta a la pregunta