Linux开发初步

Linux开发初步


宗旨:技术的学习是有限的,分享的精神是无限的。


一、库函数与系统调用

1、系统调用函数和库函数

库函数是一些完成特定功能的函数,一般由某个标准组织制作发布,并形成一定的标准。使用库函数编写的函数一般可以应用于不同的平台而不需要做任何修改,具有很好的可移植性。

系统调用函数与操作系统直接相关,不同的操作系统所使用的系统调用可能不太一样,因此,如果两个操作系统差异很大,系统调用函数的可移植性就不高。例如windows采用的系统调用的应用程序不能直接在Linux下编译运行。

之所以使用系统调用是因为系统资源的有限性以及内核管理的方便,系统调用将上层内的应用开发与底层的硬件实现分开,上层应用不需要关注底层硬件的具体实现。Linux的系统调用使用软中断实现,使用系统调用后,该程序的状态将从用户态切换到内核态。库函数实现最终也要调用系统调用函数,但它封装了系统调用操作,从而增加了代码的可移植性。

 

2glibc函数库

C语言本身没有为常见操作(输入输出、内存管理等)提供支持,都是依靠标准函数库提供。Glibc基于如下标准:

(1)ISO C(ANSI C)

(2)POSIX

(3)Berkeley UNIX:BSD号出炉函数以及套接字。

(4)SVID(System V):进程通信,共享内存

(5)XPG(X/Open可移植性指南)

 

3、系统调用(系统调用时操作系统提供给外部程序的接口)

(1)系统调用函数通常在成功时返回0,失败是返回非零值。检查失败原因,要判断全局变量errno值,errno中包含错误代码。

(2)许多系统调用的返回数据通常引用参数传递。需要在函数参数中传递缓冲区地址,而返回的数据就保存在该缓冲区中。

(3)不能认为系统调用比其他函数的执行效率高。——系统调用时一个非常耗时的过程。

 

二、在线文档

1、man手册(man man可查看)

man1:命令。可以查看shell终端下命令使用。

man2:系统调用。内核系统调用描述。

man3:库函数调用。

man4:特殊文件。查看/dev目录下的特殊文件

man5:文件格式和约定。查看/etc/passwd等文件的格式。man /etc/passwd

man6:游戏。

man7:杂项和约定。

man8:系统管理命令。只有管理员使用的命令。

man9:内核例程。

如: man 1 ls     man 2 open   man 3 fread  man 7 man等

2、info手册——超文本帮助系统(/usr/info)

3、--help

 

三、获取错误信息

         调用库函数和系统调用后,执行成功返回0,或者正确值;执行失败返回-1,并把系统全局变量errno(errno.h)赋值。所有的错误代码都在errno.h文件中定义。/usr/include/asm/errno.h

为了打印具体的errno'信息,一般使用perror()函数。

void perror(const char * s); // 字符串常量

if(chmod("test02", (stabuf.st_mode& ~S_IXGRP) | S_ISGID) < 0)

{

   perror("stat");

exit(EXIT_FAILURE);

}

 

四、开发环境构成

编辑器:vi/vim,gedit,emacs,nano等【vim配置前面文章已经提到】

编译器:gcc 【gcc-v】

调试器:gdb

函数库:glibc

系统头文件:glibc_header

C开发过程:vim编辑保存为.c文件,gcc编译成可执行文件,出错使用gdb调试。

 

五、常用键盘组合键【stty –a可以查看组合键】

ctrl+ c:中断程序

ctrl+ \:退出程序

ctrl+ S:结束程序

ctrl+ Z:挂起程序

ctrl+ alt + T:打开终端(Ubuntu)

 

六、AStyleSourceInsight中应用【AStyle插件】

Astyle下载:https://sourceforge.net/projects/astyle/files/astyle/,解压路径自己定

配置AStyle格式化代码工具:Option —— Custom Cmmands —— Add —— 取名AStyle——Run:"D:\ProgramFiles\AStyle\bin\AStyle.exe" -A1 -s2 -p -j -n -c %f

配置格式化快捷键:Option —— Menu Assignments —— Menu下拉框选View—— 选右边的Insert —— 点击右下角的Key —— 点进Keystrokes中,同时按下键盘ctrl + alt + f确定就完成了。

astyle格式化代码工具可以让代码保持整洁有序,非常有效的工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Orange——The Data

The Data 这个部分描述的是怎样在Orange上加载数据。我们也将展示如何探索数据&#xff0c;发现一些基本统计特性&#xff0c;怎么数据取样。 Data Input Orange可以读取本机以制表符分隔的格式的文件&#xff0c;也可以从任何主要的标准电子表格文件类型加载数据&#xff0…

[转载]VirtualBox网络配置详解

标题: [原创]VirtualBox网络配置详解来自 http://www.linuxsir.org/bbs/showthread.php?p1800679#post1800679 欢迎转载, 转载请注明作者, 谢谢下面简单介绍一下Test-bed Environment:Host : 偶的本本OS : Arch Linux (Kernel Version 2.6.20) 已安装uml_utilities(包含tunctl…

工作4年工资8K,还有什么理由不努力?

—— 提问发哥&#xff0c;我现在还是从事裸机开发&#xff0c;51单片机&#xff0c;会点arm&#xff0c;但没有用arm真正做完整开发的经验&#xff0c;细想感觉自己会的不是很多&#xff0c;薪资提不上去&#xff0c;想做更高级点的工作&#xff0c;虽然自学点&#xff0c;到没…

内存管理函数

内存管理函数 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、 动态申请内存 1、 malloc/free ——动态分配内存和释放内存 &#xff08;1&#xff09;函数原型 void *malloc(size_tsize); void free(void *str); &#xff08;2&#xff09;函数参…

