Вы говорите, что создаете файл следующим образом:
int fd = fopen(filename, O_CREAT | O_EXCEL);
Это не соответствует сигнатуре fopen:
FILE *fopen(const char *filename, const char *mode);
Так что я предполагаю, что вы действительно используете open:
int fd = open(filename, O_CREAT | O_EXCL);
Это ошибка, потому что третий аргумент open (2) - это "mode", и он обязателен, когда используется O_CREAT.
Поскольку вы не передаете аргумент mode, вы вызываете неопределенное поведение, и режим, вероятно, получает какое-то нежелательное значение.Попробуйте передать 0666 в качестве третьего аргумента open (2) и посмотрите, поможет ли это.