linux错误号对应信息

linux错误号对应信息
linux错误号对应信息

以下错误信息是从linux内核中提取,并使用baidu翻译得出中文含义,在后半部分英文部分,是内核标记错误的原文。新内核中未能提取到,不过差异不会很大。

linux错误号及对应的意义

error.00是:成功

error.01是:不允许操作

error.02是:没有这样的文件或目录

error.03是:没有这样的过程

error.04:中断的系统调用

error.05是:输入/输出错误

error.06是:没有这样的设备或地址

error.07是:列表太长

error.08是:执行格式错误

error.09:坏的文件描述符

error.10是:没有子进程

error.11是:资源暂时不可用

error.12是:无法分配内存

error.13是:拒绝许可

error.14是:错误的地址

error.15是块设备请求

error.16是:设备或资源忙

error.17是:文件存在

error.18是无效的交叉链接

error.19是:没有这样的设备

error.20是:不是一个目录

error.21:是一个目录

error.22是无效的参数

error.23是:打开太多的文件系统

error.24是:打开的文件太多error.25是:不适当的ioctl error.26:文本文件忙

error.27是:文件太大

error.28是:在设备上没有空间error.29是:非法谋取

error.30是只读文件系统error.31是:太多的链接error.32是:断管

error.33:数值参数的域名error.34:数值结果超出范围error.35是:资源死锁避免error.36是:文件名太长error.37是:没有可用锁error.38是:功能没有实现error.39:目录不空

error.40:符号链接层次太多error.41是:未知错误41 error.42是:没有期望类型的消息error.43:标识符删除

error.44:频道数目超出范围error.45是:2级不同步

error.46是:3级中断

error.47是:3级复位

error.48:链接数超出范围error.49:协议驱动程序没有连接error.50是:没有可用之结构error.51是:2级中断

error.52是无效的交换

error.53是:请求描述符无效error.54是:交换全

error.55是:没有阳极

error.56是无效的请求的代码error.57是无效的槽

error.58是:未知错误58 error.59是:错误的字体文件格式error.60是:设备不流

error.61是:无可用数据

error.62:计时器过期

error.63是:出流资源

error.64是:机上的不是网error.65是:没有安装软件包error.66是:对象是远程的error.67是:联系被切断

error.68是:广告的错误

error.69是:srmount误差error.70是:发送时的通讯错误error.71:协议错误

error.72企图是:跳

error.73:范畴专题具体的错误error.74是坏消息

error.75:值太大,定义数据类型error.76是:名不是唯一的网络error.77是:文件描述符在坏状态error.78:远程地址改变了

error.79是:无法访问必要的共享库

error.80是:访问损坏的共享库

error.81:库段. out损坏。

error.82是:试图链接太多的共享库error.83是:不能直接执行一个共享库error.84是无效的或不完整的多字节或宽字符error.85是:应该重新启动中断的系统调用error.86:流管误差

error.87是:用户太多

error.88套接字操作是:非套接字上error.89是:需要目标地址

error.90是:消息太长

error.91:协议类型错误的插座

error.92:协议不可用

error.93是:不支持的协议

error.94:套接字类型不受支持

error.95是:不支持的操作

error.96是:不支持的协议族

error.97:协议不支持的地址

error.98:地址已在使用

error.99是:无法分配请求的地址

error.100是:网络瘫痪

error.101是:网络不可达

error.102是:网络连接丢失

error.103是:软件导致连接中断

error.104是:连接被重置

error.105是:没有可用的缓冲空间

error.106是:传输端点已经连接

error.107是:运输终点没有连接

error.108是:无法发送后运输终点关机error.109是:太多的参考文献:不能接error.110是:连接超时

error.111是:拒绝连接

error.112是:主机已关闭

error.113是:没有主机的路由

error.114:进程已运行

error.115是:正在进行操作

error.116:陈旧的文件句柄

error.117是:结构需要清洗

error.118是:不是一个开发者指定类型的文件error.119是:开发者提供无信号

error.120:是一个命名的文件类型

error.121:远程输入/输出错误

error.122是:超出磁盘配额

error.123是:没有中发现

error.124是:错误的媒体类型

error.125是:取消操作

error.126是:所需的关键不可用

error.127:关键已过期

error.128:关键是被撤销

error.129:关键是拒绝服务

error.130是:人死了

error.131是:国家赔偿

error.132是:未知错误132

132-255全是未知错误

英文对照

error.00 is: Success

error.01 is: Operation not permitted

error.02 is: No such file or directory

error.03 is: No such process

error.04 is: Interrupted system call

error.05 is: Input/output error

error.06 is: No such device or address

error.07 is: Argum ent list too long

error.08 is: Exec form at error

error.09 is: Bad file descriptor

error.10 is: No child processes

error.11 is: Resource tem porarily unavailable error.12 is: Cannot allocate m emory

error.13 is: Permission denied

error.14 is: Bad address

error.15 is: Block device required

error.16 is: Device or resource busy

error.17 is: File exists

error.18 is: Invalid cross-device link

error.19 is: No such device

