linux 下c 程序 段错误 分析
linux 下c 程序 段错误 分析
(2008-12-31 16:50:57)
var $tag='it';
var $tag_code='2cec03ae0a5b0d224bb35c9b79dd54c7';
标签:it
分类:C/C++
fopen("/var/spool/cron/tmp","w+");
/////////////////////////////////////////
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
int ret=-1;
printf("***************************************
delPolicy
***************************************************\n");
FILE *f;
f=fopen("var/spool/cron/tmp","w");
if(f==NULL)
{
printf("open tmp failed!\n");
fclose(f);
return -1;
}
printf("open two files
successfully!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
fclose(f);
ret=0;
printf("***************************************
delPolicy
***************************************************\n");
return ret;
}
出现段错误:
原因:1:"/var/spool/cron/tmp"错写成"var/spool/cron/tmp"
2:文件名不能为tmp关键字,可为mytmp
产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址.
一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,它是一个48位的寄存器,
其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,
指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址,以及与此相应的段限和页面交换,
还有程序运行级别还有内存粒度等等的信息。一旦一个程序发生了越界访问,cpu就会产生相应的异常保护,于是segmentation
fault就出现了.
在编程中以下几类做法容易导致段错误,基本是是错误地使用指针引起的
1)访问系统数据区,尤其是往
系统保护的内存地址写数据最常见就是给一个指针以0地址
2)内存越界(数组越界,变量类型不一致等) 访问
相关文档:
相关链接:
http://blog.csdn.net/dongliqiang2006/archive/2009/09/05/4523563.aspx
字符设备
1,字符设备层
在Linux中是作为一个文件来出现的,所有对字符设备的操作都是通过file_operations接口来进行的:
struct cdev {
struct kobject kobj;
struct module *owner;
const struct file_operations *op ......
在Linux系统中,终端设备非常重要,没有终端设备,系统将无法向用户反馈信息,Linux中包含控制台、串口和伪终端3类终端设备。
14.1终端设备
在Linux系统中,终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是Teletype的缩写,Teletype是最早出现的一种终端设备, ......
虚拟机的网络采用Bridged(桥接)方式,刚开始以为,是因为机器上的有些网卡没有连接电缆,而VMWare又恰好使用了该网卡,经过几个小时的测试,通过禁用没连线的网卡、把VMWare的VM0映射到连线的其他网卡,都没有解决问题。
在VM虚拟机中装了redhatlinux9.0,准备与主机共享文件,结果网络不通!
&n ......
转自:http://blog.163.com/haizai219@126/blog/static/44412555200962751636461/
inux下JDK和Tomcat的安装
Tomcat
2009-07-27 17:16:36
阅读503
评论0
字号:大
中
小
1.
参考:
l   ......
C模拟面向对象的方法
抽象数据类型
让客户使用指向没有公开定义 (也许还隐藏在类型定义后边) 的结构类型的指针是一个好办法。只要不访问结构成员, 声明和使用 “匿名” 结构指针 (不完全结构类型指针)是合法的。这也是使用抽象数据类型的原因。
类的方法
把函数指针直接加入到结构中。
继承
你可以使用各种 ......