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的变种大家自行查找学习。

时间: 2024-12-31 18:26:57

Linux c基础学习的相关文章

Linux shell脚本基础学习详细介绍(完整版)

Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Linux 脚本编写基础 ◆1.1 语法基本介绍1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可

《鸟哥的Linux 私房菜 基础学习篇(第三版)》——导读

前言 本书是最具知名度的Linux入门书<鸟哥的Linux私房菜基础学习篇>的最新版,全面而详细地介绍了Linux操作系统.全书分为5个部分:第一部分着重说明Linux的起源及功能,如何规划和安装Linux主机:第二部分介绍Linux的文件系统.文件.目录与磁盘的管理:第三部分介绍文字模式接口shell和管理系统的好帮手shell脚本,另外还介绍了文字编辑器vi和vim的使用方法:第四部分介绍了对于系统安全非常重要的Linux账号的管理,以及主机系统与程序的管理,如查看进程.任务分配和作业管理

拒绝从入门到放弃_《鸟哥的 Linux 私房菜 — 基础学习篇(第三版)》必读目录

目录 目录 前言 关于这本书 必看知识点 最后 前言 相信部分刚进入这个行业的新同学会对一个问题感到疑惑,为什么从培训学校出来的学员不被欢迎? 这里记录下一些我个人的看法(博主也曾有面试新员工的经历):说到底还是一个学习能力的问题.就这一点,从我的经历看来(曾到多家企业培训新人),培训出身的技术人员大体而言确实没有科班出身的学得更快准狠一些.学习能力这个东西其实比较虚,它并没有一个直观的考量方式,所以企业一般都会简单粗暴的使用学历.专业.项目经验来衡量.这之间反映了你的计算机知识框架是否完善.基

《鸟哥的Linux 私房菜 基础学习篇(第三版)》——1.4 重点回顾

1.4 重点回顾 鸟哥的Linux 私房菜 基础学习篇(第三版) ◆ 计算机主要以二进制作为单位,而目前常用的磁盘容量单位为B,其单位换算为1B = 8bit,其他的以1024为其倍数,如1GB=1024MB等. ◆ 操作系统(Operation System)主要用于管理与驱动硬件,因此必须要能够管理内存.管理设备.负责进程管理以及系统调用等.因此,只要能够让硬件准备妥当(Ready)的情况,就是一个很棒的操作系统了. ◆ 操作系统重点仅在驱动与管理硬件,而要使用硬件时,就得需要通过应用软件或

《鸟哥的Linux 私房菜 基础学习篇(第三版)》——0.5 重点回顾

0.5 重点回顾 鸟哥的Linux 私房菜 基础学习篇(第三版) ◆ 计算机的定义为:"接受用户输入指令与数据,经由中央处理器的数据与逻辑单元运算处理后,以产生或存储成有用的信息". ◆ 计算机的五大单元包括输入单元.输出单元.CPU内部的控制单元.算术逻辑单元与内存五大部分. ◆ 数据会流进/流出内存是CPU所发布的控制命令,而CPU实际要处理的数据则完全来自于内存. ◆ CPU依设计理念主要分为精简指令集(RISC)与复杂指令集(CISC)系统. ◆ 关于CPU的频率部分,外频指的

《鸟哥的Linux 私房菜 基础学习篇(第三版)》——0.4 软件程序运行

0.4 软件程序运行 鸟哥的Linux 私房菜 基础学习篇(第三版) 鸟哥在上课时经常会开玩笑地问:"我们知道没有插电的计算机是一堆废铁,那么插了电的计算机是什么?"答案是"一堆会电人的废铁."这是因为没有软件的运行,计算机的功能就无从发挥了.就好像没有了灵魂的躯体也不过就是行尸走肉,重点在于软件/灵魂.所以下面咱们就得要了解一下"软件"是什么. 一般来说,目前的计算机系统将软件分为两大类,一个是系统软件,一个是应用程序.但鸟哥认为我们还是得要了

《鸟哥的Linux 私房菜 基础学习篇(第三版)》——0.3 数据表示方式

0.3 数据表示方式 鸟哥的Linux 私房菜 基础学习篇(第三版) 事实上我们的计算机只认识0与1,记录的数据也是只能记录0与1而已,所以计算机常用的数据是二进制的.但是我们人类常用的数值运算是十进制,文字方面则有非常多的语言,常用的语言就有英文.中文(又分繁体与简体中文).日文等.那么计算机如何记录与显示这些数值/文字呢?就得要通过一系列的转换才可以啦!下面我们就来谈谈数值与文字的编码系统. 0.3.1 数字系统 早期的计算机使用的是利用通电与否的特性的真空管,如果通电就是1,没有通电就是0

《鸟哥的Linux 私房菜 基础学习篇(第三版)》——1.2 Torvalds的Linux开发

1.2 Torvalds的Linux开发 鸟哥的Linux 私房菜 基础学习篇(第三版) 我们前面一节当中,提到了UNIX的历史,也提到了Linux是由芬兰人Torvalds所开发的.那么为何托瓦兹可以开发Linux呢?凭空想象而来的,还是有什么渊源?这里我们就来谈一谈! 1.2.1 Minix Linus Torvalds(托瓦兹, 1969年出生)的外祖父是赫尔辛基大学的统计学家,他的外祖父为了让自己的小孙子能够学点东西,所以从小就将托瓦兹带到身边来管理一些微计算机.在这个时期,托瓦兹接触了

《鸟哥的Linux 私房菜 基础学习篇(第三版)》——0.2 个人计算机架构与接口设备

0.2 个人计算机架构与接口设备 鸟哥的Linux 私房菜 基础学习篇(第三版) 一般消费者常说的计算机通常指的就是x86的个人计算机架构,因此我们有必要来了解一下这个架构的各个组件.事实上,Linux最早在发展的时候,就是依据个人计算机的架构来发展的,所以,真的需要了解一下.另外,因为两大主流x86开发商(Intel, AMD)的CPU架构并不兼容,而且设计理念也有所区别,所以两大主流CPU所需要的主板芯片组设计也就不太相同.目前最新的主板架构主要如图0-4所示. 就如同前一节提到的,整个主板