error.20 is: Not a directory

error.21 is: Is a directory

error.22 is: Invalid argument

error.23 is: Too m any open files in system error.24 is: Too m any open files

error.25 is: Inappropriate ioctl for device error.26 is: Text file busy

error.27 is: File too large

error.28 is: No space left on device

error.29 is: Illegal seek

error.30 is: Read-only file system

error.31 is: Too m any links

error.32 is: Broken pipe

error.33 is: Numerical argument out of dom ain error.34 is: Numerical result out of range error.35 is: Resource deadlock avoided error.36 is: File name too long

error.37 is: No locks available

error.38 is: Function not im plemented

error.39 is: Directory not em pty

error.40 is: Too m any levels of sym bolic links

error.41 is: Unknown error 41

error.42 is: No message of desired type

error.43 is: Identifier removed

error.44 is: Channel number out of range

error.45 is: Level 2 not synchronized

error.46 is: Level 3 halted

error.47 is: Level 3 reset

error.48 is: Link number out of range

error.49 is: Protocol driver not attached

error.50 is: No CSI structure available

error.51 is: Level 2 halted

error.52 is: Invalid exchange

error.53 is: Invalid request descriptor

error.54 is: Exchange full

error.55 is: No anode

error.56 is: Invalid request code

error.57 is: Invalid slot

error.58 is: Unknown error 58

error.59 is: Bad font file format

error.60 is: Device not a stream

error.61 is: No data available

error.62 is: Timer expired

error.63 is: Out of stream s resources

error.64 is: Machine is not on the network

error.65 is: Package not installed

error.66 is: Object is rem ote

error.67 is: Link has been severed

error.68 is: Advertise error

error.69 is: Srmount error

error.70 is: Communication error on send

error.71 is: Protocol error

error.72 is: Multihop attempted

error.73 is: RFS specific error

error.74 is: Bad message

error.75 is: Value too large for defined data type

error.76 is: Name not unique on network

error.77 is: File descriptor in bad state

error.78 is: Remote address changed

error.79 is: Can not access a needed shared library

error.80 is: Accessing a corrupted shared library

error.81 is: .lib section in a.out corrupted

error.82 is: Attem pting to link in too m any shared libraries error.83 is: Cannot exec a shared library directly

error.84 is: Invalid or incom plete m ultibyte or wide character

error.85 is: Interrupted system call should be restarted error.86 is: Streams pipe error

error.87 is: Too m any users

error.88 is: Socket operation on non-socket

error.89 is: Destination address required

error.90 is: Message too long

error.91 is: Protocol wrong type for socket

error.92 is: Protocol not available

error.93 is: Protocol not supported

error.94 is: Socket type not supported

error.95 is: Operation not supported

error.96 is: Protocol family not supported

error.97 is: Address family not supported by protocol error.98 is: Address already in use

error.99 is: Cannot assign requested address

error.100 is: Network is down

error.101 is: Network is unreachable

error.102 is: Network dropped connection on reset

error.103 is: Software caused connection abort

error.104 is: Connection reset by peer

error.105 is: No buffer space available

error.106 is: Transport endpoint is already connected error.107 is: Transport endpoint is not connected

error.108 is: Cannot send after transport endpoint shutdown error.109 is: Too m any references: cannot splice

error.110 is: Connection tim ed out

error.111 is: Connection refused

error.112 is: Host is down

error.113 is: No route to host

error.114 is: Operation already in progress

error.115 is: Operation now in progress

error.116 is: Stale NFS file handle

error.117 is: Structure needs cleaning

error.118 is: Not a XENIX named type file

error.119 is: No XENIX sem aphores available

error.120 is: Is a named type file

error.121 is: Remote I/O error

error.122 is: Disk quota exceeded

error.123 is: No m edium found

error.124 is: Wrong medium type

error.125 is: Operation canceled

error.126 is: Required key not available

error.127 is: Key has expired

error.128 is: Key has been revoked

error.129 is: Key was rejected by service error.130 is: Owner died

error.131 is: State not recoverable error.132 is: Unknown error 132

132-255全是Unknown error

linux C用户态调试追踪函数调用堆栈以及定位段错误

