Используя perror
, вы получите системное сообщение об ошибке, подразумеваемое текущим значением errno
в выводе, после строки, которую вы указали в качестве аргумента.
Используя fprintf(stderr, "…", …)
, выв полном контроле форматирования.
Я редко использую perror()
;это не соответствует моим требованиям, так как форматирование строки для передачи является довольно сложным. Я использую написанные мной функции, такие как err_syserr()
- код, который доступен в моем репозитории SOQ (вопросы о переполнении стека) на GitHub в виде файлов stderr.c
и stderr.h
в src / libsoq подкаталог.
В BSD есть аналогичный пакет, который называется err(3)
;Вы также можете найти его в Linux (см. err(3)
). Вы, вероятно, предпочтете использовать это вместо моего кода, хотя бы потому, что системным функциям удается косвенно привязаться к значению argv[0]
, тогда как мой код не потому, что нет портативного интерфейса для доступа к * 1023. * за исключением аргументов main()
), поэтому мой код полагается на то, что вы вызываете err_setarg0(argv[0])
в main()
для установки имени программы.