open()使用错误:
源码 fd = open("/extdir/run_mode", "r");
其中,"r" 不是open的参数 ,正确参数应为O_RDONLY。
详解:
1、open()是系统函数,它的参数应为O_RDONLY,"r" 是库函数fopen()的参数
2、"r" 按照整型解释的时候是一个随机数(实际上是字符串"r"的地址)
3、open()有一个操作标志O_TRUNC(0x0200),若文件存在且以可写的方式打开时,此标志会将文件长度清为0,文件的内容也就会消失了。
open()的操作标志实际上就是一个又一个的bit位,(1)中的随机数完全有可能将O_TRUNC和可写标志同时打开,从而清空run_mode的文件内容。