把FILE *的文件描述符转换成int型的fd函数是:int fileno(FILE *tream)
话就会返回错误。比如原先是FILE *型的,调用fileno得到一个int型的,先调用了fclose()关闭成功,再去调用close()将会返回错误。
在unix系统调用中,标准输入描述字用stdin,标准输出用stdout,标准出错用stderr表示,但在一些调用函数,引用了STDIN_FILENO表示标准输入才,同样,标准出入用STDOUT_FILENO,标准出错用STDERR_FILENO.
他们的区别:
stdin等是FILE *类型,属于标准I/O,在<stdio.h>。
STDIN_FILENO等是文件描述符,是非负整数,一般定义为0, 1, 2,属于没有buffer的I/O,直接调用系统调用,在<unistd.h>。