RKの日記: PPC Linux distribution (memo)
最近PPCを離れていたので調べてみると…
http://www.penguinppc.org/about/distributions.php
ちまたではx86-64で64bit Linux、とか言っているが、
G5でppc64でも64bit Linuxが使えるのね。ふむふむ。
RKの日記: CPUの数~。
いうことらしいのだが、–enable-vforkが動かないので
perthread.hなどを復活させるパッチを作ってみる…
が、やっぱりどうもおかしいので1.5.12でSMPを切る
おまじないをパッチして使ってみている。
それはともかく、CPUの数を知るためのプログラムをCYGWIN
本体からかっぱらってでっち上げてみた。そのうち役に立つかも
しれないしー。
–ここから–
#include <windows.h>
#include <ntdef.h>
#include <stdio.h>
typedef struct _SYSTEM_BASIC_INFORMATION
{
ULONG Unknown;
ULONG MaximumIncrement;
ULONG PhysicalPageSize;
ULONG NumberOfPhysicalPages;
ULONG LowestPhysicalPage;
ULONG HighestPhysicalPage;
ULONG AllocationGranularity;
ULONG LowestUserAddress;
ULONG HighestUserAddress;
ULONG ActiveProcessors;
UCHAR NumberProcessors;
} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
typedef enum _SYSTEM_INFORMATION_CLASS
{
SystemBasicInformation = 0,
SystemPerformanceInformation = 2,
SystemTimeOfDayInformation = 3,
SystemProcessesAndThreadsInformation = 5,
SystemProcessorTimes = 8,
SystemPagefileInformation = 18,
/* There are a lot more of these… */
} SYSTEM_INFORMATION_CLASS;
NTSTATUS NTAPI NtQuerySystemInformation (SYSTEM_INFORMATION_CLASS,
PVOID, ULONG, PULONG);
int main(void) {
NTSTATUS ret;
SYSTEM_BASIC_INFORMATION sbi;
NtQuerySystemInformation (SystemBasicInformation, (PVOID) &sbi,
sizeof sbi, NULL);
printf(“NumberProcessors: %d\n”,sbi.NumberProcessors);
printf(“ActiveProcessors: %d\n”,sbi.ActiveProcessors);
printf(“NumberOfPhysicalPages: %d\n”,sbi.NumberOfPhysicalPages);
}
–ここまで–
関係ないけど、このページを作るために
$ cygstart cputest.c
とやってTeraPadを起動しようとしたらVC++が起動してきて
ちょっと萎え。
RKの日記: 精度。
http://www001.upp.so-net.ne.jp/tklab/linux/sci1a.html
のページにあるGMPのサンプルをCygwinで実行したら結果が
違うんだけど、こんなもん?
$ ./a.exe
0.177245385090551602729742179868533526555121958408590419889
69395170523076808929009790025066808353478677117967425280285
21548977352029145633167773281144127669260136841610887832832
81185928880866074791268440541374354055413287728847723499996
75106251938188128772133872095219196026854635331591045035424
52562031149610298e11
0.314159265358979323845999999999999999999999999999999999999
9999999999999999999999e21
RKの日記: 今日のこぼれ話。
まだ駄目?
$ cat langinfo_test.c
#include <langinfo.h>
#include <stdio.h>
int main(void) {
printf(“%s\n”,nl_langinfo( CODESET));
return 0;
}
$ cc langinfo_test.c
$ ./a.exe
US-ASCII
US-ASCII以外を返してこさせる方法が分からん。
Linuxだと、UTF-8とかちゃんと返してくるのだけど…
もうちょっと試してみた。
$ cat langinfo_test2.c
#include <langinfo.h>
#include <stdio.h>
#include <locale.h>
int main(void) {
printf(“%s\n”,setlocale(LC_ALL, “C”));
printf(“%s\n”,nl_langinfo(0));
printf(“%s\n”,setlocale(LC_ALL, “POSIX”));
printf(“%s\n”,nl_langinfo(0));
printf(“%s\n”,setlocale(LC_ALL, “ja_JP.eucJP”));
printf(“%s\n”,nl_langinfo(0));
return 0;
}
$ cc langinfo_test2.c
$ ./a.exe
C
US-ASCII
(null)
US-ASCII
(null)
US-ASCII
…ないほうがましだ。こんなの:p
ちなみに、
$ cat langinfo_test3.c
#include <langinfo.h>
#include <stdio.h>
#include <X11/Xlocale.h>
#define X_LOCALE 1
int main(void) {
struct lconv * lc;
printf(“%s\n”,_Xsetlocale(LC_ALL, “C”));
printf(“%s\n”,nl_langinfo(0));
printf(“%s\n”,_Xsetlocale(LC_ALL, “POSIX”));
printf(“%s\n”,nl_langinfo(0));
printf(“%s\n”,_Xsetlocale(LC_ALL, “ja_JP.eucJP”));
printf(“%s\n”,nl_langinfo(0));
return 0;
}
$ cc langinfo_test3.c /usr/X11R6/bin/cygX11-6.dll
$ ./a.exe
C
US-ASCII
POSIX
US-ASCII
ja_JP.eucJP
US-ASCII
やっぱ、native locale機能はOFFにしちまったほうがよいのかしらん。