嵌入式的坑在哪方面?

在知乎看到的&#xff0c;觉得见解不错&#xff0c;看完我觉得会对嵌入式有些见解&#xff0c;分享给大家。今年毕业刚工作半年&#xff0c;稍微写一下自己的见解。嵌入式就个万金油&#xff01;干得活可以涉及硬件和软件&#xff01;永远学不完的知识。嵌入式工程师简直就是硬…

Orange-Classification,Regression

1.Classification Orange和sklearn一样&#xff0c;提供了Classification和Regression等机器学习的算法&#xff0c;具体使用如下&#xff1a; import Orangedata Orange.data.Table("voting") lr Orange.classification.LogisticRegressionLearner() rf Orange…

CentOS、Ubuntu、Debian三个linux比较异同

Linux有非常多的发行版本&#xff0c;从性质上划分&#xff0c;大体分为由商业公司维护的商业版本与由开源社区维护的免费发行版本。 商业版本以Redhat为代表&#xff0c;开源社区版本则以debian为代表。这些版本各有不同的特点&#xff0c;在不同的应用领域发挥着不同的作用&a…

再见,杀毒软件之父,王江民!

王江民&#xff0c;中国最早的反病毒专家&#xff0c;被业界尊称“中国杀毒软件之父”、“中国反病毒第一人。以38岁为分界&#xff0c;王江民的前半生&#xff0c;是中国青年身残志坚的楷模&#xff0c;他的后半生是中国安全软件的奠基人&#xff0c;带领中国商用软件第一个走…

arm流水线相关

不管是arm几,只要是在执行指令时采用的是流水线机制,前3级的都是:取指->译码->执行.在"执行"阶段,pc总是指向该指令地址加8字节的地址.换句话说,pc总是指向正在执行的指令地址再加2条指令的地址.之所以是2条指令,是因为在"执行"阶段前还有"取指…

C语言——回调函数

C语言——回调函数 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 如果参数是一个函数指针&#xff0c;调用者可以传递一个函数的地址给实现者&#xff0c;让实现者去调用它&#xff0c;这就是回调函数。 void func(void (*f)(void*), void *p) 提供…

百面机器学习——第一章特征工程

特征工程&#xff1a;是对原始数据进行一系列工程处理&#xff0c;将其提炼为特征&#xff0c;作为输入供算法和模型使用。从本质上来讲&#xff0c;特征工程是一个表示和展现数据的过程。在实际工作中&#xff0c;特征工程旨在去除原始数据中的杂质和冗余&#xff0c;设计更高…

C语言不调用库函数画一个三角形

这个是知乎上面的一个题目&#xff0c;非常有意思&#xff0c;晚上打球回来就下决心要写代码实现下&#xff0c;再加上自己剖析&#xff0c;让大家明白一个三角形在坐标系中如何用C语言画出来的。https://www.zhihu.com/question/53832071/answer/1625616415第一步就是要先构建…

JS高级——变量提升

JS执行过程 1、首先是预解析&#xff1a;预解析过程最重要的是提升&#xff0c;在JavaScript代码在预解析阶段&#xff0c;会对以var声明的变量名&#xff0c;和function开头的语句块&#xff0c;进行提升操作 2、执行操作 全局中解析和执行过程 <script>console.log(a);…

ocs 2007技巧:查看存档服务记录的消息内容

要查看存档服务记录的消息内容&#xff0c;请进入SQL&#xff0c;运行下列命令&#xff1a;USE LcsLogGOSELECT * FROM Messages转载于:https://www.cnblogs.com/kksip/archive/2008/01/08/1030858.html

图像多分类——卷积神经网络

例子参考&#xff1a;https://www.jiqizhixin.com/articles/2019-05-15-2 数据集&#xff1a;https://www.cs.ccu.edu.tw/~wtchu/projects/MoviePoster/index.html 将获取到原始数据集&#xff0c;其中&#xff0c;有三个文件&#xff0c; Movie Poster Dataset是1980-2015年…

C语言——可变参数

C语言——可变参数 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 1、目前为止&#xff0c;见过比较熟悉的可变参数的函数就是printf()函数 int printf(const char *format, …);<span style"font-family: Arial, Helvetica, sans-serif; back…

学习C++,知识点太多记不住怎么办?

学习一门新的编程语言之前&#xff0c;你首先会做什么&#xff1f;先熟悉变量、运算符、函数、类和结构、测试等工具&#xff0c;随后按照指导按部就班进行操作&#xff1f;这样的流程对于学习其他语言如Python、Java来说或许行得通&#xff0c;但C的话&#xff0c;够呛。想要真…

【转】建立公用程序库,提升软件开发生产力

当我们谈及软件开发的生产力时&#xff0c;其实有相当多的因素在影响着。举凡程序人本身的素质、所使用的程序语言、应用程序框架&#xff08;Application Framework&#xff09;的选择、是否具备好的开发工具&#xff08;例如IDE、程序代码产生器&#xff09;、对开发环境的熟…

vim使用指南

1 删除 https://www.jianshu.com/p/ab7936af747c 转载于:https://www.cnblogs.com/zhaoyz/p/8341231.html

C语言编程规范 clean code

目的规则并不是完美的&#xff0c;通过禁止在特定情况下有用的特性&#xff0c;可能会对代码实现造成影响。但是我们制定规则的目的“为了大多数程序员可以得到更多的好处”&#xff0c; 如果在团队运作中认为某个规则无法遵循&#xff0c;希望可以共同改进该规则。参考该规范之…