当前位置:操作系统 > Unix/Linux >>

UNIX痛恨者手册:cpp预处理删文件机制

写一个程序, 例如a.c, 里边用了宏, 宏在别的目录下的头文件中定义, 用-I指定。

  调试时, 发现宏替换存在问题, 于是用cpp查看预处理输出, cpp也接受-I选项, 就象gcc一样。 于是, 故事开始了:

  1, cpp -I ……/headers/ a.c问题是, 我一下子忘了敲那个-I选项了!! 于是事实上的命令就是这样:cpp ……/headers/ a.c输出:cc1: error: headers/: 没有那个文件或目录

  2, 我马上意识到自己的错误操作, 更正为:cpp -I ……/headers/ a.c输出:[root@localhost ~]# cpp -I ……/headers/ a.c cpp: a.c:没有那个文件或目录cpp: 没有输入文件

  嗯? a.c也不见了? 不可能啊。 ls一下, 嘿, 还真的不见了! 百思不得其解, 用strace跟踪一下cpp ……/headers/ a.c,看看它都干了些什么:

  3, strace cpp ……/headers/ a.c最后几行的输出:

  QUOTE:vfork() = 4450 waitpid(4450, cc1: error: headers/: 没有那个文件或目录[{WIFEXITED(s) && WEXITSTATUS(s) == 1}], 0) = 4450―― SIGCHLD (Child exited) @ 0 (0) ――stat64("a.c", {st_mode=S_IFREG|0644, st_size=0, ……}) = 0 unlink("a.c") = 0 exit_group(1) = ? CODE:NAME cpp - The C Preprocessor

  SYNOPSIS cpp [-Dmacro[=defn]……] [-Umacro] [-Idir……] [-Wwarn……] [-M│-MM] [-MG] [-MF filename] [-MP] [-MQ target……] [-MT target……] [-P] [-fno-working-directory] [-x language] [-std=standard] infile outfile

  Only the most useful options are listed here; see below for the remain- der.如果你不输入 -I 的话,那么第一个参数 ……/headers/ 是输入文件,第二个参数 a.c 是输出文件。

  这样你的文件就会被删除。

  和 gcc -o ttt.c ttt 的原理一样,请看“UNIX 痛恨者手册”,类似的还有

  CODE:rm *.o因为 * 号需要按 shift 键,所以如果你的手指不太协调或者键盘不太灵光的话,按后面的小数点的时候,也许 shift 还没有松开,于是就变成了

  CODE:rm *>o恭喜你!

  UNIX 将删除你所有的文件,并且为你生成一个名为 o 的空文件。

  

上一个:菜鸟图形模式安装FedoraCore4.0教程
下一个:Unix下添加新硬盘方法

更多Unix/Linux疑问解答:
路由原理介绍
子网掩码快速算法
改变网络接口的速度和协商方式的工具miitool和ethtool
Loopback口的作用汇总
OSPF的童话
增强的ACL修改功能
三层交换机和路由器的比较
用三层交换机组建校园网
4到7层交换识别内容
SPARC中如何安装Linux系统(2)
SPARC中如何安装Linux系统(1)
用Swatch做Linux日志分析
实战多种Linux操作系统共存
浅析Linux系统帐户的管理和审计
Linux2.6对新型CPU的支持(2)
电脑通通透
玩转网络
IE/注册表
DOS/Win9x
Windows Xp
Windows 2000
Windows 2003
Windows Vista
Windows 2008
Windows7
Unix/Linux
苹果机Mac OS
windows8
安卓/Android
Windows10
如果你遇到操作系统难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,