为什么write()返回ssize_t但是接受size_t的参数?

som*_*ser 3 c size-t

编译调用的代码时收到警告 write()

warning: comparison between signed and unsigned integer expressions [-Wsign-compare]

这是write()的定义:

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.
Run Code Online (Sandbox Code Playgroud)

这对我来说很奇怪.假设ssize_t是int,我最终写了一些大的(> 2GB).我不能只使用write()vs count的返回值的比较,可以吗?

(编辑:也许我应该正确地写下我的问题:在没有得到警告的情况下使用write()的正确方法是什么,也不会遇到符号转换后计数== -1的情况?是的,我知道它是未定义的行为)

R S*_*ahu 7

返回值是一种signed类型,允许返回值-1指示失败.

来自http://linux.die.net/man/2/write:

成功时,返回写入的字节数(零表示没有写入).出错时,返回-1,并正确设置errno.