я получил предупреждение при компиляции моего кода, который вызывает write()
Почему write() возвращает ssize_t, но принимает параметр size_t?
warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
Вот определение записи():
ssize_t write(int fd, const void *buf, size_t count);
RETURN VALUE
On success, the number of bytes written is returned (zero indicates
nothing was written). On error, -1 is returned, and errno is set
appropriately.
Это просто выглядит странно для меня. Предположим, что ssize_t является int, и я закончил тем, что написал что-то большое (> 2 ГБ). Я не могу просто использовать сравнение возвращаемого значения write() vs count, могу ли я?
(Редактировать: может быть, я должен правильно написать свой вопрос: что было бы правильным способом использования write() без предупреждения или работы в ситуации, которая учитывает == -1 после преобразования знака? Да, я знаю, что это неопределенное поведение)
Примечание: 'ssize_t' является POSIX, а не стандартным C.' size_t' is. –
Если 'ssize_t' является' int', тогда вы используете 32-битную ОС, которая, скорее всего, не поддерживает файлы> 2 ГБ. В этом случае вам понадобится другой API - см. Например [этот вопрос] (http://stackoverflow.com/questions/4003405/32-bit-windows-and-the-2gb-file-size-limit-c -с-FSEEK-и-ftell). – Kenney
@SouravGhosh: Так же, как 'write' тоже не является стандартным C. Какова ваша позиция? – Olaf