一.主函数的三个参数
argc,argv,envp
argc代表命令行的参数个数
argv[]存储命令参数,其中argv[0]通常代表该程序的程序名
envp[]代表系统的环境变量
1.argc,argv
argc和argv的使用
#include <stdio.h>
int main(int argc,char *argv[],char *envp[])
{
int i=0;
printf("argc=%d\n",argc);
for(;i<argc;i++)
{
printf("argv[%d]=%s\n",i,argv[i]);
}
return 0;
}
argc=2,表示除了程序名外还有一个参数
argv[0]指向输入的程序路径及名称
argv[1]指向123字符串
2.环境变量envp
envp是由父进程继承过来的参数;
环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数;
for(i=0;envp[i]!=NULL;i++)
{
printf("envp[%d]=%s\n",i,envp[i]);
}
3.envp,argv都是以NULL作为结尾的
for(;argv[i]!=NULL;i++)
{
printf("argv[%d]=%s\n",i,argv[i]);
}
4.什么是shell
shell俗称“壳”,用来区别于核
shell是一个命令解释器,位于操作系统和应用程序之间,是他们二者的接口,负责把应用程序的输入命令信息解释给操作系统,将操作系统指令处理后的结果解释给应用程序。
bash是大多数Linux系统默认的shell
二.printf隐藏的缓冲区
1.协助存储和内部处理,用户态切换到内核态(切换开销大),减少其次数
2.尽可能提高潜在效率
1.演示缓冲区没有存在感
#include <stdio.h>
int main()
{
printf("hello");
}
2.缓冲区的存在
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
printf("hello");
sleep(3);
exit(0);
}
3.强制刷新
(1)遇到\n自动刷新
printf("hello\n");
(2)使用fflush刷新屏幕
fflush(stdout);
stdout标准输出
4._exit与exit
exit是先刷缓冲区,然后再调用_exit(真正的退出)
_exit直接退出,不会刷新缓冲区
5.总结
printf将内容先写入到缓冲区,缓冲区刷新到界面(屏幕)上的条件是:
(1)缓冲区放满
(2)缓冲区未满,强制刷新缓冲区到屏幕
方法一:\n
方法二:主动刷新:fflush(stdout);
(3)程序结束时,自动刷新缓冲区,exit方法