linux C用户态调试追踪函数调用堆栈以及定位段错误 一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的。 在glibc头文件"execinfo.h"中声明了三个函数用于获取当前线程的函数调用堆栈。 int backtrace(void **buffer,int size) 该函数用于获取当前线程的调用堆栈,获取的信息将会被存放在buffer中,它是一个指针列表。参数size 用来指定buffer中可以保存多少个void* 元素。函数返回值是实际获取的指针个数,最大不超过size大小 在buffer中的指针实际是从堆栈中获取的返回地址,每一个堆栈框架有一个返回地址 注意:某些编译器的优化选项对获取正确的调用堆栈有干扰,另外内联函数没有堆栈框架;删除框架指针也会导致无法正确解析堆栈内容 char ** backtrace_symbols (void *const *buffer, int size) backtrace_symbols将从backtrace函数获取的信息转化为一个字符串数组. 参数buffer应该是从backtrace函数获取的指针数组,size是该数组中的元素个数(backtrace的返回值) 函数返回值是一个指向字符串数组的指针,它的大小同buffer相同.每个字符串包含了一个相对于buffer中对应元素的可打印信息.它包括函数名,函数的偏移地址,和实际的返回地址 现在,只有使用ELF二进制格式的程序才能获取函数名称和偏移地址.在其他系统,只有16进制的返回地址能被获取.另外,你可能需要传递相应的符号给链接器,以能支持函数名功能(比如,在使用GNU ld链接器的系统中,你需要传递(-rdynamic),-rdynamic可用来通知链接器将所有符号添加到动态符号表中,如果你的链接器支持-rdynamic的话,建议将其加上!) 该函数的返回值是通过malloc函数申请的空间,因此调用者必须使用free函数来释放指针. 注意:如果不能为字符串获取足够的空间函数的返回值将会为NULL void backtrace_symbols_fd (void *const *buffer, int size, int fd)

linux错误码大全

linux错误码大全 查看错误代码errno是调试程序的一个重要方法。当linuc C api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因。在实际编程中用这一招解决了不少原本看来莫名其妙的问题。比较麻烦的是每次都要去linux源代码里面查找错误代码的含义,现在把它贴出来,以后需要查时就来这里看了。 1-34号错误号是在内核源码的include/asm-generic/errno-base.h定义 35-132则是在include/asm-generic/errno.h中定义 剩下还有一些更大的错误号是留给内核级别的,如系统调用等,用户程序一般是看不见的这些号的,Ubuntu9.10中 /usr/src/linux-headers-2.6.31-21-generic/include/linux/errno.h #ifndef _ASM_GENERIC_ERRNO_BASE_H #define _ASM_GENERIC_ERRNO_BASE_H #define EPERM 1 /* Operation not permitted */ #define ENOENT 2 /* No such file or directory */ #define ESRCH 3 /* No such process */ #define EINTR 4 /* Interrupted system call */ #define EIO 5 /* I/O error */ #define ENXIO 6 /* No such device or address */ #define E2BIG 7 /* Argument list too long */ #define ENOEXEC 8 /* Exec format error */ #define EBADF 9 /* Bad file number */ #define ECHILD 10 /* No child processes */ #define EAGAIN 11 /* Try again */ #define ENOMEM 12 /* Out of memory */ #define EACCES 13 /* Permission denied */ #define EFAULT 14 /* Bad address */ #define ENOTBLK 15 /* Block device required */ #define EBUSY 16 /* Device or resource busy */ #define EEXIST 17 /* File exists */ #define EXDEV 18 /* Cross-device link */ #define ENODEV 19 /* No such device */

c语言段错误小结

C段错误总结 C语言2009-02-17 11:49:51 阅读21 评论0 字号:大中小订阅 最近一段时间在linux下用C做一些学习和开发,但是由于经验不足,问题多多。而段错误就是让我非常头痛的一个问题。不过,目前写几百行的代码,也很少出现段错误,或者是即使出现了,也很容易找出来,并且处理掉。 那什么是段错误?段错误为什么是个麻烦事?以及怎么发现程序中的段错误以及如何避免发生段错误呢? 一方面为了给自己的学习做个总结,另一方面由于至今没有找到一个比较全面介绍这个虽然是“FREQUENTLY ASKED QUESTIONS”的问题,所以我来做个抛砖引玉吧。下面就从上面的几个问题出发来探讨一下“Segmentation faults"吧。 目录 1。什么是段错误? 2。为什么段错误这么“麻烦”? 3。编程中通常碰到段错误的地方有哪些? 4。如何发现程序中的段错误并处理掉? 正文 1。什么是段错误? 下面是来自https://www.360docs.net/doc/d88717269.html,的定义: A segmentation fault(often shortened to segfault) is a particular error condition that can occur during the operation of computer software. In short, a segmentation fault occurs when a program attempts to access a memory location that it is not allowed to access, or attempts to access a memory location in a way that is not allowed (e.g., attempts to write to a read-only location, or to overwrite part of the operating system). Systems based on processors like the Motorola 68000 tend to refer to these events as Address or Bus errors. Segmentation is one approach to memory management and protection in the operating system. It has been superseded by paging for most purposes, but much of the terminology of segmentation is still used, "segmentation fault" being an example. Some operating systems still have segmentation at some logical level although paging is used as the main memory management policy.

Linux服务器常用命令(简化版)

Linux服务器常用命令(简化版) 信息来源:网络整理:HY 日期:2011-5-27 Intel Fortran编译 Linux shell管道命令(pipe)使用及与shell重定向 Linux命令替换 Linux 任务控制(bg jobs fg nohup &) Linux进程查看 Linux账户管理 Linux系统与硬盘信息查询 Linux VIM语法高亮与程序段错误 Linux十大常用命令

