a.out 的意思是 assembler output,即汇编输出。

C语言的头文件一般位于 /usr/include/ 目录下,而依赖于特定 Linux 版本的头文件通常可在目录 /usr/include/sys/ 和 /usr/include/linux 中找到。

在 Linux 中,为了更好的保护内核,把程序运行空间分为内核空间和用户空间,它们分别运行在不同的级别上,用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,但是在有些情况下,用户空间的进程需要获得一定的系统服务,这时就必须通过系统调用。

比如调用 printf(),是调用C库中的 write(),是 Write() 系统调用。UNIX系统调用会在出现错误时,把错误码写入errno全局变量,通过调用 perror() 库函数可以把该变量转换成用户可以理解的错误字符串。

每个系统调用被赋予一个全局唯一的系统调用号,用户空间进程执行一个系统调用的时候,这个系统调用号就被用来指明到底要执行哪个系统调用,进程不会提及系统调用的名称。系统调用号相当关键,一旦分配就不能再有任何变更,否则编译好的应用程序就会崩溃,此外,如果一个系统调用被删除,它所占用的系统调用号也不允许被回收利用。

应用程序应该以某种方式通知系统,告诉内核自己需要执行一个系统调用,希望系统切换到内核态,这样内核就可以代表应用程序来执行该系统调用了。通知内核机制是靠软件中断实现的:通过引发一个异常来促使系统切换到内核态去执行异常处理程序。此处的异常处理程序即系统调用处理程序 system_call()

在 Linux 系统中,实现了两类对文件IO的管理,一类是由ANSI标准提供的标准IO库函数,跨平台;一类是遵循POSIX标准,以系统调用方式给用户提供的接口函数,可移植性差。程序中频繁的使用系统调用会降低程序的运行效率,因为会在系统态和用户态之间切换。而库函数访问文件时根据需要设置了不同类型的缓冲区,从而减少了直接调用IO系统调用的次数,提高访问效率。(标准IO库函数处理了很多细节,如缓存分配等)

du 命令可以递归统计指定文件夹大小,du -sh 可以只查看指定文件夹大小。

linux每个文件都有一个节点,目录是用来保存其它文件的节点号和名字的文件,可以通过 ls -i 查看节点号。删除文件实质上是删除了这个文件对应的目录项,同时指向该文件的链接数-1,(有点像智能指针原理)硬链接可以增加链接数,硬链接和复制的区别就是,它只复制原文件的节点,可以节省磁盘空间。

cp /dev/null filename 与 echo "" > filename 的区别是,前者文件大小为0,后者为1,应该是有一个 '\0'。

exit(0) 与 return(0) 的区别:前者是退出程序,后者是返回函数。在main函数中,两者基本相同,都会进行一些清理工作,如关闭标准IO等,还可以通过 atexit(fun); 在退出时调用自定义的函数;但前者好像不会自动析构局部对象。另外 _Exit(0); 和 _exit(0); 也可以退出程序,但不会清理流缓冲区,也不会调用 atexit 中指定的函数。

#include<iostream>
#include <stdlib.h>
using namespace std; class T
{
public:
T() { cout<<"T();"<<endl; }
~T() { cout<<"~T();"<<endl; }
}; int main()
{
T t;
//exit(EXIT_SUCCESS);
return EXIT_SUCCESS;
}

英文帮助文档:

搜索 manpages,centos6.3 下通过 yum install man-pages.noarch 即可。

中文帮助文档:

https://github.com/lidaobing/manpages-zh

下载解压后,执行 autogen.sh 即可生成 configure 文件,(需要安装 autoconf 和 automake),然后就是 ./configure && make && make install

默认会安装到 /usr/local/share/man/zh_CN 目录,现在使用 man -M /usr/local/share/man/zh_CN fopen 已经可以查看中文文档。

为了方便以后使用,在 /etc/bashrc 中加上 alias cman='man -M /usr/local/share/man/zh_CN',保存退出 source /etc/bashrc,即可使用 cman 命令。

http://www.cnblogs.com/dubingsky/archive/2009/07/31/1535859.html

