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. 【BZOJ-3931】网络吞吐量 最短路 + 最大流

    3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1228  Solved: 524[Submit][Stat ...

  2. O(nlogn)LIS及LCS算法

    morestep学长出题,考验我们,第二题裸题但是数据范围令人无奈,考试失利之后,刻意去学习了下优化的算法 一.O(nlogn)的LIS(最长上升子序列) 设当前已经求出的最长上升子序列长度为len. ...

  3. Windows Sqlserver Automatic Log Audit Via C/C++

    catalog . 数据库日志审计产品 . Mysql日志审计 . SQLServer日志审计 1. 数据库日志审计产品 Relevant Link: http://enterprise.huawei ...

  4. django写的留言板

    代码见 https://github.com/linux-wang/show-me-the-code/tree/master/dj_test 实际上是 https://github.com/linux ...

  5. 如何在Visual Studio 2013中使用Ribbon For WPF

    1.首先需要 下载Ribbon For WPF.目前最新的版本是Microsoft Ribbon for WPF October 2010. 下载 链接: https://www.microsoft. ...

  6. python运维开发坎坷之路-01

    前言 2014年9月,新疆乌鲁木齐,在51CTO学院看着alex老师的python教学视频,不得不说这是我第一次接触python这门高级语言,从最开始的一无所知到现在能够用python写脚本,再到未来 ...

  7. 获取List集合中最大值的方法

    public static void main(String args[])      {        //Double[] num = { 45.1,45.2 };              Li ...

  8. WinForm------弹出MessageBox窗口的同时隐藏当前窗口

    private void Btn_OK_Click(object sender, EventArgs e) { this.Hide(); //隐藏当前窗口 MessageBox.Show(" ...

  9. split shell tools

    split [-bl] file [prefix] 参数说明: -b, --bytes=SIZE:对file进行切分,每个小文件大小为SIZE.可以指定单位b,k,m. -l, --lines=NUM ...

  10. MySQL学习笔记——安装及配置环境

    1.安装的版本为mysql-5.6.24-win32.1432006610压缩版 查看教程http://jingyan.baidu.com/article/f3ad7d0ffc061a09c3345b ...