[Armadillo:00315] Re: Armadillo-J での getenv 関数
nakai
email@hidden
2005年 5月 26日 (木) 16:53:18 JST
中井です。
回答遅くなりました。
AJでsetenv、getenvは問題なく動きます。
以下にサンプル書きます。
また、thttpdを使用してcgiによりgetenv、setenvを実行するには問題がありました。
cgiでgetenvを実行したところ、必ずnullとなります。
(setenvしてからgetenvでは問題なく変数を取得できます。)
thttpdのソースを見た限りでは、
cgiを実行するとき fork して execve を行なっています。
おそらく execve でうまく環境変数を渡せていないことが原因ではないかと。
cgiでIPアドレスの取得の方法は色々やり方はあると思うのですが、
以下にサンプル書きます。
IPアドレスの設定にも色々あると思います。
例えばsystem関数で以下のようにするとか。
system("fconfig eth0 192.168.0.1");
//////////////////////////////////////////////////////////////
setenv getenv
//////////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
int main(void){
setenv("AJ_TEST","armadillo-j",0);
printf("ENV[%s] : %s\n","AJ_TEST",getenv("AJ_TEST"));
return 0;
}
//////////////////////////////////////////////////////////////
get ip address
//////////////////////////////////////////////////////////////
#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<sys/ioctl.h>
#include<net/if.h>
#include<netdb.h>
#include<arpa/inet.h>
#define DEVICE_NAME "eth0"
int main(void){
int Socket_FD=0;
struct sockaddr_in* SocketInfo;
struct ifreq Request;
struct in_addr Addr;
char *IPAddress;
memset(&Request,0,sizeof(Request));
memset(&Addr,0,sizeof(Addr));
Socket_FD=socket(AF_INET,SOCK_DGRAM,0);
strcpy(Request.ifr_name,DEVICE_NAME);
if(ioctl(Socket_FD,SIOCGIFADDR,&Request)<0){
perror("ioctl");
return -1;
}
SocketInfo=(struct sockaddr_in*)&Request.ifr_addr;
Addr.s_addr=SocketInfo->sin_addr.s_addr;
IPAddress=inet_ntoa(Addr);
printf("%s\n",IPAddress);
return 0;
}
armadillo メーリングリストの案内