已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统常用指令1Linux下常用指令22.1文件与目录操作22.2备份与压缩22.3文本处理32.4Shell指令42.5打印相关指令52.6其他基础指令62.7用户管理72.8进程管理72.9磁盘与文件系统管理82.10内核与性能92.11x-window系统92.12系统安全102.13编程相关指令102.14其他系统管理与维护指令102.15网络配置112.16网络测试与应用112.17高级网络指令122.18网络服务器指令122Windows下常用指令132.1msconfig启动项与系统服务132.2regedit注册表132.3cmd或command132.4dxdiag DirectX诊断工具142.5devmgmt.msc设备管理器142.6gpedit.msc组策略142.7chkdsk Windows磁盘自检程序142.8control控制面板142.9compmgmt.msc计算机管理142.10sysedit系统配置编译器152.11verifier驱动检测工具152.12cleanmgr磁盘碎片整理程序152.13taskmgr任务管理器152.14explorer资源管理器152.15diskmgmt.msc磁盘管理程序152.16services.msc服务管理器152.17regsvr32取消服务或DLL注册162.18sfc系统文件扫描162.19msinfo32系统信息162.20calc计算器162.21任务管理器162.22网络连接173GCC attribute机制171 Linux下常用指令2.1 文件与目录操作basename:从文件名中去掉路径和扩展名cd:切换当前工作目录到指定目录chgrp:改变文件所属组chmod:改变文件的权限chown:改变文件的所有者和组cp:复制文件或目录dd:复制文件并转换文件内容file:确定文件类型find:在指定目录下查找文件并执行指定的操作ln:创建文件链接locate/slocate:快速定位文件的路径ls/dir/vdir:显示目录内容mkdir:创建目录mv:移动或重命名文件pwd:显示当前工作目录rename:重命名文件rm:删除文件或目录rmdir:删除空目录touch:修改文件的时间属性updatedb:创建或更新slocate数据库whereis:显示指令程序、源代码和man手册页which:显示指令的绝对路径2.2 备份与压缩ar:创建、修改归档文件和从归档文件中提取文件arj:.arj文件压缩指令bunzip2:压缩bzip2格式的压缩文件bzcat:解压缩文件到标准输出bzip2:创建.bz2格式的压缩文件bzip2recover:修复损坏的.bz2文件bzless/bzmore:解压缩.bz2文件并分屏显示内容compress:压缩数据文件cpio:存取归档包中的文件dump:文件系统备份gunzip:解压缩由gzip压缩的文件gzexe:压缩可执行程序gzip:GNU的压缩和解压缩工具lha:压缩和解压缩指令resotre:还原由dump备份的文件或文件系统tar:创建备份档案文件unarj:解压缩.arj文件uncompress:解压缩.Z文件unzip:解压缩.zip文件zcat:解压缩文件并送到标准输出zforce:强制gzip格式的文件加上.gz扩展名zip:压缩文件zipinfo:显示zip压缩文件的详细信息znew:将“.Z”文件转换成“.gz”文件2.3 文本处理cat:链接文件并显示到标准输出cksum:检查和计算文件循环冗余校验码cmp:比较两个文件的差异col:过滤控制字符colrm:从输入中过滤掉指定的列comm:比较两个有序文件的不同csplit:分割文件cut:显示文件中每行的指定内容diff3:比较3个文件的不同diff:比较并显示两个文件的不同diffstat:根据diff指令的结果显示统计信息ed:行文本编辑器emacs:全屏文本编辑器ex:文本编辑器expand:将Tab转换为空白(Space)fmt:最优化文本格式fold:设置文件显示的行宽grep/egrep/fgrep:显示文件中匹配的行head:输出文件开头部分内容ispell:交互式拼写检查程序jed:文本编辑器joe:编辑文本文件join:合并两个文件的相同字段less:分屏查看文本文件look:显示文件中以特定字符串开头的行more:分屏查看文本文件od:以数字编码输出文件内容paste:合并文件的内容pico:文本编辑器sed:流文件编辑器sort:排序数据文件spell:拼写检查split:分割文件sum:计算并显示文件的校验码tac:反序显示文件内容tail:输出文件尾部部分内容tee:将输入内容复制到标准输出和指定文件tr:转换或删除文件中的字符unexpand:将空白(Space)转换为Tabuniq:删除文件中的重复行vi:全屏文本编辑器wc:计算文件的字节数、单词数和行数2.4 Shell指令alias:定义命令别名bg:将作业(或任务)放到后台运行bind:显示或设置键盘配置declare:声明shell变量dirs:显示shell目录堆栈中的记录echo:打印字符串到标准输出enable:激活与关闭shell内部命令eval:执行指定指令并返回结果exec:执行给定指令后退出登录exit:退出当前shellexport:设置与显示环境变量fc:编辑并执行历史命令fg:将后台任务(或作业)切换到前台运行hash:显示与清除指令时运行查询的哈希表history:显示与操纵历史命令jobs:显示shell的作业信息kill:杀死进程或作业logout:退出登录shellpopd:从shell目录堆栈中删除记录pushd:向shell目录堆栈中添加记录set:设置shell的执行方式shopt:设置控制shell行为变量的开关值ulimit:设置shell的资源限制umask:设置创建文件的权限掩码unalias:取消由alias定义的命令别名unset:删除定义的变量或函数2.5 打印相关指令accept:接受打印请求cancel:取消打印任务disable:停止打印机enable:启动打印机lp:打印文件lpadmin:配置cups打印机和类lpc:控制打印机lpq:显示当前打印队列lpr:打印文件lprm:删除当前打印队列中的作业lpstat:显示CUPS的状态信息pr:打印前转换文本格式reject:拒绝打印请求2.6 其他基础指令bc:实现精确计算的计算器cal:显示日历clear:清屏指令consoletype:显示当前使用的终端类型ctrlaltdel:设置热键CtrlAltDel的功能date:显示和设置系统日期时间dircolors:设置ls指令显示时的颜色eject:弹出可移动设备的介质halt:关闭计算机hostid:显示当前主机的数字标识hwclock:查询和设置系统硬件时钟info:读取帮助文档login:登录系统man:显示联机帮助手册md5sum:计算并显示文件的md5摘要信息mesg:设置终端写权限mtools:显示mtools软件包的指令mtoolstest:测试并显示mtools工具包的配置poweroff:关闭计算机并切断电源reboot:重新启动计算机shutdown:关闭计算机sleep:睡眠指定长的时间stat:显示文件或文件系统的状态talk:与其他用户交谈wall:向所有终端发送信息whatis:在数据库中查询关键字who:显示当前已登录用户的信息whoami:显示当前用户名write:向指定用户终端发送信息yes:不断输出指定字符串2.7 用户管理chfn:改变用户的finger信息chsh:改变用户登录时的默认shellfinger:用户信息查询程序gpasswd:管理组文件/etc/groupgroupadd:创建组groupdel:删除组groupmod:修改组信息groups:显示用户所属的组grpck:验证组文件/etc/group的完整性grpconv:启用组的影子口令文件grpunconv:关闭组的影子口令文件logname:显示登录用户名passwd:设置用户密码pwck:验证用户文件密码文件的完整性pwconv:启用用户的影子口令文件pwunconv:关闭用户的影子口令文件su:切换用户useradd:创建用户userdel:删除用户usermod:修改用户的配置信息users:显示当前登录系统的用户名2.8 进程管理init:进程初始化控制killall:根据名称结束进程nice:设置进程优先级nohup:以忽略挂起信号方式运行程序pgrep:基于名字查询并显示进程号pidof:查找正在运行程序的进程号pkill:向指定的进程发送信号ps:显示系统当前的进程状态pstree:用树形图显示进程的父子关系renice:调整进程优先级w:显示当前登录用户的相关信息watch:全屏方式显示指定命令的输出信息2.9 磁盘与文件系统管理badblocks:磁盘坏块检查工具blockdev:从命令行调用块设备的ioctl函数chattr:改变文件的第2扩展文件系统属性convertquota:转换quota文件格式df:报告磁盘剩余空间情况dumpe2fs:显示ext2/ext3文件系统信息e2fsck:检查ext2/ext3文件系统e2image:保存ext2/ext3源数据到文件e2label:设置ext2/ext3文件系统标签edquota:编辑用户的磁盘空间配额fdisk:Linux下的分区工具findfs:查找文件系统fsck:检查与修复Linux文件系统grub:Linux下的引导加载器hdparm:调整硬盘I/O性能lilo:Linux加载器lsattr:显示文件的ext2文件系统属性mkbootdisk:为当前系统创建专门的引导软盘mke2fs:创建第2扩展文件系统mkfs:创建各种文件系统mkinitrd:创建初始化ram磁盘映像文件mkisofs:创建光盘映像文件mknod:创建块设备或字符设备文件mkswap:创建交换分区文件系统mktemp:创建临时文件mount:加载文件系统parted:磁盘分区管理工具quota:显示用户磁盘配额quotacheck:创建、检查和修复配额文件quotaoff:关闭文件系统的磁盘配额功能quotaon:打开文件系统的磁盘配额功能quotastat:显示磁盘配额状态repquota:显示文件系统磁盘配额信息报表swapoff:关闭交换空间swapon:激活交换空间sync:强制将缓存数据写入磁盘tune2fs:调整ext2/ext3文件系统的参数umount:卸载已经加载的文件系统2.10 内核与性能depmod:处理内核可加载模块的依赖关系dmesg:显示内核的输出信息free:显示内存使用情况insmod:加载模块到内核iostat:报告CPU、I/O设备及分区状态ipcs:显示进程间通信的状态信息kernelversion:显示内核主版本号lsmod:显示已加载的模块modinfo:显示内核模块信息modprobe:加载内核模块并解决依赖关系mpstat:显示进程相关状态信息rmmod:从内核中删除模块sar:收集、显示和保存系统活动信息slabtop:实时显示内核的slab缓存信息sysctl:运行时修改内核参数tload:监视系统平均负载情况top:显示和管理系统进程uname:显示系统信息uptime:显示系统运行时间及平均负载vmstat:显示虚拟内存的状态2.11 x-window系统startx:初始化X-Window会话xauth:X系统授权许可文件管理工具xhost:显示和配置X服务器的访问权限xinit:X-Window系统初始化程序xlsatoms:显示X服务器原子数据定义xlsclients:显示指定显示器上运行的X程序xlsfonts:显示X服务器使用的字体信息xset:设置X系统的用户偏爱属性2.12 系统安全chroot:以指定根目录运行指令nmap:网络探测工具和安全扫描器scp:加密的远程复制工具sftp:安全文件传输工具slogin:加密的远程登录工具ssh:加密的远程登录工具sudo:以另一个用户身份执行指令2.13 编程相关指令awk/gawk:模式扫描与处理语言expr:计算表达式的值gcc:GNU的C语言编译器gdb:GNU调试器ldd:显示共享库依赖make:工程编译工具nm:显示目标文件的符号表perl:perl语言的命令行工具php:PHP脚本语言命令行接口test:条件测试2.14 其他系统管理与维护指令arch:显示当前主机的硬件架构at:按照时间安排任务的执行atq:查询待执行的任务atrm:删除待执行的任务batch:在指定时间运行任务chkconfig:设置系统在不同运行等级下所执行的服务crontab:按照时间设置计划任务last:显示以前登录过系统的用户相关信息lastb:显示登录系统失败的用户相关信息logrotate:系统日志的轮循工具logsave:将命令的输出信息保存到日志文件logwatch:报告和分析系统日志lsusb:显示所有的USB设备patch:补丁与更新文件rpm:Red Hat软件包管理器runlevel:显示当前系统的运行等级service:Linux服务管理和控制工具telinit:切换当前系统的运行等级yum:RPM软件包自动化管理工具2.15 网络配置dnsdomainname:显示系统的DNS域名domainname:显示和设置主机域名hostname:显示或者设置系统主机名ifcfg:配置网络接口ifconfig:配置网络接口的网络参数ifdown:关闭指定网络接口ifup:启动指定网络接口nisdomainname:显示和设置主机域名route:显示与操纵本机的IP路由表ypdomainname:显示和设置主机域名2.16 网络测试与应用arp:管理本机arp缓冲区arping:向相邻主机发送ARP请求报文arpwatch:监听网络上的ARP信息dig:域名查询工具elinks:纯文本网页浏览器elm:电子邮件客户端程序ftp:文件传输协议客户端host:DNS域名查询工具ipcalc:IP地址计算器lynx:纯文本网页浏览器mail:电子邮件管理程序ncftp:增强的FTP客户端工具netstat:显示网络状态nslookup:DNS域名查询工具pine:电子邮件和新闻组处理程序ping:测试到达目标主机的网络是否通畅rsh:远程shelltelnet:远程登录工具tftp:简单文件传输协议客户端tracepath:追踪数据经过的路由traceroute:追踪数据包到达目的主机经过的路由wget:从指定URL地址下载文件2.17 高级网络指令arptables:管理内核的ARP规则表ip:强大的多功能网络配置工具iptables:IP包过滤与NAT管理工具iptables-save:保存内核中iptables的配置iptables-restore:还原iptables的配置信息tcpdump:监听网络流量2.18 网络服务器指令ab:Web服务器性能测试apachectl:Apache HTTP服务器控制接口exportfs:管理NFS服务器共享的文件系统htdigest:管理用于摘要认证的用户文件htpasswd:管理用于基本认证的用户文件httpd:Apache超文本传输协议服务器mailq:显示待发送的邮件队列mysql:MySQL服务器的客户端工具mysqladmin:MySQL服务器管理工具msqldump:MySQL服务器备份工具mysqlimport:MySQL数据库导入工具mysqlshow:显示MySQL数据库、表和字段信息nfsstat:显示网络文件系统状态sendmail:电子邮件传送代理程序showmount:显示NFS服务器上的加载信息smbclient:samba服务器客户端工具smbmount:加载samba文件系统smbpasswd:改变samba用户的密码squid:HTTP代理服务器程序sshd:OpenSSH守护进程2 Windows下常用指令开始-运行 winkey+R 解析:运行中能运行的指令都是在system32目录下的exe、msc和com等文件里2.1 msconfig启动项与系统服务最常用的一个程序,“启动”与“服务”项是最多调节的。“启动”项目等同于注册表Run分支。常用于屏蔽一些不愿意其随开机自启动的程序。服务也一样。2.2 regedit注册表从略2.3 cmd或commandmsdos命令窗口,不同的是,前者是模拟指令界面,后者才是真正的msdos命令窗口下指令:a.ipconfig /all显示当前所有网络连接的信息,包括MAC、IP、DNS、掩码、网关stat -a -o (显示所有正在连接的主机ip及端口号并显示所属进程id)c.telnet和ftp 系统自带远程登陆与文件传输程序telnet与ftp得到比较大发展,这两方面的经典工具分别是zmud和 send 主机IP或域名/用户名 发送的消息e.set环境变量设置指令格式为:set xxx=xxx比如set SystemRoot=C:windows,注意环境变量的大小写。主要用来局域网或计算机间发送消息f.fc比较两个文件的不同G.mem |more查看msdos内存使用情况,如果你想玩老dos游戏可能这个指令有帮助,不过这里推荐用dosbox来解决xp下运行老dos程序的兼容性问题。基本上是完美解决。h.attrib 文件属性修改指令有4个属性,只读、系统、隐藏和存档。分别对应r/s/h/a,属性前“+”表示赋予,“-”表示取消。格式是attrib 文件名 参数。比如 attrib +s +h -r i.convert FAT32转NTFS格式指令具体指令例子 convert D:/FS:NTFS,其中“D:”为可替换磁盘符号j.ping检测连接程序,一般用于检测网络连接情况,通过域名获得ip。ping 主机/ip -n 次数 -l 数据包大小。比如 ping -n 20 -l 300表示向中关村在线发送20次大小为300字节的数据。k.dir、cd、copy、rename、del、format等基本指令从略2.4 dxdiag DirectX诊断工具2.5 devmgmt.msc设备管理器2.6 gpedit.msc组策略2.7 chkdsk Windows磁盘自检程序2.8 control控制面板2.9 compmgmt.msc计算机管理等于右击“我的电脑”-“管理”2.10 sysedit系统配置编译器同时打开autoexec.bat、config.sys、win.ini、system.ini4个文件2.11 verifier驱动检测工具用于检测当前驱动的潜在隐患,少数莫名其妙的重启由于驱动冲突造成。同时可以查阅所有的驱动文件列表。2.12 cleanmgr磁盘碎片整理程序磁盘碎片整理程序,推荐3个月左右整理一次。2.13 taskmgr任务管理器等于ctrl+alt+del)任务管理器2.14 explorer资源管理器等于winkey+e)资源管理器2.15 diskmgmt.msc磁盘管理程序可修改盘符,扫描磁盘错误2.16 services.msc服务管理器这里可以对具体服务进行详细的设置,注意这里的依存关系可以提供认识服务作用。至于如何把程序注册为服务,请使用微软的WindowsRKT工具包中的instsrv.exe。该工具包有兴趣的朋友可以至微软主页下载。2.17 regsvr32取消服务或DLL注册比如regsvr32 /u zipfldr.dll,取消压缩文件夹2.18 sfc系统文件扫描系统文件破坏或有潜在问题时,可以用这个指令来检查并修复(需安装盘),以免重新安装的麻烦。具体指令 sfc /scannow 现在即扫描所有受保护的系统文件。2.19 msinfo32系统信息2.20 calc计算器呵呵,偶尔用到,计算器。2.21 任务管理器任务管理器 用来检测系统状况与结束未相应的非法程序。1.观察篇按Ctrl+alt+del打开任务管理器,点“进程”这里可以看到系统当前正在运行的所有进程,除了注册为服务的程序以外。请注意cpu占用率的情况,如果CPU占用率过高则系统不稳定,最后一项是CPU空闲。另外就是可疑进程。点“性能”这里特别注意“物理内存”下的“可用数”,基本上决定你的系统是否顺畅。一般200M左右的可用物理内存就说明你的内存应付当前系统绰绰有余。这里还能动态的观察CPU占用率与内存,页面文件使用的情况。2.使用篇其实任务管理器与explorer(或者桌面)一样都是独立的操作界面。当你结束进程里的explorer.exe时,就会发现桌面消失,但任务管理器仍正常运行。好像感觉一下子无法入手,其实用这个任务管理器,你完成可以完成很多功能。不过比较麻烦点,但是在你explorer.exe感染病毒时排除问题时特别有效。(现在很多病毒都采用捆绑explorer.exe,如果仍用桌面界面则非常麻烦)点“文件(F)”-“创建新任务”请注意,这个“创建新任务”的窗口,完全等同于“开始”-“运行”,也就是上述所讲的所有指令都可以在这里运行,当然也可以上网。同时,点旁边的那个“浏览(B)”,可以使你方便的访问磁盘中的文件及运行。在“关机(U)”选项里,“注销”可以让你切换用户并自动进入桌面,其他项一目了然。PS:一般我检测系统是否有毛病或者是否中毒,首先会用任务管理器。可以说,任务管理器是个非常好用的管理工具。大家在具体排除故障时多用就会发现其功能。=2.22 网络连接右击“网上邻居”-“属性”(或点选“网上邻居”按ALT+enter快捷键进入)1.TCP/IP属性中设置ip/网关/子网掩码/DNS/筛选右击“本地连接”-“属性”,点TCP/IP协议,点“属性”IP,192.168.x.x/网关,这个大概都知道设了,如果你是ADSL的话,不用设置DNS,如果有需要可以在msdos中用ipconfig /all来查询本地的DNS。这里说说TCP/IP属性中“高级(V)”-“选项”的TCP/IP筛选。点“属性”进入。可以看到这里面可以自定义开放的端口,这对于你自定电脑的安全非常重要。2.本地连接属性中对网卡的配置详解。在本地连接属性中点右上角“配置”按钮,点“高级”在第2项“Link speed/Duplex Mode”可以选择网卡采用10M/100M/1000M半双工还是全双工工作。“Network Address”可以设置ADSL也就是上网时的MAC地址。“Optimal Performance”是否启用网卡的最优化设置,建议名牌网卡且质量好的朋友选上。下面几项默认即可,“wakeup.”是网络唤醒功能的设置。在“资源”项可以查看冲突与否和资源使用情况如中断号。3.ADSL拨号A.双击“网络连接”中的“新建连接向导”(等同于开始-程序-附件-通信-新建连接向导)点“下一步”-“连接到Internet(C)”-“手动设置我的连接”-“用要求用户名和密码的宽带连接”-ISP名称随意-输入电信部门提供给你的用户名与密码-点“完成”后即可建立。这时在网络连接里本地连接下有个“拨号”下面有个ADSL连接。右击-属性。“选项”-可以对连接提示与重拨进行设置。“高级”-连接共享里如果你一条线想多人上网,请打开“允许其他用户通过XXX”项目。B.多机共享一条宽带的简易方案,特点时对等互不影响,无主机:1.一个集线器、一个ADSL猫(电信部分送的即可)、若干条网线。把ADSL猫与集线器的uplink口用网线相连。其他机子通过网线接到集线器的其他口即可。2.在各自的机子上设置TCP/IP地址,同局域网设置。比如IP/掩码/网关分别设192.168.1.x//。不设也不影响,不过局域网无法通信而已。3.按上述“A”中新建连接向导的方法建立ADSL拨号,分别在每台建立,设置可以完全一样!3 GCC attribute机制GNU C的一大特色(却不被初学者所知)就是_attribute_机制。_attribute_可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。_attribute_书写特征是:_attribute_前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的_attribute_参数。_attribute_语法格式为:_attribute_ (attribute-list)其位置约束为:放于声明的尾部“;”之前。函数属性(Function Attribute)函数属性可以帮助开发者把一些特性添加到函数声明中,从而可以使编译器在错误检查方面的功能更强大。_attribute_机制也很容易同非GNU应用程序做到兼容之功效。GNU CC需要使用 Wall编译器来击活该功能,这是控制警告信息的一个很好的方式。下面介绍几个常见的属性参数。_attribute_ format该_attribute_属性可以给被声明的函数加上类似printf或者scanf的特征,它可以使编译器检查函数声明和函数实际调用参数之间的格式化字符串是否匹配。该功能十分有用,尤其是处理一些很难发现的bug。format的语法格式为:format (archetype, string-index, first-to-check) format属性告诉编译器,按照printf, scanf, strftime或strfmon的参数表格式规则对该函数的参数进行检查。“archetype”指定是哪种风格;“string-index”指定传入函数的第几个参数是格式化字符串;“first-to-check”指定从函数的第几个参数开始按上述规则进行检查。具体使用格式如下:_attribute_(format(printf,m,n)_attribute_(format(scanf,m,n)其中参数m与n的含义为:m:第几个参数为格式化字符串(format string);n:参数集合中的第一个,即参数“”里的第一个参数在函数参数总数排在第几,注意,有时函数参数里还有“隐身”的呢,后面会提到;在使用上,_attribute_(format(printf,m,n)是常用的,而另一种却很少见到。下面举例说明,其中myprint为自己定义的一个带有可变参数的函数,其功能类似于printf:/m=1;n=2extern void myprint(const char *format,.) _attribute_(format(printf,1,2);/m=2;n=3extern void myprint(int l,const char *format,.) _attribute_(format(printf,2,3);需要特别注意的是,如果myprint是一个函数的成员函数,那么m和n的值可有点“悬乎”了,例如:/m=3;n=4extern void myprint(int l,const char *format,.) _attribute_(format(printf,3,4);其原因是,类成员函数的第一个参数实际上一个“隐身”的“this”指针。(有点C+基础的都知道点this指针,不知道你在这里还知道吗?)这里给出测试用例:attribute.c,代码如下:1:2:extern void myprint(const char *format,.) _attribute_(format(printf,1,2);3:4:void test()5:6: myprint(i=%dn,6);7: myprint(i=%sn,6);8: myprint(i=%sn,abc);9: myprint(%s,%d,%dn,1,2);10: 运行$gcc Wall c attribute.c attribute后,输出结果为: attribute.c: In function test:attribute.c:7: warning: format argument is not a pointer (arg 2)attribute.c:9: warning: format argument is not a pointer (arg 2)attribute.c:9: warning: too few arguments for format 如果在attribute.c中的函数声明去掉_attribute_(format(printf,1,2),再重新编译,既运行$gcc Wall c attribute.c attribute后,则并不会输出任何警告信息。注意,默认情况下,编译器是能识别类似printf的“标准”库函数。_attribute_ noreturn该属性通知编译器函数从不返回值,当遇到类似函数需要返回值而却不可能运行到返回值处就已经退出来的情况,该属性可以避免出现错误信息。C库函数中的abort()和exit()的声明格式就采用了这种格式,如下所示: extern void exit(int) _attribute_(noreturn);extern void abort(void) _attribute_(noreturn); 为了方便理解,大家可以参考如下的例子: /name: noreturn.c ;测试_attribute_(noreturn)extern void myexit(); int test(int n) if ( n 0 ) myexit(); /* 程序不可能到达这里*/ else return 0; 编译显示的输出信息为: $gcc Wall c oreturn.c: In function test:noreturn.c:12: warning: control reaches end of non-void function 警告信息也很好理解,因为你定义了一个有返回值的函数test却有可能没有返回值,程序当然不知道怎么办了!加上_attribute_(noreturn)则可以很好的处理类似这种问题。把extern void myexit();修改为:extern void myexit() _attribute_(noreturn);之后,编译不会再出现警告信息。_attribute_ const该属性只能用于带有数值类型参数的函数上。当重复调用带有数值参数的函数时,由于返回值是相同的,所以此时编译器可以进行优化处理,除第一次需要运算外,其它只需要返回第一次的结果就可以了,进而可以提高效率。该属性主要适用于没有静态状态(static state)和副作用的一些函数,并且返回值仅仅依赖输入的参数。为了说明问题,下面举个非常“糟糕”的例子,该例子将重复调用一个带有相同参数值的函数,具体如下: extern int square(int n) _attribute_(const);. for (i = 0; i 100; i+ ) total += square(5) + i; 通过添加_attribute_(const)声明,编译器只调用了函数一次,以后只是直接得到了相同的一个返回值。事实上,const参数不能用在带有指针类型参数的函数中,因为该属性不但影响函数的参数值,同样也影响到了参数指向的数据,它可能会对代码本身产生严重甚至是不可恢复的严重后果。并且,带有该属性的函数不能有任何副作用或者是静态的状态,所以,类似getchar()或time()的函数是不适合使用该属性的。-finstrument-functions该参数可以使程序在编译时,在函数的入口和出口处生成instrumentation调用。恰好在函数入口之后并恰好在函数出口之前,将使用当前函数的地址和调用地址来调用下面的 profiling 函数。(在一些平台上,_builtin_return_address不能在超过当前函数范围之外正常工作,所以调用地址信息可能对profiling函数是无效的。) void _cyg_profile_func_enter(void *this_fn, void *call_site);void _cyg_profile_func_exit(void *this_fn, void *call_site); 其中,第一个参数this_fn是当前函数的起始地址,可在符号表中找到;第二个参数call_site是指调用处地址。instrumentation 也可用于在其它函数中展开的内联函数。从概念上来说,profiling调用将指出在哪里进入和退出内联函数。这就意味着这种函数必须具有可寻址形式。如果函数包含内联,而所有使用到该函数的程序都要把该内联展开,这会额外地增加代码长度。如果要在C 代码中使用extern inline声明,必须提供这种函数的可寻址形式。可对函数指定no_instrument_function属性,在这种情况下不会进行instrumentation操作。例如,可以在以下情况下使用no_instrument_function属性:上面列出的profiling函数、高优先级的中断例程以及任何不能保证profiling正常调用的函数。no_instrument_function如果使用了-finstrument-functions ,将在绝大多数用户编译的函数的入口和出口点调用profiling函数。使用该属性,将不进行instrument操作。constructor/destructor若函数被设定为constructor属性,则该函数会在main()函数执行之前被自动的执行。类似的,若函数被设定为destructor属性,则该函数会在main()函数执行之后或者exit()被调用后被自动的执行。拥有此类属性的函数经常隐式的用在程序的初始化数据方面。这两个属性还没有在面向对象C中实现。同时使用多个属性可以在同一个函数声明里使用多个_attribute_,并且实际应用中这种情况是十分常见的。使用方式上,你可以选择两个单独的_attribute_,或者把它们写在一起,可以参考下面的例子: /* 把类似printf的消息传递给stderr 并退出 */extern void die(const char *format, .) _attribute_(noreturn) _attribute_(format(printf, 1, 2); 或者写成 extern void die(const char *format, .) _attribute_(noreturn, format(printf, 1, 2); 如果带有该属性的自定义函数追加到库的头文件里,那么所以调用该函数的程序都要做相应的检查。 和非GNU编译器的兼容性庆幸的是,_attribute_设计的非常巧妙,很容易作到和其它编译器保持兼容,也就是说,如果工作在其它的非GNU编译器上,可以很容易的忽略该属性。即使_attribute_使用了多个参数,也可以很容易的使用一对圆括弧进行处理,例如: /* 如果使用的是非GNU C, 那么就忽略_attribute_ */#ifndef _GNUC_# define _attribute_(x) /*NOTHING*/#endif 需要说明的是,_attribute_适用于函数的声明而不是函数的定义。所以,当需要使用该属性的函数时,必须在同一个文件里进行声明,例如: /* 函数声明 */void die(const char *format, .) _attribute_(noreturn) _attribute_(format(printf,1,2); void die(const char *format, .) /* 函数定义 */ 更多的属性含义参考:/onlinedocs/gcc-4.0.0/gcc/Function-Attributes.html 变量属性(Variable Attributes)关键字_attribute_也可以对变量(variable)或结构体成员(structure field)进行属性设置。这里给出几个常用的参数的解释,更多的参数可参考本文给出的连接。在使用_attribute_参数时,你也可以在参数的前后都加上“_”(两个下划线),例如,使用_aligned_而不是aligned,这样,你就可以在相应的头文件里使用它而不用关心头文件里是否有重名的宏定义。aligned (alignment)该属性规定变量或结构体成员的最小的对齐格式,以字节为单位。例如: int x _attribute_ (aligned (16) = 0; 编译器将以16字节(注意是字节byte不是位bit)对齐的方式分配一个变量。也可以对结构体成员变量设置该属性,例如,创建一个双字对齐的int对,可以这么写: struct foo int x2 _attribute_ (aligned (8); ; 如上所述,你可以手动指定对齐的格式,同样,你也可以使用默认的对齐方式。如果aligned后面不紧跟一个指定的数字值,那么编译器将依据你的目标机器情况使用最大最有益的对齐方式。例如: short array3 _attribute_ (aligned); 选择针对目标机器最大的对齐方式,可以提高拷贝操作的效率。aligned属性使被设置的对象占用更多的空间,相反的,使用packed可以减小对象占用的空间。需要注意的是,attribute属性的效力与你的连接器也有关,如果你的连接器最大只支持16字节对齐,那么
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年连云港辅警招聘考试题库含答案详解(典型题)
- 2025年西安辅警协警招聘考试备考题库含答案详解(典型题)
- 2025年省直辖行政单位辅警协警招聘考试真题含答案详解(满分必刷)
- 2025综合施工合同模板
- 2025年甘孜藏族自治州辅警招聘考试真题及一套完整答案详解
- 2025年濮阳辅警协警招聘考试备考题库及答案详解(夺冠系列)
- 2025年黄石辅警招聘考试真题带答案详解(完整版)
- 2025年银川辅警招聘考试真题及答案详解(必刷)
- 2025年淮北辅警招聘考试题库附答案详解(培优a卷)
- 2025年黄山辅警招聘考试真题及答案详解1套
- 学堂在线 人工智能原理 章节测试答案
- 《失智老年人照护》课件-项目四:失智老年人康复照护
- 中国法律史-第三次平时作业-国开-参考资料
- 大学生城市地下空间工程职业生涯规划
- 2024职业性放射性疾病诊断程序和要求
- 西宁物业行业现状分析
- 胆总管结石护理教学查房
- 人工智能换脸技术的应用与伦理问题探讨培训精
- 初三英语阅读理解专项训练100(附答案)
- 犬咬伤急救常识
- 铝合金门窗计算书
评论
0/150
提交评论