gpt4 book ai didi

从命令行执行时 CGI C 输出正确,但从 web 请求执行时不正确

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:59:45 30 4
gpt4 key购买 nike

代码:

#include <unistd.h>
#include <stdio.h>

typedef struct hddinfo
{
char szDevice[4];
char szMfg[64];
char szModel[64];
int nTemp;
} hddinfo;

int main( int argc, char *argv[] )
{

setuid( 0 );

hddinfo hdi[4] = {0};

FILE *fp = popen("/usr/sbin/hddtemp /dev/sd[abcd]","r");
if( NULL != fp )
{

for( int i = 0; i < 4; i++ )
fscanf( fp,"/dev/%3[^:]: %64s %64[^:]: %d°C\n",&hdi[i].szDevice, &hdi[i].szMfg, &hdi[i].szModel, &hdi[i].nTemp );

pclose( fp );

printf( "Content-type: text/html\n\n" );
printf( "<table id=\"hddtemp\">\n\t<tr>\n\t\t<th>Device</th>\n\t\t<th>Mfg</th>\n\t\t<th>Model</th>\n\t\t<th>Temp</th>\n\t</tr>\n" );
for( int i = 0; i < 4; i++ )
printf( "\t<tr>\n\t\t<td>%s</td>\n\t\t<td>%s</td>\n\t\t<td>%s</td>\n\t\t<td>%d&deg;C</td>\n\t</tr>\n", hdi[i].szDevice, hdi[i].szMfg, hdi[i].szModel, hdi[i].nTemp );
printf( "</table>" );

}
else
printf( "Status: 400 Bad Request\nContent-type: text/html\n\n" );

return 0;
}

www-data 用户身份从命令行运行时的输出:

<table id="hddtemp">
<tr>
<th>Device</th>
<th>Mfg</th>
<th>Model</th>
<th>Temp</th>
</tr>
<tr>
<td>sda</td>
<td>WDC</td>
<td>WD2500AAKX-001CA0</td>
<td>29&deg;C</td>
</tr>
<tr>
<td>sdb</td>
<td>WDC</td>
<td>WD20EURS-63S48Y0</td>
<td>30&deg;C</td>
</tr>
<tr>
<td>sdc</td>
<td>WDC</td>
<td>WD20EURS-63S48Y0</td>
<td>30&deg;C</td>
</tr>
<tr>
<td>sdd</td>
<td>WDC</td>
<td>WD20EURS-63S48Y0</td>
<td>30&deg;C</td>
</tr>
</table>

通过网络浏览器访问时的输出:

<table id="hddtemp">
<tr>
<th>Device</th>
<th>Mfg</th>
<th>Model</th>
<th>Temp</th>
</tr>

<tr>
<td>sda</td>
<td>WDC</td>
<td>WD2500AAKX-001CA0</td>
<td>29&deg;C</td>
</tr>

<tr>
<td></td>
<td></td>
<td></td>
<td>0&deg;C</td>
</tr>
<tr>
<td></td>

<td></td>
<td></td>
<td>0&deg;C</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>

<td>0&deg;C</td>
</tr>
</table>

最佳答案

看起来您的 fscanf 调用中有非 ASCII 格式(用于度数符号)。

这很可能是您的解析停止的地方,因为从 CGI 中执行时 LANG=C,而在命令行上执行时它被设置为其他内容。

关于从命令行执行时 CGI C 输出正确,但从 web 请求执行时不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8651862/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com