Intel Fortran编译 完整编译顺序 $ ifort -c Hello.f90 -o Hello.o编译源文件(.f90)生成目标文件(.o) $ ifort Hello.o -o Hello链接目标文件生成可执行程序Hello $./Hello 执行可执行程序 默认(常用编译方法) $ ifort Hello.f90编译&链接 $./a.out 执行a.out(默认可执行程序名) 后台运行 $ ./a.out & 后台运行,退出shell会使程序停止,输出信息会显示在屏幕,不建议这样使用$nohup ./a.out & 输出到屏幕的信息输出到nohup.out文件 $nohup ./a.out > screen.txt & 输出到屏幕的信息输出到screen.txt文件(推荐) Linux shell管道命令(pipe)使用及与shell重定向 Ref:https://www.360docs.net/doc/d88717269.html,/chengmo/archive/2010/10/21/1856577.html 重定向 详细解释参考:https://www.360docs.net/doc/d88717269.html,/view/2173319.htm 在Linux命令行模式中,如果命令所需的输入不是来自键盘,而是来自指定的文件,这就是输入重定向。同理,命令的输出也可以不显示在屏幕上,而是写入到指定文件中,这就是输出重定向。 重定向分为: 重定向分为 输出重定向、输入重定向和错误重定向。 < 实现输入重定向。 >或>> 实现输出重定向,用户可以使用输出重定向把一个命令的输出重定向到一个文件 1)ls –l /etc>dir 将ls命令生成的/etc目录下的一个清单存到当前目录 中的dir文件,而不在屏幕输出。 2)ls –l /usr>>dir 将ls命令生成的/usr目录的一个清单以追加的方式存 到当前目录中的dir文件中。 重定向连接两个或多个文件? 使用cat命令并重定向输出到一个文件可以连接两个或多个文件。 重定向追加到一个文件:可以使用双重定向输出符号“>>”,保留文件以前的内容。 这种情况下,命令输出追加到另一个文件中。 重定向重定向标准输出到一个设备? 除了重定向一个命令的输出到一个文件,也可以把它重定向到一个设备,因为UNIX系统将设备当做文件。 $echo “Hello! I am petter!” > /dev/tty01 重定向标准输入? 使用“<”重定向输入。例如:用户已经创建好了一个文件letter。如果希望通过电子邮件发送给用户petter。可以使用下面方式:$mail petter < letter 重定向标准错误重定向? 没有专门的符号用于重定向stderr。我们可以同样使用“< ”或“>”符号,但需在它前面补一个数字2。 PS:重定向的优先级大于管道的优先级!^_^ 管道右边的命令只能对管道左边的命令的标准输出(输出到屏幕)起作用,不对错误输出(也输出到屏幕)起作用。 一个命令的执行首先决定0,1,2设备的定向,然后才执行命令,可以将定向理解为命令执行

浅析Linux下core文件

浅析Linux下core文件 当我们的程序崩溃时,内核有可能把该程序当前内存映射到core文件里,方便程序员找到程序出现问题的地方。最常出现的,几乎所有C程序员都出现过的错误就是“段错误”了。也是最难查出问题原因的一个错误。下面我们就针对“段错误”来分析core文件的产生、以及我们如何利用core文件找到出现崩溃的地方。 何谓core文件 当一个程序崩溃时,在进程当前工作目录的core文件中复制了该进程的存储图像。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。 当程序接收到以下UNIX信号会产生core文件: 名字说明ANSI C POSIX.1SVR4 4.3+BSD 缺省动作 SIGABRT异常终止(abort) . . . .终止w/core SIGBUS硬件故障 . . .终止w/core SIGEMT硬件故障 . .终止w/core SIGFPE算术异常 . . . .终止w/core SIGILL非法硬件指令 . . . .终止w/core SIGIOT硬件故障 . .终止w/core SIGQUIT终端退出符 . . .终止w/core SIGSEGV无效存储访问 . . . .终止w/core SIGSYS无效系统调用 . .终止w/core SIGTRAP硬件故障 . .终止w/core SIGXCPU超过CPU限制 (setrlimit) . .终止w/core

SIGXFSZ超过文件长度限 . .终止w/core 制(setrlimit) 在系统默认动作列,“终止w/core”表示在进程当前工作目录的core文件中复制了该进程的存储图像(该文件名为core,由此可以看出这种功能很久之前就是UNIX功能的一部分)。大多数UNIX调试程序都使用core 文件以检查进程在终止时的状态。 core文件的产生不是POSIX.1所属部分,而是很多UNIX版本的实现特征。UNIX第6版没有检查条件(a)和(b),并且其源代码中包含如下说明:“如果你正在找寻保护信号,那么当设置-用户-ID命令执行时,将可能产生大量的这种信号”。4.3 + BSD产生名为core.prog的文件,其中prog是被执行的程序名的前1 6个字符。它对core文件给予了某种标识,所以是一种改进特征。 表中“硬件故障”对应于实现定义的硬件故障。这些名字中有很多取自UNIX早先在DP-11上的实现。请查看你所使用的系统的手册,以确切地确定这些信号对应于哪些错误类型。 下面比较详细地说明这些信号。 ? SIGABRT 调用abort函数时产生此信号。进程异常终止。 ? SIGBUS 指示一个实现定义的硬件故障。 ? SIGEMT 指示一个实现定义的硬件故障。 EMT这一名字来自PDP-11的emulator trap 指令。 ? SIGFPE 此信号表示一个算术运算异常,例如除以0,浮点溢出等。 ? SIGILL 此信号指示进程已执行一条非法硬件指令。 4.3BSD由abort函数产生此信号。SIGABRT现在被用于此。

