1、缓冲区问题

        输出缓冲区:

          (1)遇到 “\n” 立即刷新缓冲区

          (2)程序调用fflush函数刷新缓冲区。

          (3)程序以exit结束,缓冲区会刷新。如果以_exit结束,缓冲区的数据被直接清空。

          (4)缓冲区满也会将缓冲数据刷新出来。(共1024字节)

       输入缓冲区

2、主函数传参

       int main(int  argc,char *argv[ ],char * envp[ ])

       argc :传递给主函数的参数个数

       argv :传递给主函数的参数列表

       envp: 环境变量列表

3、LINUX文件操作

   #include<fcntl.h>需要引用的头文件

fopen   fread   fwrite  fclose   fseek // 库文件

FILE * fopen (char * pathname,char *flag);

int read (int fd  ,void *buff , size_t  size);

int write(int fd  ,void *buff , size_t  size);

int close (int fd  );

int lseek (int fd  ,int count , size_t  pos);    pos : SEEK_CUR(当前)     SEEK_END(文件尾)     SEEK_SET(文件头)

int open (char *pathname  , size_t  flag ,  /*size_t  mode */);

       pathname : 文件路径+文件名

        flag  : 打开方式   O_RDONLY  O_WRONLY  O_RDWR    O_CREAT(如果设置这个参数文件不存在时创建文件,创建时才需要第三个参数支持)

       mode :文件权限  0nnn(0~7)

   返回值:成功返回打开文件的标志,即就是文件描述符(内核利用文件描述符来访问文件,文件描述符为非负整数)

 

扩充:

 1、main函数运行结束后可以运行代码,要利用atexit函数。

atexit(void (*fun)(void));

参数是一个函数指针,函数指针指向一个没有参数也没有返回值的函数。

输出结果为 I am very hungry 。可以看出它的调用顺序和注册顺序是反的。

2、main 函数执行之前都做了哪些工作

    (1)操作系统创建进程后,把控制权交到了程序入口,这个入口往往是程序运行库中的某个入口函数。

    (2)入口函数对运行库和程序运行环境进行初始化,包括堆、I/O、线程、全局变量的构造等等。

    (3)将main函数的参数,argc,argv等传递给main函数,然后才真正运行main函数。