开始Linux C编程之旅1

1开始编程

编程不应该是枯燥的,而是有趣、有创造性的活动。所以,在学习编程的过程中,不应该死扣语法规则,以及各种诡异的语法代码,其实,那些诡异的语法代码都是给编译器看,甚至是钻编译器的漏洞。

在实际的开发中,不应该写晦涩、难懂的代码,而且是禁止写这样的代码;提倡写简洁、清晰明了的代码。毕竟大型的项目,不是个人独秀的表演,而是一个团队合作的结果。

例如Linux内核软件,是世界上许多优秀软件系统工程师的合作结果,如果写了晦涩的代码,肯定是不允许。linux 内核中的DTS设备树的出现,就是抽象、屏蔽了繁杂重复的芯片配置代码,最终,通过DTS配置文件来代替。所以,优秀的软件系统,也应该是模块化程度高,代码模块之间耦合度低的系统。

OK,思路扯远了,总之,我们学习编程的过程应该是快乐、有趣的。最终,通过学习了Linux环境下的C语言编程,可以使用C语言开发有意义的软件系统。

在学习的过程中,不要死扣语法,遇到有疑问的语法和问题,直接编写测试例子来验证。例如,我们疑问double类型的变量占据多少个字节?碰到这个问题的时候,我们就直接编写一个测试例子。

#include <stdio.h> //包含头文件, 为了使用printf()函数;

int main() //定义程序的主函数, 就是程序的入口地址;

{ //主函数的开始标记;

int size = sizeof(double); //获取 double 类型定义变量的容量;

printf("size = %d\n", size); //输出 size 变量的内容;

return 0; //返回结束状态;

} //主函数的结束标记;

编译运行,输出的结果是:

gcc test.c -o out

mylinux@ubuntu:~/test$ ./out

size = 8

此时,我们就知道double类型的变量占据8个字节的容量。而且是自己通过测试例子来验证,理解更加深刻。通过编写测试例子来思路和验证遇到的疑问,是我们学习知识的一种有效途径。

毕竟我们学习是为了理解、获取到知识,而不是去死记硬背书本的知识;有时候书本和资料有误,自己去测试、验证的知识点才的正确的。最重要的是自己去测试验证过的问题才理解深刻。无论黑猫、白猫,抓到老鼠就是好猫;能够把问题讲清楚,讲明白;让大家学习到知识就是我们的宗旨。也是我们要学习的一种学习方法。

2第一个例子获取系统时间

通过前面的学习准备,我们在VMware中搭建了一个Ubuntu系统,并且介绍了编程过程中需要用到的一个工具软件和计算机系统知识。那么,现在我们就可以开始学习Linux C语言编程了。

现在我们来写第一个程序,要求实现一个比较有趣的功能,就是输出当前Ubuntu系统的时间。例如,你和朋友约好今天晚上11点去干点坏事,但是,不知道现在几点了,那么,可以执行自己写的程序,查看当前的Ubuntu系统提供时间,以免误了你去干坏事。

打开Ubuntu系统,使用用户名和密码登陆系统之后,同时按下Ctrl+Alt+T按钮,就弹出一个终端,如下图3-1所示。


图3-1

这个终端就是我们工作的地方。OK,开始写程序,首先,我们新建一个工作目录,专门存放代码。例如你们把自己喜欢的电影,下载到某个目录一样。在终端中执行如下命令:

mkdir src

此时,新建有一个文件夹,名称是src;然后,再执行下面的命令,进入该文件夹。

cd src/

进入src文件夹之后,我们需要新建一个文件,存放编写的C代码。注意:存放C代码的文件,后缀是.c结尾,这样编译器就可以识别它是一个正确的C源码文件,然后,才可以编译源码。

新建一个test.c文件,用于存放源码,执行如下的命令。

gedit test.c &

操作的步骤如下图:


此时,通过gedit命令,打开一个test.c文件,在末尾以“&”结尾,表示在后台运行gedit软件工具,不阻碍继续使用当前的终端。使用 gedit 命令打开test.c文件之后,弹出如下图3-3对话框。


图3-3

此时,使用gedit工具打开一个test.c文件,然后,在文件中,输入如下的代码:

#include <stdio.h> //包含头文件, 为了使用printf()函数;

#include <stdlib.h> //包含头文件, 为了使用system()函数;

int main() //定义程序的主函数, 就是程序的入口地址;

{ //主函数的开始标记;

printf("Now time =\n"); //输出提示;

system("date"); //输出系统时间;

return 0; //返回结束状态;

} //主函数的结束标记;

注意,在程序中使用两个反斜杠“//”来做“注释”。在一行代码中,两个反斜杠“//”后面接着的数据表示注释数据,编译器不会编译这些数据。

那么,在讲解编程代码例子的时候,作者会尽量给出完整的注释,这样有助于读者理解代码。但是,读者自己在测试、验证代码的时候,可以不用把注释也敲打如代码中。测试例子如下图3-4。


图3-4

此时,我们在test.c文件中编写了程序的代码,但是,看起来还是缺少点什么!!!那就是“行号”,有时候编译代码出现异常,编译器会提示在哪一行出现问题,那么,我们需要定位到指定行数的代码,查找问题。

那么,我们可以配置gedit软件显示行号,步骤是:选择菜单Edit  --> Preferences,然后,在弹出的对话框中,找到“Line Numbers”属性,把下面的“Display line numbers”复选框给勾选上,如下图:


配置完之后,在代码中就显示了行号,效果如下图:


编写完源码之后,按下Ctrl+s按键,保存编写的代码。然后,开始编译代码,编译代码格式是:

gcc xxx.c -o yyy

使用gcc命令进行编译,在gcc命令后面,接空格,空格后面接xxx.c是需要编译的源码文件,然后接空格,空格后面接“-o”选项,表示编译出可执行程序;然后接空格,在空格后面接 yyy 表示编译出可执行程序的名称。

例如,在终端输入如下的命令:

gcc test.c -o exe

就是使用gcc命令编译 test.c 源码,产生 exe 可执行程序。最后,在当前终端输入 ./exe 来执行程序,测试的如下图3-5所示。


图3-5

使用gcc编译产生了exe可执行程序,在执行exe程序的时候,在终端输入“./”表示执行当前目录下的程序,然后,接着exe,为“./exe”,表示执行当前目录下的exe程序。

最终,执行./exe程序,输出系统的当前时间,如下:

Now time =

Wed Jun 27 02:31:36 PDT 2018

我们可以连续执行多次,每次看到时间都有变化,测试如下:

mylinux@ubuntu:~/src$ ./exe

Now time =

Wed Jun 27 02:37:07 PDT 2018

mylinux@ubuntu:~/src$

mylinux@ubuntu:~/src$ ./exe

Now time =

Wed Jun 27 02:37:08 PDT 2018

mylinux@ubuntu:~/src$ ./exe

Now time =

Wed Jun 27 02:37:10 PDT 2018

mylinux@ubuntu:~/src$ ./exe

Now time =

Wed Jun 27 02:37:11 PDT 2018

mylinux@ubuntu:~/src$ ./exe

Now time =

Wed Jun 27 02:37:12 PDT 2018

可以看到,每次执行,都获取Ubuntu系统的当前时间,秒数显示的内容是有变化的。OK,有了这个获取时间的工具,再也不用担心耽误你去赶坏事的时间了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354