linux程序设计1
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的更多相关文章
- Linux程序设计(一)入门
1. linux程序 Linux应用程序表现为两种特殊类型的文件:可执行文件和脚本文件. 可执行文件:是计算可以直接运行的程序,相当于windows的.exe文件. 脚本文件:一组指令的集合.这些指令 ...
- Linux 程序设计的一些优化措施
Linux 程序设计的一些优化措施 这些知识是在平常的阅读中,零散的获得的,自己总结了一下,分享在这里 全局变量VS函数参数 全局变量在Linux下的驱动编程里边,用的是非常多,例如中断服务函数ISR ...
- Linux程序设计之shell程序设计
看了<linux程序设计(第4版)>(作者:Neil Matthew ,Richard Stones ,陈建 ,宋健建译).做个笔记,以备后面查看. 首先,清楚几个概念. shell编程属 ...
- Linux程序设计:进程通信
日期:忘了. 关键词:Linux程序设计:System-V:进程通信:共享内存:消息队列. 一.共享内存 1.1 基本知识 (待补充) 1.2 代码 一个基于share memory实现的 ...
- 5)Linux程序设计入门--信号处理
)Linux程序设计入门--信号处理 Linux下的信号事件 前言:这一章我们讨论一下Linux下的信号处理函数. Linux下的信号处理函数: 信号的产生 信号的处理 其它信号函数 一个实例 .信号 ...
- 6)Linux程序设计入门--消息管理
)Linux程序设计入门--消息管理 前言:Linux下的进程通信(IPC) Linux下的进程通信(IPC) POSIX无名信号量 System V信号量 System V消息队列 System V ...
- 2)Linux程序设计入门--进程介绍
)Linux程序设计入门--进程介绍 Linux下进程的创建 前言: 这篇文章是用来介绍在Linux下和进程相关的各个概念.我们将会学到: 进程的概念 进程的身份 进程的创建 守护进程的创建 .进程的 ...
- 3)Linux程序设计入门--文件操作
)Linux程序设计入门--文件操作 Linux下文件的操作 前言: 我们在这一节将要讨论linux下文件操作的各个函数. 文件的创建和读写 文件的各个属性 目录文件的操作 管道文件 .文件的创建和读 ...
- 1)Linux程序设计入门--基础知识
)Linux程序设计入门--基础知识 Linux下C语言编程基础知识 前言: 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 会学到以下内容: 源程序编译 Makef ...
- 8)Linux程序设计入门--线程操作
)Linux程序设计入门--线程操作 前言:Linux下线程的创建 介绍在Linux下线程的创建和基本的使用. Linux下的线程是一个非常复杂的问题,由 于我对线程的学习不时很好,我在这里只是简单的 ...
随机推荐
- 【poj3241】 Object Clustering
http://poj.org/problem?id=3241 (题目链接) MD被坑了,看到博客里面说莫队要写曼哈顿最小生成树,我就写了一个下午..结果根本没什么关系.不过还是把博客写了吧. 转自:h ...
- SPOJ375 Query on a tree
Description You are given a tree (an acyclic undirected connected graph) with N nodes, and edges num ...
- windows核心编程读后感(待续)
自从大一读那本超厚的C程序设计以后,从来没有像这样慢慢地读一本书了.windows核心这本书足足看了2个多星期.一张张慢慢看,做笔记.感觉学到了很多基础的知识,关于内核方面的没有啥可以做实验的,都在看 ...
- poj3484 Showstopper 二分
题目地址 二分用的很是巧妙!关键是抽象出问题本质. #include <cstdio> #include <string> #include <cstring> ; ...
- TypeScript Modules(模块)
本文概述了TypeScript中如何使用模块以各种方式来组织代码.我们将涵括内部和外部的模块,并且讨论他们在适合在何时使用和怎么使用.我们也会学习一些如何使用外部模块的高级技巧,并且解决一些当我们使用 ...
- pycharm和输入法的冲突bug
Solution:Either upgrade IBus to version 1.5.11 or add "export IBUS_ENABLE_SYNC_MODE=1" to ...
- resultset 对象获取行字段数据时报:java.sql.SQLException: Column 'id' not found.
resultset 对象获取行字段数据时报:java.sql.SQLException: Column 'id' not found. 代码: String sql="SELECT d.co ...
- Mouse.OverrideCursor
介绍: 获取和设置整个应用程序的光标,WPF父元素将覆盖所有子元素的光标. WPF设置控件的光标: WPF 中每个光标通过一个System.Windows.Input.Cursor表示, 获取Curs ...
- 个人作业—Week3
博客阅读体会 阅读了十几位软件工程师前辈的博文,了解了前辈们作为一名软件工程师的成长经历,我有一些感触. 这十几位前辈们的经历有着很大的差别,有的科班出身,有的则完全自学成才.不同的经历使得前辈们看问 ...
- SQL Server 2012 启动
1. 启动 SQL Server Management studio 2. 选择登录模式 Server name: "." 代表本地的数据库 Authertication: ...