去年Linux复习题(全)

1. Linux文件权限一共10位长度,分成四段,第三段表示的内容是( )。 A 文件类型 B 文件所有者的权限 C 文件所有者所在组的权限 D 其他用户的权限 2. 终止一个前台进程可能用到的命令和操作( )。 A kill B ctrl + C C shut down D halt 3.在使用mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的选项是( )。 A –m B -d C -f D –p 4. 一个文件名字为rr.Z,可以用来解压缩的命令是( )。 A tar B gzip C compress D uncompress 5. 下列提法中,不属于ifconfig命令作用范围的是( )。 A 配置本地回环地址 B 配置网卡的IP地址 C 激活网络适配器 D 加载网卡到内核中 6. 下列不是Linux系统进程类型的是( )。 A 交互进程 B 批处理进程 C 守护进程 D 就绪进程 7. 内核不包括的子系统是 ( )。 A 进程管理系统 B 内存管理系统 C I/O管理系统D硬件管理系统 8.若一台计算机的内存为128MB,则交换分区的大小通常是( )。 A 64M B B 128MB C 256MB D 512MB 10.在TCP/IP模型中,应用层包含了所有的高层协议,在下列的一些应用协议中,是能够实现本地与远程主机之间的文件传输工作( )。 A telnet B FTP C SNMP D NFS 11.对名为fido的文件用chmod 551 fido 进行了修改,则它的许可权是 ( )。 A -rwxr-xr-x B -rwxr--r— C -r--r--r— D -r-xr-x—x 12.用ls –al 命令列出下面的文件列表, ( )文件是符号连接文件。 A -rw-rw-rw- 2 hel-s users 56 Sep 09 11:05 hello B -rwxrwxrwx 2 hel-s users 56 Sep 09 11:05 goodbey C drwxr--r-- 1 hel users 1024 Sep 10 08:10 zhang D lrwxr--r-- 1 hel users 2024 Sep 12 08:12 cheng 13.NFS是系统( )。 A 文件 B 磁盘 C 网络文件 D 操作 14.Linux文件系统的文件都按其作用分门别类地放在相关的目录中,对于外部设备文件,一般应将其放在( ) 目录中。 A /bin B /etc C /dev D /lib 15.关闭linux系统(不重新启动)可使用命令( )。 A Ctrl+Alt+Del B halt C shutdown -r now D reboot 16.用命令ls -al显示出文件ff的描述如下所示,由此可知文件ff的类型为( ) 。 -rwxr-xr-- 1 root root 599 Cec 10 17:12 ff A 普通文件 B 硬链接 C 目录 D 符号链接 17.删除文件命令为:( ) 。 A mkdir B rmdir C mv D rm 18.对文件进行归档的命令为( ) 。 A dd B cpio C gzip D tar

Linux下segment fault的调试

Linux下的段错误产生的原因及调试方法 简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在 对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是 由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后 13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运 行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段 以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等 等的信息。一旦一个程序发生了越界访问,cpu就会产生相应的异常保护,于是 segmentation fault就出现了. 在编程中以下几类做法容易导致段错误,基本是是错误地使用指针引起的 1)访问系统数据区,尤其是往系统保护的内存地址写数据 最常见就是给一个指针以0地址

