做linux c语言开发有一小阵子了,在这边自己总结了些心得,相信能让不懂得Linux编程的人慢慢步入Linux殿堂。有任何不对或不准确之处欢迎讨论。
1. 安装 linux 操作系统
既然要学习linux下的c语言开发,那么安装个linux操作系统是必须的。建议安装Ubuntu,这是我目前见过界面最友好的linux操作系统了。关于如何使用Ubuntu以及在其上作开发,可参考我的另外一篇敝作《Ubuntu使用心得》:http://download.csdn.net/source/2206289
2. 熟悉 linux 操作系统下的命令
Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不开使用系统提供的命令。要想真正理解Linux系统,就必须从Linux命令学起,通过基础的命令学习可以进一步理解Linux系统。
关于linux下的命令,欢迎参考我blog上一篇文章《Linux命令整理》:http://blog.csdn.net/sikinzen/archive/2010/04/19/5503769.aspx
3. 学会一种源码编辑器
很多大牛推荐使用 vim/emacs之类的工具,但我还是用着不习惯,应该是我能力未到。我个人比较喜欢的开发方式是:在windows下编辑代码,在linux下编译。
我自己非常喜欢用SourceIns ......
Windows C++:
所需头文件
#include <windows.h>
#include <process.h>
开启一个线程:
hReader = (HANDLE)_beginthreadex(NULL, 0, startReader, this, 0, NULL);
其中,hReader为线程的句柄,
startReader为相应类中的友员函数,必须为外部函数,通过传参(this)来调用类中成员函数,函数声明为
unsigned __stdcall startReader(void* p);
结束一个线程:
TerminateThread(hReader, NULL);
-----------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------- ......
Windows C++:
所需头文件
#include <windows.h>
#include <process.h>
开启一个线程:
hReader = (HANDLE)_beginthreadex(NULL, 0, startReader, this, 0, NULL);
其中,hReader为线程的句柄,
startReader为相应类中的友员函数,必须为外部函数,通过传参(this)来调用类中成员函数,函数声明为
unsigned __stdcall startReader(void* p);
结束一个线程:
TerminateThread(hReader, NULL);
-----------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------- ......
Windows C++:
所需头文件
#include <windows.h>
#include <process.h>
开启一个线程:
hReader = (HANDLE)_beginthreadex(NULL, 0, startReader, this, 0, NULL);
其中,hReader为线程的句柄,
startReader为相应类中的友员函数,必须为外部函数,通过传参(this)来调用类中成员函数,函数声明为
unsigned __stdcall startReader(void* p);
结束一个线程:
TerminateThread(hReader, NULL);
-----------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------- ......
先介绍几个基本概念:
后台进程:在后台运行的无须与用户交互的程序。在多任务操作系统上运行多个后台进程,有些后台进程(例如守护程序)从来都不需要用户输入,其它一些进程只是在用户忙于目前运行于前台的程序时才临时处于后台。
守护进程是一种后台进程。crond进程是众多守护进程中的一种,看看cron这个单词在字典里面的解释:
cron = chronograph,【unix】(时钟)守护程序,(精密)计时程序
简单的说,cron在预定的时间执行预订的命令或者脚本。
cron工作原理:cron由crond守护进程和一组表(crontab文件)组成。
crond守护进程是在系统启动时由init进程启动的,受init进程的监视,如果它不存在了,会被init进程重新启动。这个守护进程每分钟唤醒一次,并通过检查crontab文件判断需要做什么。
每个用户有一个以用户名命名的crontab文件,存放在/var/spool/cron/crontabs目录里。若管理员允许或者禁止其他用户拥有crontab文件,则应编辑/etc/下面的cron.deny和cron.allow这两个文件来禁止或允许用户拥有自己的crontab文件。每一个用户都可以有自己的crontab文件,但在一个较大的系统中,系统管理员一般会禁止这些文件,而只在整个系统保留一个这样的文件。
用户使用 ......
什么是运行级别
运行级就是操作系统当前正在运行的功能级别。
这个级别从1到6 ,
具有不同的功能。
这些级别在/etc/inittab文件里指定。
这个文件是init程序寻找的主要文件,最先运行的服务是那些放在/etc/rc.d 目录下的文件。
不同的运行级定义如下:(可以参考Linux里面的/etc/inittab)
# 缺省的运行级,RHS用到的级别如下:
# 0 - 停机
# 1 - 单用户模式
# 2 - 多用户,但是没有NFS
# 3 - 完全多用户模式
# 4 - 没有用到
# 5 - X11
# 6 - 重新启动
运行级别的原理
1 在目录/etc/rc.d/init.d下有许多服务器脚本程序,一般称为服务(service)
2 在/etc/rc.d下有7个名为rcN.d的目录,对应系统的7个运行级别
3 rcN.d目录下都是一些符号链接文件,这些链接文件都指向init.d目录下的service脚本文件,命名规则为K+nn+服务名或S+nn+服务名,其中nn为两位数字。
4 系统会根据指定的运行级别进入对应的rcN.d目录,并按照文件名顺序检索目录下的链接文件 对于以K开头的文件,系统将终止对应的服务 对于以S开头的文件,系统将启动对应的服务
5 查看运行级别用:runlevel
6 进入其它运行级别用:init N 7。
另外in ......
本文档是Oracle
Database 11.2.0.1 for RHEL5 Server(包括x86和x86_64平台)的静默安装指南. 所有操作无需使用图形界面. 静默安装能减少安装出错的可能性, 也能大大加快安装速度.
# 后跟命令表示以操作系统下root用户操作; 后跟命令表示以操作系统下oracle用户操作;
1.1 上传软件
假如放在/wangnc/oracle/11g/目录下.
# mkdir -p /wangnc/oracle/11g/
# cd /wangnc/oracle/11g/
可通过SecureFX工具sftp上传数据库安装文件.
1.2 Package安装检查
# rpm -q \
binutils \
compat-libstdc++-33 \
elfutils-libelf \
elfutils-libelf-devel \
expat \
gcc \
gcc-c++ \
glibc \
glibc-common \
glibc-devel \
glibc-headers \
libaio \
libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
make \
pdksh \
sysstat \
unixODBC \
unixODBC-devel | grep "not
installed"
1.3 增加数据库组和用户
# id oracle (确认oracle用户是否存在)
# /usr/sbin/groupadd oinstall (建立产品清单管理组)
# /usr/sbin/groupadd dba (建立数据库安装组)
# /usr/sbin/groupadd asmadmin (建立ASM管理组)
# /usr/sbin/groupadd asmdba (建立Grid管理 ......
本文档是Oracle
Database 11.2.0.1 for RHEL5 Server(包括x86和x86_64平台)的静默安装指南. 所有操作无需使用图形界面. 静默安装能减少安装出错的可能性, 也能大大加快安装速度.
# 后跟命令表示以操作系统下root用户操作; 后跟命令表示以操作系统下oracle用户操作;
1.1 上传软件
假如放在/wangnc/oracle/11g/目录下.
# mkdir -p /wangnc/oracle/11g/
# cd /wangnc/oracle/11g/
可通过SecureFX工具sftp上传数据库安装文件.
1.2 Package安装检查
# rpm -q \
binutils \
compat-libstdc++-33 \
elfutils-libelf \
elfutils-libelf-devel \
expat \
gcc \
gcc-c++ \
glibc \
glibc-common \
glibc-devel \
glibc-headers \
libaio \
libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
make \
pdksh \
sysstat \
unixODBC \
unixODBC-devel | grep "not
installed"
1.3 增加数据库组和用户
# id oracle (确认oracle用户是否存在)
# /usr/sbin/groupadd oinstall (建立产品清单管理组)
# /usr/sbin/groupadd dba (建立数据库安装组)
# /usr/sbin/groupadd asmadmin (建立ASM管理组)
# /usr/sbin/groupadd asmdba (建立Grid管理 ......
1. 固定一个MAC地址,特别是在使用多个虚拟机的时候
linux环境下:
用root身份登录,在/etc/rc.d/rc.local里加上这三句
ifconfig eth0 down
ifconfig eth0 hw ether 00:0C:18:EF:FF:ED
ifconfig eth0 up
这样重新reboot后就不怕MAC复原了。
2. ifconfig命令(转载http://www.cnblogs.com/taobataoma/archive/2007/12/27/1016689.html
)
ifconfig [Interface]
Interface是可选项,如果不加此项,则显示系统中所有网卡的信息。如果添加此选项则显示所指定的网卡信息
例如:ifconfig eth0
eth0 Link encap:Ethernet
HWaddr 00:0C:29:F3:3B:F2
inet addr:192.168.0.10 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:78 errors:0 dropped:0 overruns:0 frame:0
TX packets:104 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:11679 (11.4 Kb)
TX bytes:14077 (13.7 Kb)
Interrupt:10 Base address:0x1080
我们可 ......