Вы должны распечатать не только значение errno, но и соответствующее сообщение об ошибке:
printf("failed %d: %s\n", errno, strerror(errno));
Это должно раскрыть причину проблемы.(«Не каталог», поэтому /home/abc/work/tmp
не является каталогом.)
(Существуют и другие проблемы с вашим кодом, такие как пропущенные операторы #include
и запись сообщений об ошибках в стандартный выводи не stderr, но они не имеют отношения к вашей проблеме под рукой. Вы можете исправить их позже.)