Вам нужно #include <fcntl.h>
, чтобы получить объявление для open()
в области видимости, которое затем сообщит вам, что вы не вызываете его с достаточным количеством аргументов:
int open(const char *filename, int flags, ...);
(Необязательный аргумент - единственное число - это разрешения для файла (mode_t perms
), если у вас есть O_CREAT
среди опций в аргументе flags
.)
Вызов malloc()
набрасывает на стеке, достаточном для первоначального удаления нулей на нем, что оставляет «дополнительные аргументы» для open()
в состоянии, когда они не равны нулю, и вы сталкиваетесь с проблемами.
Неопределенное поведение - которое вы вызываете - может привести к любому странному результату.
Убедитесь, что вы компилируете как минимум с '1017 *', и я рекомендую 'gcc -Wmissing-prototypes -Wstrict-prototypes -Wall -Wextra
'.