vern@2006-11-15:/var% ls tags

关于popen

今天才知道popen运行一个系统调用时,通过popen返回的文件句柄只能读到系统调用往stdout的输出内容。输出到stderr的内容是得不到的。有一个办法,就是在调用命令的尾部加上2>&1这样的内容,其含义为:将stderr(2)重定向到stdout(1)中。

例如iwconfig eth0这个命令,如果eth0不是无线网卡,运行此命令的后果是得到如下内容

eth0      no wireless extensions.
然而此内容是由iwconfig输出到stderr中的。所以如果用popen("iwconfig eth0", "r")这样的写法,是无法得到刚才那段内容的。

但如果改成这样调用popen("iwconfig eth0 2>&1", "r")的话,就可以通过popen返回的文件句柄读到刚才那段内容了。