which head file define '_IO_*'

Under Solaris 10,I compile following file,

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/termios.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <stdlib.h>	
#include <stddef.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>	
#define _IO_UNBUFFERED	__SNBF
#define _IO_LINE_BUF	__SLBF
#define _IO_file_flags	_flags
#define BUFFERSZ(fp)	(fp)->_bf._size
void	pr_stdio(const char *, FILE *);

int
main(void)
{
   FILE	*fp;

  fputs("enter any character\n", stdout);
  if (getchar() == EOF)
	err_sys("getchar error");
  fputs("one line to standard error\n", stderr);

  pr_stdio("stdin",  stdin);
  pr_stdio("stdout", stdout);
  pr_stdio("stderr", stderr);

  if ((fp = fopen("/etc/motd", "r")) == NULL)
	err_sys("fopen error");
  if (getc(fp) == EOF)
	err_sys("getc error");
  pr_stdio("/etc/motd", fp);
	exit(0);
}

void pr_stdio(const char *name, FILE *fp)
{
	printf("stream = %s, ", name);

	/*
	 * The following is nonportable.
	 */
	if (fp->_IO_file_flags & _IO_UNBUFFERED)
		printf("unbuffered");
	else if (fp->_IO_file_flags & _IO_LINE_BUF)
		printf("line buffered");
	else /* if neither of above */
		printf("fully buffered");
	printf(", buffer size = %d\n", BUFFERSZ(fp));
}

It raise following errors

In function 'pr_stdio':
error:structure has no member named '_IO_file_flags'
error:'_IO_UNBUFFERED' undeclared
error:'_IO_LINE_BUF' undeclared
error:structure has no member named '_IO_buf_end'
error:structure has no member named '_IO_buf_base'

Which head file should I use?

Thanks

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/termios.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <stdlib.h>	
#include <stddef.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>	
#define _IO_UNBUFFERED	__SNBF
#define _IO_LINE_BUF	__SLBF
#define _IO_file_flags	_flags
#define BUFFERSZ(fp)	(fp)->_bf._size
void	pr_stdio(const char *, FILE *);

int
main(void)
{
   FILE	*fp;

  fputs("enter any character\n", stdout);
  if (getchar() == EOF)
	err_sys("getchar error");
  fputs("one line to standard error\n", stderr);

  pr_stdio("stdin",  stdin);
  pr_stdio("stdout", stdout);
  pr_stdio("stderr", stderr);

  if ((fp = fopen("/etc/motd", "r")) == NULL)
	err_sys("fopen error");
  if (getc(fp) == EOF)
	err_sys("getc error");
  pr_stdio("/etc/motd", fp);
	exit(0);
}

void pr_stdio(const char *name, FILE *fp)
{
	printf("stream = %s, ", name);

	/*
	 * The following is nonportable.
	 */
	if (fp->_IO_file_flags & _IO_UNBUFFERED)
		printf("unbuffered");
	else if (fp->_IO_file_flags & _IO_LINE_BUF)
		printf("line buffered");
	else /* if neither of above */
		printf("fully buffered");
	printf(", buffer size = %d\n", BUFFERSZ(fp));
}

You're not supposed, and almost always can't, access the members of a FILE * structure. Its exact contents are platform and implementation specific. The code you were given will only work on the exact same implementation of stdio it was written to work with.