linux程序设计1的更多相关文章

  1. Linux程序设计(一)入门

    1. linux程序 Linux应用程序表现为两种特殊类型的文件:可执行文件和脚本文件. 可执行文件:是计算可以直接运行的程序,相当于windows的.exe文件. 脚本文件:一组指令的集合.这些指令 ...

  2. Linux 程序设计的一些优化措施

    Linux 程序设计的一些优化措施 这些知识是在平常的阅读中,零散的获得的,自己总结了一下,分享在这里 全局变量VS函数参数 全局变量在Linux下的驱动编程里边,用的是非常多,例如中断服务函数ISR ...

  3. Linux程序设计之shell程序设计

    看了<linux程序设计(第4版)>(作者:Neil Matthew ,Richard Stones ,陈建 ,宋健建译).做个笔记,以备后面查看. 首先,清楚几个概念. shell编程属 ...

  4. Linux程序设计:进程通信

      日期:忘了. 关键词:Linux程序设计:System-V:进程通信:共享内存:消息队列. 一.共享内存   1.1 基本知识 (待补充)   1.2 代码 一个基于share memory实现的 ...

  5. 5)Linux程序设计入门--信号处理

    )Linux程序设计入门--信号处理 Linux下的信号事件 前言:这一章我们讨论一下Linux下的信号处理函数. Linux下的信号处理函数: 信号的产生 信号的处理 其它信号函数 一个实例 .信号 ...

  6. 6)Linux程序设计入门--消息管理

    )Linux程序设计入门--消息管理 前言:Linux下的进程通信(IPC) Linux下的进程通信(IPC) POSIX无名信号量 System V信号量 System V消息队列 System V ...

  7. 2)Linux程序设计入门--进程介绍

    )Linux程序设计入门--进程介绍 Linux下进程的创建 前言: 这篇文章是用来介绍在Linux下和进程相关的各个概念.我们将会学到: 进程的概念 进程的身份 进程的创建 守护进程的创建 .进程的 ...

  8. 3)Linux程序设计入门--文件操作

    )Linux程序设计入门--文件操作 Linux下文件的操作 前言: 我们在这一节将要讨论linux下文件操作的各个函数. 文件的创建和读写 文件的各个属性 目录文件的操作 管道文件 .文件的创建和读 ...

  9. 1)Linux程序设计入门--基础知识

    )Linux程序设计入门--基础知识 Linux下C语言编程基础知识 前言: 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 会学到以下内容: 源程序编译 Makef ...

  10. 8)Linux程序设计入门--线程操作

    )Linux程序设计入门--线程操作 前言:Linux下线程的创建 介绍在Linux下线程的创建和基本的使用. Linux下的线程是一个非常复杂的问题,由 于我对线程的学习不时很好,我在这里只是简单的 ...

随机推荐

  1. hdu 1757 矩阵

    用矩阵表示状态,矩阵乘法的就是状态之间的变换 作一个vector: 要求的就是一个矩阵A,使得上面那个vector乘以A之后变成 解得A= [不知道用逆矩阵能不能直接求出A Ref:http://bl ...

  2. poj1811 数论

    题意:判断一个数是否是质数+分解质因数 sol:模板题 分解质因数用xudyh模板,注意factor返回的是无序的,factorG返回是从小到大的顺序(包括了1) 判断质数用kuangbin随机化模板 ...

  3. Scala特性: 隐式转换

    1.隐式转换特征: 1)隐式参数的用法 · 获取可能的预期类型 · 获取预期类型,并且拥有预期类型的行为 · 对信息进行补充说明(一般用函数做隐式参数的比较多) 2)隐式类: 3)隐式method:

  4. redis安装,配置

    下载 cd /usr/local/src wget http://download.redis.io/releases/redis-3.0.7.tar.gz     安装 yum install je ...

  5. java 环境变量 设置 问题

    问题按照网上教程配置好了  tomcat可以用了.但是发现java不能用. 网上教程(类似教程太多了 ,就不 具体说了 http://jingyan.baidu.com/article/f96699b ...

  6. git本地分支

    1. 新建并切换到该分支 $ git checkout -b iss53 Switched to a new branch 'iss53' 相当于: $ git branch iss53$ git c ...

  7. primefaces 通过selectOneMenu更新显示隐藏区域

    最重要的是update的区域要指定整个panel,而不是想更新的那个组件 <h:form id="frm"> <h:panelGrid id="pane ...

  8. Linux学习一周初体验

    Linux一周初体验一.准备工欲善其事,必先利其器--虚拟机+Redhat7.0构成学习的环境.安装有条不紊.按部就班.......(涉及到的KVM.VNC.Root密码重置等内容,之后再详细了解)注 ...

  9. JS-百钱买百鸡案例-for循环制作

    <html> <head> <meta charset="utf-8"/> <title></title> <sc ...

  10. HashMap与ArrayList互相嵌套的代码实现

    HashMap嵌套ArrayList的代码实现 结果要求为 三国演义            吕布            周瑜笑傲江湖           令狐冲            林平之神雕侠侣  ...