Linux c基础学习

简介:
<br>#include <stdio.h>
#include <stdlib.h>
 
int  myarray[50000]={1,2,3,4,5};
 
int  main( int  argc, char  const  *argv[])
{
         
     return  0;
}

 

#include <stdio.h>
#include <stdlib.h>
 
int  myarray[50000];
 
int  main( int  argc, char  const  *argv[])
{
     myarray[0]=3;
     return  0;
}

 如果你用ls -l命令查看上面的2个程序文件的话,你就会发现两个文件的大小差别很大。其中的原因就在于第一个程序是中的myarray是已经初始化的静态数据,是可执行模块的一部分,所以会比版本2的程序大很多。

在声明的时候没有显式的进行初始化的静态变量会在运行的时候被初始化为0,注意在程序的印象中,已经初始化的静态变量和未初始化的静态变量占据不同的区域。通常情况下,已经初始化的静态变量是可执行模块的一部分,而未初始化的静态变量则不是,当然,自动变量不是可执行模块的一部分。只有当定义他们的程序被调用的时候,才会分配内存。

在主存储器中程序印象的布局大致为:

#include <stdio.h>
#include <stdlib.h>
 
extern  char  ** environ;
 
int  main( int  argc, char  const  *argv[])
{
     int  i;
     printf ( "The environment list is as floows:\n" );
     for  ( i = 0; environ[i]!=NULL; ++i)
         {
             printf ( "*environ[%d]: %s\n" ,i,environ[i] );
         }  
     return  0;
}

 上面的程序打印出了环境列表的内容

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h>
 
int  main( int  argc,  char  const  *argv[])
{
     char * str;
     str= getenv ( "PATH" );
     if (str!=NULL){
         printf ( "%s\n" ,str );
     } else {
         printf ( "doesn't exits PATH \n" );
     }
     return  0;
}

 上面的程序显示了如何使用getenv函数

 

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <unistd.h>
#include <sys/times.h>
 
static  void  showtimes()
{
     double  ticks;
     struct  tms tinfo;
 
     if ((ticks=( double )sysconf(_SC_CLK_TCK))== -1){
         perror ( "Filed to detemine clock ticks per second\n" );
     } else  if (times(&tinfo)==( clock_t )-1){
         perror ( "Filed to get times infomation\n" );
     } else {
 
         fprintf (stderr, "user time:  %f seconds\n" ,tinfo.tms_utime/ticks );
         fprintf (stderr, "system time:  %f seconds\n" ,tinfo.tms_stime/ticks );
 
         fprintf (stderr, "childermn's user time:  %f seconds\n" ,tinfo.tms_cutime/ticks );
         fprintf (stderr, "childermn's system time:  %f seconds\n" ,tinfo.tms_cstime/ticks );
     }
}
 
int  main( int  argc, char  const  *argv[])
{
 
     if ( atexit (showtimes)){
         fprintf (stderr, "Filed to install showtimes function\n"  );
         exit (1);
     }
     return  0;
}

上面的程序是一个带有退出处理程序的例子,退出处理程序输出了CPU的使用情况。 

 

#include <stdio.h>
#include <stdlib.h>
 
static  void  function1();
static  void  function2();
 
int  main( int  argc, char  const  *argv[])
{
     printf ( "main function start...\n" );
 
     if ( atexit (function1)){
         fprintf (stderr, "atexit function calls error\n" );
         exit (1);
     }
     if  ( atexit (function2))
     {
         fprintf (stderr, "atexit function calls error\n" );
         exit (1);
     }
 
     printf ( "main function end...\n" );
     return  0;
}
 
static  void  function1(){
 
     printf ( "This is function1\n" );
}
 
static  void  function2(){
     printf ( "This is function2\n" );
}
 
/*
     this program run result as follows:
     
     main function start...
     main function end...
     This is function2
     This is function1
 
*/

 上面的例子演示了atexit函数的用法,大家注意输出的顺序。

 

#include <stdlib.h>
#include <stdio.h>
 
int  main( int  argc, char  const  *argv[])
{
     system ( "ps ax" );
     return  0;
}

 

 上面的这个例子显示了system的用法。其余6个exec的变种大家自行查找学习。

目录
相关文章
|
21天前
|
存储 Linux
Linux的学习之路:16、文件(3)
Linux的学习之路:16、文件(3)
28 0
|
21天前
|
Linux C语言 C++
Linux的学习之路:14、文件(1)
Linux的学习之路:14、文件(1)
25 0
|
21天前
|
Linux 开发工具 C语言
Linux的学习之路:7、yum与git
Linux的学习之路:7、yum与git
14 0
|
21天前
|
Linux 开发工具
Linux的学习之路:5、粘滞位与vim
Linux的学习之路:5、粘滞位与vim
44 0
|
22天前
|
Unix Linux Windows
Linux的学习之路:3、基础指令(2)
Linux的学习之路:3、基础指令(2)
33 0
|
5天前
|
自然语言处理 Java Linux
【Linux】开始学习进程替换吧!
通过学习进程替换,我们可以体会到多语言混搭的快乐,可以从C语言直接蹦到python ,也可以从c++里运行java代码。是不是很厉害!这是通过调度多个进程的效果,联系我们之前学习的进程,进程控制等概念。我们可以想要运行其他代码可以通过创建子进程来实现,但是这样也肯定是同一种语言,如果想要运行其他语言,那是不是有种方法可以调度一个进程来当做子进程呢??? 我们开始今天的学习吧!
11 0
|
13天前
|
Ubuntu 算法 Linux
嵌入式Linux的学习误区
该文指出了学习嵌入式Linux开发的两个常见误区。一是过分专注于学习桌面或服务器版Linux,而非关注嵌入式开发本身,实际上只需熟悉基本操作即可。二是试图在没有基础的情况下直接阅读Linux内核源代码,这是不切实际的,应先建立基础知识再进行源码学习。文章还提到了在嵌入式系统中获取和处理屏幕数据的示例,包括使用gsnap工具将framebuffer数据转为图像,以及涉及的交叉编译过程。
11 0
|
14天前
|
编解码 Linux 数据安全/隐私保护
【Linux学习】​​学习Linux的准备工作和Linux的基本指令
【Linux学习】​​学习Linux的准备工作和Linux的基本指令
|
14天前
|
Linux Shell 虚拟化
【Linux学习】Linux 的虚拟化和容器化技术
【Linux学习】Linux 的虚拟化和容器化技术
|
15天前
|
运维 监控 安全
【专栏】11 个 Linux 网络命令学习和熟练运用这些命令是提升网络管理能力的基础
【4月更文挑战第28天】本文介绍了11个必备的Linux网络命令,包括ifconfig、ip、ping、traceroute、netstat、tcpdump、ss、telnet、ftp、ssh和nmap,这些命令在网络配置、故障排查和性能监控中发挥关键作用。通过实例分析,强调了它们在实际工作中的综合应用,帮助运维工程师提升效率和应对网络挑战。学习和熟练运用这些命令是提升网络管理能力的基础。