2)内存越界(数组越界,变量类型不一致等)访问到不属于你的内存区域解决方法 我们在用C/C++语言写程序的时侯,内存管理的绝大部分工作都是需要我们来做的。实际 上,内存管理是一个比较繁琐的工作,无论你多高明,经验多丰富,难免会在此处犯些 小错误,而通常这些错误又是那么的浅显而易于消除。但是手工“除虫”(debug),往 往是效率低下且让人厌烦的,本文将就"段错误"这个内存访问越界的错误谈谈如何快速定 位这些"段错误"的语句。 下面将就以下的一个存在段错误的程序介绍几种调试方法: 1dummy_function(void) 2{ 3unsigned char*ptr=0x00; 4*ptr=0x00; 5} 6 7int main(void) 8{ 9dummy_function(); 10

linux基础实验报告含代码

Linux基础实验

目录 实验一 (3) 实验二 (4) 实验三 (6) 实验四 (9) 实验五 (11) 实验六 (14) 实验七 (16)

实验一螺旋矩阵 一、实验目的 1.熟悉linux下c程序编写。 2.掌握Makefile编写方法。 二、实验环境和工具 Red Hat Linux 三、实验流程 1.编写螺旋矩阵程序 2.编写Makefile文件 四、实验结果 五、实验心得 通过这次实验,我熟悉了linux下c语言程序的编写,掌握了vi的一些常用操作,学会了使用gcc命令和makefile文件两种方法编译程序。同时也使我熟悉了linux里常用命令的使 用,还有,学会了挂载U盘的方法,可以很方便的往linux里传送文件。 六、关键代码 Makefile 文件 CC=gcc EXEC=juzhen OBJS=juzhen.o all:$(EXEC) $(EXEC):$(OBJS) $(CC) -o $@ $(OBJS) clean: -rm -f $(EXEC) $(OBJS)

实验二添加、删除用户 一、实验目的 1.设计一个shell程序,分组批量添加用户。 2.再设计一个批量删除用户的shell程序。 二、实验环境和工具 Red Hat Linux 三、实验流程 1.编写shell程序 2.修改文件权限 chmod +x addusers 3.运行脚本 四、实验结果 添加用户: 删除用户:

五、实验心得 通过本次实验,我了解了shell脚本编程的方法和其语法规则。掌握了使用shell脚本程序添加、删除用户的方法。需要注意的是:shell脚本直接用vi编写,要特别注意空格。 六、关键代码 添加用户: 删除用户:

段错误(core dumped)

段错误 (core dumped) 当我们的程序崩溃时,内核有可能把该程序当前内存映射到core文件里,方便程序员找到程序出现问题的地方。最常出现的,几乎所有C程序员都出现过的错误就是“段错误”了。也是最难查出问题原因的一个错误。下面我们就针对“段错误”来分析core文件的产生、以及我们如何利用core文件找到出现崩溃的地方。 何谓core文件 当一个程序崩溃时,在进程当前工作目录的core文件中复制了该进程的存储图像。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。 使用core文件调试程序 看下面的例子: #include char *str = "test"; void core_test(){ str[1] ='T'; } int main(){ core_test(); return0; } 编译: gcc –g core_dump_test.c -o core_dump_test 如果需要调试程序的话,使用gcc编译时加上-g选项,这样调试core文件的时候比较容易找到错误的地方。 执行: ./core_dump_test 段错误 运行core_dump_test程序出现了“段错误”,但没有产生core文件。这是因为系统默认core文件的大小为0,所以没有创建。可以用ulimit命令查看和修改core文件的大小。ulimit -c 0 ulimit -c 1000

ulimit -c 1000 -c指定修改core文件的大小,1000指定了core文件大小。也可以对core文件的大小不做限制,如: ulimit -c unlimited ulimit -c unlimited 如果想让修改永久生效,则需要修改配置文件,如.bash_profile、/etc/profile或 /etc/security/limits.conf。 再次执行: ./core_dump_test 段错误 (core dumped) ls core.* core.6133 可以看到已经创建了一个core.6133的文件.6133是core_dump_test程序运行的进程ID。调式core文件 core文件是个二进制文件,需要用相应的工具来分析程序崩溃时的内存映像。 file core.6133 core.6133: ELF 32-bit LSB core file Intel 80386, version 1 (SYSV),SVR4-style, from 'core_dump_test' 在Linux下可以用GDB来调试core文件。 gdb core_dump_test core.6133 GNU gdb Red Hat Linux(5.3post-0.20021129.18rh) Copyright 2003 Free Software Foundation,Inc. GDB is free software, covered by the GNU General Public License,and you are welcome to change it and/or distribute copies of it under certainconditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type"show warranty" for details. This GDB was configured as"i386-redhat-linux-gnu"... Core was generated by `./core_dump_test'. Program terminated with signal 11, Segmentationfault.

Linux下的段错误产生的原因及调试方法(精)

简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等的信息。一旦一个程序发生了越界访问,cpu就会产生相应的异常保护,于是segmentation fault就出现了. 在编程中以下几类做法容易导致段错误,基本是是错误地使用指针引起的 1)访问系统数据区,尤其是往系统保护的内存地址写数据 最常见就是给一个指针以0地址 2)内存越界(数组越界,变量类型不一致等) 访问到不属于你的内存区域 解决方法 我们在用C/C++语言写程序的时侯,内存管理的绝大部分工作都是需要我们来做的。实际上,内存管理是一个比较繁琐的工作,无论你多高明,经验多丰富,难免会在此处犯些小错误,而通常这些错误又是那么的浅显而易于消除。但是手工“除虫”(debug),往往是效率低下且让人厌烦的,本文将就"段错误"这个内存访问越界的错误谈谈如何快速定位这些"段错误"的语句。 下面将就以下的一个存在段错误的程序介绍几种调试方法: 1 dummy_function (void) 2 { 3 unsigned char *ptr = 0x00; 4 *ptr = 0x00; 5 } 6 7 int main (void) 8 { 9 dummy_function (); 10 11 return 0; 12 } 作为一个熟练的C/C++程序员,以上代码的bug应该是很清楚的,因为它尝试操作地址为0的内存区域,而这个内存区域通常是不可访问的禁区,当然就会出错了。我们尝试编译运行它:

Linux ELF 运行时内存详解 - 黑客防线官方站

Linux ELF 运行时内存详解 4/22/2012 前一段时间做ROP (return-oriented programming )的东西,想要系统的了解Linux 中程序的内存格式(memory layout ),网上有很多文章,却没有一个深入完整的介绍。所以花了些时间做深入的了解,不放过一个细节。由于最初写的是英文文档,所以文中的图都是用英文标识的,不过应该不影响阅读。 本文详细解释了Linux ELF 文件的虚拟地址空间。另外本文也大概介绍了ASLR (Address Space Layout Randomization)技术对ELF 虚拟地址空间的影响。作者的测试系统是Linux Ubuntu 2.6.32-24和Vmware Workstation 7。另外所有的分析都基于Intel x86架构。 虚拟地址空间 当代的操作系统中每个进程都有自己的独立虚拟地址空间。在32位系统上,该虚拟地址空间有4G 大小。为了将虚拟地址转换为物理地址,Linux 内核使用了一个两级(事实上是三级,但是中间一级没有任何实质操作)分页机制,即页目录表和页表。分页机制与MMU (Memory Management Unit )合作将虚拟地址转换为物理地址。当操作系统引入虚拟地址后,所有的用户操作系统和内核线程(事实上Linux 只有进程概念而没有线程概念,Linux 通过页表机制来模拟实现内核线程)都将运行于虚拟地址模式。 另外Linux (以及Windows )使用了CPU 提供的权限机制。内核代码将运行于ring 0而用户程序运行于ring 3。 因此为了适应该分级机制以及适应多任务机制,Linux 的虚拟地址空间被分为两部分,如图1所示: 0xffff ffff 0x0Linux Virtual Address Split 0xffff ffff 0x0 Windows Virtual Address Split 图1. Linux/Windows 虚拟地址空间的内核部分和用户部分。 Linux 中,内核空间为0xc0000000到0xffffffff 的地址,因此内核代码将被映射到区域。而在Windows 中,默认的分割方式为内核与用户各占2GB 。本文仅详细分析Linux 的地址空间而不再涉及Windows 。下面分两部分介绍Linux 地址空间,首先是内核地址空间然后再介绍用户地址空间。 1. 内核地址空间 黑 客防线 a c k e r .c o m .c n 明出处

Linux软中断的实现

Linux软中断的实现 1.1 注册还是以我最熟悉的两个老朋友做为开篇:open_softirq(NET_TX_SOFTIRQ, net_tx_action); open_softirq(NET_RX_SOFTIRQ, net_rx_action);open_softirq 向内核注册一个软中断,其实质是设置软中断向量表相应槽位,注册其处理函数:void open_softirq(int nr, void (*action)(struct softirq_action *)){ softirq_vec[nr].action = action;}复制代码 softirq_vec是整个软中断的向量表:struct softirq_action{ void (*action)(struct softirq_action *);};static struct softirq_action softirq_vec[NR_SOFTIRQS] __cacheline_aligned_in_smp;复制代码NR_SOFTIRQS是最大软中断向量数,内核支持的所有软中断如下:enum{ HI_SOFTIRQ=0, TIMER_SOFTIRQ, NET_TX_SOFTIRQ, NET_RX_SOFTIRQ, BLOCK_SOFTIRQ, TASKLET_SOFTIRQ, SCHED_SOFTIRQ, HRTIMER_SOFTIRQ, RCU_SOFTIRQ, /* Preferable RCU should always be the last softirq */ NR_SOFTIRQS};复制代码好像后为为RPS新增了一个,不过这我的内核版本偏低。1.2 激活当需要调用软中断时,需

c语言段错误及调试总结

标准C语言段错误总结 C语言2009-02-17 11:49:51 阅读21 评论0 字号:大中小订阅 最近一段时间在linux下用C做一些学习和开发,但是由于经验不足,问题多多。而段错误就是让我非常头痛的一个问题。不过,目前写几百行的代码,也很少出现段错误,或者是即使出现了,也很容易找出来,并且处理掉。 那什么是段错误?段错误为什么是个麻烦事?以及怎么发现程序中的段错误以及如何避免发生段错误呢? 一方面为了给自己的学习做个总结,另一方面由于至今没有找到一个比较全面介绍这个虽然是“FREQUENTLY ASKED QUESTIONS”的问题,所以我来做个抛砖引玉吧。下面就从上面的几个问题出发来探讨一下“Segmentation faults"吧。 目录 1。什么是段错误? 2。为什么段错误这么“麻烦”? 3。编程中通常碰到段错误的地方有哪些? 4。如何发现程序中的段错误并处理掉? 正文 1。什么是段错误? 下面是来自https://www.360docs.net/doc/d88717269.html,的定义: A segmentation fault(often shortened to segfault) is a particular error condition that can occur during the operation of computer software. In short, a segmentation fault occurs when a program attempts to access a memory location that it is not allowed to access, or attempts to access a memory location in a way that is not allowed (e.g., attempts to write to a read-only location, or to overwrite part of the operating system). Systems based on processors like the Motorola 68000 tend to refer to these events as Address or Bus errors. Segmentation is one approach to memory management and protection in the operating system. It has been superseded by paging for most purposes, but much of the terminology of segmentation is still used, "segmentation fault" being an example. Some operating systems still have segmentation at some logical level although paging is used as the main memory management policy.

Linux 段错误

1执行socket文件时,出现段错误(core dumped) 产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 解决方法: 利用gdb逐步查找段错误: 首先我们需要一个带有调试信息的可执行程序,所以我们加上―-g -rdynamic"的参数进行编译,然后用gdb调试运行这个新编译的程序,具体步骤如下: 1、gcc -g -rdynamic d.c 2、gdb ./a.out 3、r 这样就找到了出错位臵。然后在相应位臵修改。 2linux 段错误如何调试 linux下的c程序常常会因为内存访问错误等原因造成segment fault(段错误)此时如果系统core dump功能是打开的,那么将会有内存映像转储到硬盘上来,之后可以用gdb对core文件进行分析,还原系统发生段错误时刻的堆栈情况。这对于我们发现程序bug很有帮助。 使用ulimit -a可以查看系统core文件的大小限制;使用ulimit -c [kbytes]可以设臵系统允许生成的core文件大小。 ulimit -c 0 不产生core文件 ulimit -c 100 设臵core文件最大为100k ulimit -c unlimited 不限制core文件大小 步骤: 1、当发生段错误时,我们查看ulimit -a (core file size (blocks, -c) 0)并没有文件, 2、设臵:ulimit -c unlimited 不限制core文件大小 3.、运行程序,发生段错误时会自动记录在core中 4、test]$ ls -al core.* 在那个文件下(-rw------- 1 leconte leconte 139264 01-06 22:3 1 core.2065) 5、使用gdb 运行程序和段错误记录的文件。(est]$ gdb ./test core.2065)

linux下的静态库与动态库的区别,Gdb调试段错误,自动生成Makefile

linux下的静态库与动态库的区别 1.什么是库 在windows平台和linux平台下都大量存在着库。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。 由于windows和linux的本质不同,因此二者库的二进制是不兼容的。 2.库的种类 linux下的库有两种:静态库和共享库(动态库)。 二者的不同点在于代码被载入的时刻不同。 静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。 共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。 3.库存在的意义 库是别人写好的现有的,成熟的,可以复用的代码,你可以使用但要记得遵守许可协议。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。 共享库的好处是,不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例。 4.库文件是如何产生的在linux下 静态库的后缀是.a,它的产生分两步 Step 1.由源文件编译生成一堆.o,每个.o里都包含这个编译单元的符号表 Step 2.ar命令将很多.o转换成.a,成文静态库 动态库的后缀是.so,它由gcc加特定参数编译产生。 例如: $ gcc -fPIC -c *.c $ gcc -shared -Wl,-soname, libfoo.so.1 -o libfoo.so.1.0 *. 5.库文件是如何命名的,有没有什么规范 在linux下,库文件一般放在/usr/lib /lib下, 静态库的名字一般为libxxxx.a,其中xxxx是该lib的名称 动态库的名字一般为libxxxx.so.major.minor,xxxx是该lib的名称,major是主版本号,minor是副版本号 6.如何知道一个可执行程序依赖哪些库 ldd命令可以查看一个可执行程序依赖的共享库, 例如# ldd /bin/lnlibc.so.6 => /lib/libc.so.6 (0×40021000)/lib/ld-linux.so.2 => /lib/ld- linux.so.2 (0×40000000) 可以看到ln命令依赖于libc库和ld-linux库 Gdb调试段错误 1.段错误是什么

linux段错误

https://www.360docs.net/doc/d88717269.html,/panfeng412/archive/2011/11/06/2237857.html Linux环境下段错误的产生原因及调试方法小结 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是著名的“段错误”(Segmentation Fault)。借此机会系统学习了一下,这里对Linux 环境下的段错误做个小结,方便以后同类问题的排查与解决。 1. 段错误是什么 一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等等情况。这里贴一个对于“段错误”的准确定义(参考https://www.360docs.net/doc/d88717269.html,): A segmentation fault (often shortened to segfault) is a particular error condition that can occur during the operation of computer software. In short, a segmentation fault occurs when a program attempts to access a memory location that it is not allowed to access, or attempts to access a memory location in a way that is not allowed (e.g., attempts to write to a read-only location, or to overwrite part of the operating system). Systems based on processors like the Motorola 68000 tend to refer to these events as Address or Bus errors. Segmentation is one approach to memory management and protection in the operating system. It has been superseded by paging for most purposes, but much of the terminology of segmentation is still used, "segmentation fault" being an example. Some operating systems still have segmentation at some logical level although paging is used as the main memory management policy. On Unix-like operating systems, a process that accesses invalid memory receives the SIGSEGV signal. On Microsoft Windows, a process that accesses invalid memory receives the STATUS_ACCESS_VIOLATION exception. 2. 段错误产生的原因 2.1 访问不存在的内存地址 #include #include void main() { int *ptr = NULL; *ptr = 0; } 2.2 访问系统保护的内存地址 #include #include void main() { int *ptr = (int *)0;

相关主题
相关文档
最新文档