Я работал над своей версией printf в образовательных целях, и, читая руководство, я прочитал, что функция может возвращать отрицательное значение при обнаружении ошибки.
Сначала я думал, что она возвращает - 1 / отрицательное значение, когда в строке формата возникает ошибка, но это не так.
Я начал думать, что он возвращает -1, когда обнаруживает некоторую ошибку системного вызова и не может записать в файл дескриптор, затем я протестировал этот код, чтобы проверить эту идею:
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
errno = 0;
int stdout2 = dup(STDOUT_FILENO);
close(STDOUT_FILENO);
int ret = printf("Hey", "Hello");
fprintf(stderr, "%d\t%s\n", ret, strerror(errno));
}
Он вывел:
3 Bad file descriptor
Errno установлен, на самом деле есть ошибка (дескриптор файла близок), но отрицательные значения не выводятся.
Я использую Linux и использую glib c, но я также встречал этот случай в MacOS. Есть идеи?