printf();
perror();

の順でコードを書くと、printf()が呼び出すシステムコールでエラーコードが上書きされてしまう。よって

perror();
printf();

の順で書く