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