Linuxプログラミング ..
[2ch|▼Menu]
414:login:Penguin
07/12/09 19:30:32 kFipn9r2
Linuxで組込み機器の開発をしています。CPUはMIPS及びx86で、カーネルは2.6、swap領域は用意していません。
RAMは128MBです。下記状況で悩んでいます。

あるプロセスが大きめ(数十MB)のファイルを、読み込み専用(PROT_READのみ)でmmapし、その後そのファイル
を一通り読み込み、理由は不明なのですが、その後munmapせずに長期間mmapしたままにしています。

この状態でもし物理メモリ(free page)が足りなくなってきたら、ファイルのreadonly mmapに使用されていた
物理メモリは他の用途に使うために回収されるでしょうか?

カーネルの当該処理を行なう関数名だけでもかまいませんので、おしえてください。

415:login:Penguin
07/12/09 20:31:30 7Og5UxvH
>>414
Linuxの仕組みにこだわらず常識の範囲で答えるなら
swapがもし設定されておらず、メモリの確保を行ったプロセスが生きており、かつ新しいプログラムがメモリを要求し
メモリが足りないばあいは、そのようなエラーが出て後のプログラムが終了する。

確保エラーてきなそれで。


416:414
07/12/09 20:49:28 kFipn9r2
>>415 申し訳ありませんがLinuxの事情が知りたいです。

URLリンク(tree.celinuxforum.org)
こちらの資料のp.22「ページアウト」によると、
>(2)で物理メモリの空きがなかった場合、使用頻度の低いと思われるページを解放する。そのページの内容が変更されていなければそのまま破棄。
>変更されていればスワップデバイスに掃きだす。
とのことでした。

今回の場合、swapは存在しませんがページの内容もまた変更されていないので、
>この状態でもし物理メモリ(free page)が足りなくなってきたら、ファイルのreadonly mmapに使用されていた
>物理メモリは他の用途に使うために回収されるでしょうか?
この答えはyesになるかと思うのですがどうでしょうか。

ページアウトを行なっている関数を特定して調べてみますが、識者の方がいらっしゃいましたら教えてください。

417:login:Penguin
07/12/09 20:51:41 vfNigUJQ
DirtyにならなきゃSWAPは関係ないんじゃないか?
PRIVATEマップだったら予約はされるのかねえ?
試せ。

418:417
07/12/09 20:53:20 vfNigUJQ
>>416
読む前に書きました。Linuxの識者ではありません。

419:login:Penguin
07/12/09 21:56:02 7Og5UxvH
こ、これが本当なら、使用頻度の低いプロセスの確保しているページが勝手に破棄されるってこと?

なにやら「書き換えられているなら」の和訳に難ありと見た。


420:login:Penguin
07/12/09 21:59:02 kFipn9r2
>419
破棄されても、必要になり次第またディスクから読めばいいから、問題なくね?
ディスク上のファイルが書き換えられていたらちょっと困るかも試練が。。。


421:login:Penguin
07/12/09 22:13:07 7Og5UxvH
>>420
ディスク上にあるデータばかりとは限らなくね?
そのへんをどうしているのか...



422:login:Penguin
07/12/09 22:20:43 18jA1TtH
ファイルだったら、どこにあろうと開いてるからカーネルの管理下じゃね

423:login:Penguin
07/12/09 22:49:39 7Og5UxvH
なるほど、カーネルが管理しているページから破棄していくのか。
でもそうだとすると、この議題である「事前に確保されたページ」がカーネルの管理とは言い難いと思うのだが。


424:login:Penguin
07/12/09 23:08:38 18jA1TtH
>>423は何言ってるのか分からんから放っておいて、
>>416は資料に書いてある通りだと思うんだけどね。mmap()のシステムコール先が
どんなマークつけてメモリ確保するか、もうカーネルのソース見たほうが早くね?

425:login:Penguin
07/12/09 23:15:12 kFipn9r2
>>424
了解。そうします。

426:login:Penguin
07/12/13 21:59:11 q3gVVh+0
ローカルの時間を設定する
関数ってなんて名前なの?

427:login:Penguin
07/12/13 23:42:09 gQtBTxyv
settimeofday(2)

428:login:Penguin
07/12/13 23:57:28 GAau1spk
>ローカルの時間を設定する
>関数ってなんて名前なの?

いきなり時刻を変更していいなら、settimeofday(2)か、stime(2)。後者は秒単位でしか設定できない。

徐々に時計をあわせたいなら、adjtime(3)かadjtimex(2)。たぶん。よく知らなかったのでntpdateコマ
ンドをstraceして調べた範囲だが。

あと、ハードウェアが覚えている時刻を更新したいんだったら、/sbin/clock -w するか、/dev/rtcを
open(2)してioctl(RTC_SET_TIME)も必要。これもclockコマンドをstraceしただけだけど。



429:login:Penguin
07/12/14 00:06:11 q3gVVh+0
皆さんどうもです。

もう1つ聞きたいのですが
libe1000に近い機能って
最近のカーネルにないでしょうかね?

tigon3で使えないので泣き入ってますw

430:login:Penguin
07/12/14 09:58:59 kNHZHPst
もしかしてこっちのことだったりして

# cp /usr/share/zoneinfo/場所 /etc/localtime

あるいは環境変数 TZ

431:login:Penguin
07/12/15 02:47:51 W22BenPt
それを言うならasia/Sapporoを作ってDSTを有効にする方法じゃね?

432:login:Penguin
07/12/15 18:22:56 Rwz9MLlG
カーネルモジュールのメモリリークチェックどうやってる?
slab使ってれば、destroy()でチェックになるようだが、
ページ単位だと手がないよね

433:login:Penguin
07/12/15 23:53:57 Sm85/PPc
>>432
カーネルは信じる

434:login:Penguin
07/12/17 01:19:38 xnChskak
自分でカーネルモジュール書く場合とか。

435:login:Penguin
07/12/17 22:53:20 YaVSPejA
自分を信じる

436:login:Penguin
07/12/17 23:48:58 QaEFKCXk
/proc/meminfoをreadすると
遅くていらいらするので

実態を直接参照したいのですが
何を呼び出せば得られますか?

437:login:Penguin
07/12/18 00:47:54 wJyWvjqc
/usr/bin/freeも/proc/meminfoをopenしてreadしているようだ。
ちょっと思いつかない。


438:login:Penguin
07/12/18 01:04:48 E/zgaCho
もう1つ別の話になりますが

プロセスA,B,Cがあったときに
起動順序に依存関係があった場合や
不意の終了が起きたときの再起動等の
管理を含めた

プロセスの監視、管理ってみなさんどうしてますか?

439:login:Penguin
07/12/18 01:20:16 v3HQV+pu
>>436
昔はps(8)にしてもvmstat(8)にしても、その手の奴は nlist(3)を使って/dev/kmem を
スキャンしてカーネルの変数を直接読んだんだけど、それをするためのプログラムは
setuid rootが必要だった。

今でもできると思うけど、別にそんな速くなるかというと、微妙だと思うなぁ。大体なんで
そんなものをreadするのに速度が必要なのか。

今はカーネルのさまざまな変数をsysctl(2)や/procファイルシステムで見るように
なっているから、そっちが一般的だと思うが。


440:login:Penguin
07/12/18 01:24:13 v3HQV+pu
>>438
ここはプログラミングスレだから、そういうツールを紹介してほしい、じゃなくて、
そういうものを書きたい、という事だよね?
UNIXのプロセス管理、特にwaitシステムコールの仲間と、SIGCHLD周辺をよく
勉強するといいと思うよ。

441:login:Penguin
07/12/18 02:52:41 wJyWvjqc
>>439
OSは何ですか?Linuxだとnlistという関数はないっぽい
elfutilsの付属品で/usr/include/nlist.hというのがあるけどOSの情報をとるものではないようで。


442:login:Penguin
07/12/18 23:54:49 E/zgaCho
なぜPacket socketってRxのみなのですか?
Txにも対応して欲しいのですが

誰かなんとかなりそうってヒントくれませんか?

443:login:Penguin
07/12/19 09:05:58 3xyl6Kve
>>442
対応してるよ

444:login:Penguin
07/12/19 23:34:24 VN4RCfEY
>>443
そっちじゃなくてpacket_mmapだた

これは無理ですよね

無理ならstruct net_deviceを直接参照する
ようなコードをモジュールレベルで書きたいのですが
難しいですよね〜

445:login:Penguin
07/12/20 00:47:26 7G9805T8
eth0からeth7までをNIC1台の鯖に積んでるのですが
例えばeth0からeth4にパケットを転送するときって

send()するしかないですよね?
しかし5.6GBpsのコピーだとはんぱーねほど
負荷かかって困るw

たまにーマシンごとお亡くなりになってしまうし

446:login:Penguin
07/12/20 01:00:32 yx641/2O
チップセットがIntel以外とか、BIOSをageてないとかでないの

447:login:Penguin
07/12/20 01:12:56 gjGGDzJy
LinuxカーネルではRCUというデータ構造?が使われていると聞いたのですが、どんなものか
概要を知るにはどこが便利でしょうか?

448:login:Penguin
07/12/20 01:18:52 KxE4A1DD
>>445
いまいち状況がわかんないけど、sendfile(2)でもいいんじゃない。

449:login:Penguin
07/12/20 01:29:14 7G9805T8
>>448
in socket
out sokcet

これは無理ですよ。manページまともに読んでくれ

450:login:Penguin
07/12/20 01:29:48 KxE4A1DD
>>447
ん?これのことか?
URLリンク(git.kernel.org)

451:login:Penguin
07/12/21 01:40:37 A4fo/FEb
URLリンク(www.scaramanga.co.uk)

こいつを改造して、送信側もmmap-packetしたいのですが
スレ違いですかね?

mmapでバッファ取得しているからそのまま、フレームの
アドレスをsendfile()で送ればいい?



452:login:Penguin
07/12/26 23:54:48 S8Qi2r6E
ここで訊くのが合っているか判らないけど質問

デスクトップをクリックした、というイベント取得したいんだけどどうやるんだ?

453:login:Penguin
07/12/27 01:17:57 n3z1YHrf
何を言ってるのかイマイチわからんかったので、とりあえず
「XCheckMaskEventでXButtonPressMask」
と答えておく。

454:login:Penguin
07/12/27 01:21:58 W7wVcUmw
ポルナレフ同士かよ

455:login:Penguin
07/12/29 01:41:34 6hJfAH2B
CPU使用率(百分率で0〜100)はどこで取得できますか?

456:login:Penguin
07/12/29 02:13:14 JWUAvm2Q
/usr/lib/python2.5/site-packages/screenlets/sensors.py
を覗くと、下記のようになっている。あとは、そのまま使うなり、自分で作り直すなりどうぞ。

# calculate cpu-usage by values from /proc/stat
# (written by Bernd Wurst)
def get_cpu_load (old_cuse = [0]):
    # Let's try if we can calc system load.
    try:
        f = open("/proc/stat", "r")
        tmp = f.readlines(200)
        f.close()
    except:
        print "Failed to open /proc/stat"
        sys.exit(1)
    # 200 bytes should be enough because the information we
    # need ist typically stored in the first line. Info about individual
    # processors (not yet supported) is in the second (, ...?) line
    for line in tmp:
        if line[0:4] == "cpu ":
            reg = re.compile('[0-9]+')
            load_values = reg.findall(line)
            # extract values from /proc/stat
            cuse = int(load_values[0])
            csys = int(load_values[2])
            load = cuse + csys - old_cuse[0]
            #load = int(load / self.update_interval)
            old_cuse[0] = cuse + csys
    return load

457:login:Penguin
07/12/30 23:24:42 zPNvSTb5
wとかtopのソースコード嫁ば?

458:login:Penguin
07/12/31 06:20:04 PRFdFPv5
>>457
以外とめんどくさいよね。 なんで定期的にpollしてアプリで計算しなければ
ならないのかと。 カーネルで計算しといてくれて/proc/... で読めれば
便利なのに。


459:login:Penguin
08/01/01 12:50:10 o4AC5iuF
計算する必要がないことをカーネルにやらせないだろ

460:login:Penguin
08/01/01 16:13:09 3yCJg0HF
>>458
あんた、アホや

461:login:Penguin
08/01/01 16:31:40 nCKl90za
>>458
養護施設か精神科完備の病棟に
入所したほうがいいよ。

社会に迷惑かけてしまって、親族、
地域に迷惑をかけてしまうまえに
自分の意志で入所しなよ。

みんな喜ぶよ?


462:login:Penguin
08/01/01 19:50:29 VCekl7x7
>>458
そういうドライバを書けばいいよ。

キャラクタ型ドライバの入門としては
結構いい題材だと思う。

463:login:Penguin
08/01/01 22:36:49 3yCJg0HF
ちゃんとdoubleで計算するんだぞ

464:458
08/01/01 23:44:28 yGAu0gFM
>>462
ぐぐったらそのような計算をしているコードを見つけた。

drivers/cpufreq/cpufreq_ondemand.c


465:login:Penguin
08/01/06 23:48:28 5PoYdP/T
Linuxの[vdso]って、シグナルにも何か関係があるんでしたっけ?
おしえてください。

466:login:Penguin
08/01/07 00:49:32 p6NEl8Gg
#include <sys/inotify.h>

これに含まれているinotifyってシステムコールは
ファイルにシステムによっては使えないこともありますかね?

reiserfsで使えないようなw

467:login:Penguin
08/01/07 01:14:07 YbV5WNsA
今どきreiserfsを使っている人はいないと思うけど一応
サポートはされていないらしい

468:login:Penguin
08/01/07 22:17:39 p6NEl8Gg
使う人いねーのかよw

じゃあ何が主流なのw?

469:login:Penguin
08/01/08 00:11:17 dGquMe0p
今から使う人はいなくても
数年前にreiserfs入れてまだ使ってる人は結構いると思うよ。

470:login:Penguin
08/01/08 00:11:44 2ujb3qeo
>>467
?。普通に使うだろ(縁起悪いけど)

471:login:Penguin
08/01/08 00:38:19 obtHiT+g
>>468
ext3かXFSが主流ですw

472:login:Penguin
08/01/08 00:51:11 g3yhOYjE
>>470
縁起悪いの知ってて使う人いるんだw
Jail好きなのね

473:login:Penguin
08/01/08 01:05:49 2ujb3qeo
>>472
あんなことになったのは残念だけど、Hansはファイルシステム設計という
領域に留まらない天才の一人だったと思う。

でも天才であっても他はやっぱり人間だった。判決はまだ出てないけど、
背景を聞くにつれて、あれだけの能力があっても人生の幸せを掴むのは
また別の話なんだなと無常を感じたよ。

474:login:Penguin
08/01/08 01:33:05 XSbSibRZ
まぁ悪魔の犯罪者だからなぁ



475:login:Penguin
08/01/08 01:39:59 41aIleea
確定なの? 遺体は出たの?

476:login:Penguin
08/01/11 16:12:28 f8prPTXJ
LINUX勉強中の身なのですが・・・どなたか教えて下さい。
Windowsでは、GetPrivateProfileStringでiniファイルの読み込みをしていたのですが、
LINUXで使えなくて困っています。>146〜に同様の質問があったのですが、理解できませんでした。
write処理も無いのですよね?
関数が存在しないということは、LINUXではiniファイルという概念が無いという事でしょうか?
普段皆さんは、どのようにしているのですか?
環境はKNOPPIXです。






477:login:Penguin
08/01/11 16:15:55 JN9du13d
普通は環境変数から読んでくるんじゃない

478:476
08/01/11 16:38:30 f8prPTXJ
レスありがとうございます。
でも組込用LINUXで、自分自身で設定出来ない場合はどうするのでしょうか?
SDやUSBはあるので、アプリ実行時に、外部媒体へbatファイルを読みに行く
処理を追加し、環境変数を変更するのは低レベルでしょうか?


479:login:Penguin
08/01/11 16:43:43 wrx0pdGh
組み込み業界ってこんなやつばっかなん?

480:login:Penguin
08/01/11 16:46:44 HOV5kV5N
yaccとlex使って構文解析部分から作ってみるのもunix流の練習になるんじゃね?

481:login:Penguin
08/01/11 16:48:17 f8prPTXJ
組込もLINUXも初なので勘弁して下さい。


482:login:Penguin
08/01/11 16:51:25 /lhYIwjn
>>481
それ以前の問題じゃないの?

483:login:Penguin
08/01/11 16:54:52 f8prPTXJ
かなしす

484:login:Penguin
08/01/11 16:59:49 /lhYIwjn
できる人に教えてもらえば?

485:login:Penguin
08/01/11 17:01:30 f8prPTXJ
できるひと・・・いない

486:login:Penguin
08/01/11 17:06:04 /lhYIwjn
かわいそう...

487:login:Penguin
08/01/11 17:37:55 JN9du13d
perlを使って初期化ファイルから環境変数を作成する処理をラップすれば?
実行プログラム本体にはそれを読ませてやれば楽だろ

488:login:Penguin
08/01/11 17:38:55 qBjbfrrT
Linuxは初めてだって言ってるんだから、職種は関係ないだろ。
言語とか開発環境とか具体的に書いてもらわないとわからないけど、
GetPrivateProfileString()って言ったらWindowsのAPIだけど、プログラム中からコールするのかな?
Cの関数でいえばsetenv()、getenv()があるよね。
バッチレベルでいいならexportで登録しておくとか。

489:login:Penguin
08/01/11 17:42:30 JN9du13d
誰も職場内で方針示してやれないような仕事取ってくるなよなぁ〜w
痴呆が上だからIT業界は7Kだって言われる

490:login:Penguin
08/01/11 18:15:42 HOV5kV5N
組み込みlinuxでファイルI/Oを使って初期設定を読込み?
設定はヘッダーに入れてしまってハードコーディングじゃだめなのか?
初期設定を読ませるためだけに小さいとは言え余分なライブラリを使える
メモリと処理能力の余裕がある?

linux以前の問題な気がするなぁ、、、


491:login:Penguin
08/01/11 18:52:28 /lhYIwjn
書き込み fprintf
読み込み scanf
でやればいいんじゃないの?

492:login:Penguin
08/01/11 20:02:51 /lhYIwjn
scanf->fscanf

493:login:Penguin
08/01/11 23:11:20 MrZRBUAk
>>478
Linuxではそういう処理は起動スクリプトで行われる。 /etc/init.dの
中の他のアプリのスクリプトを参考に。

494:login:Penguin
08/01/12 02:32:22 FBfOnT6z
cmakeでwindowsとの互換をあくまで維持したい俺

495:478
08/01/12 08:28:35 DOVfiP6Z
昨日はショボンでしたが、
みなさんありがとうございました。
意見を参考に試してみます。
私含め、上司がレベル低いのは入社当初から知ってます。


496:login:Penguin
08/01/12 09:34:51 xcB/bLmK
>>495
Linux歴が浅いのでLinuxの作法を知らないのは当然だとして
それ以外の基礎知識や能力や言葉の使い方や文章の書き方は俺の数段上を行ってるなぁ
まぁ一緒にされたら迷惑だろうけど……。
最近稀に見る好印象な方だなぁと思った。


497:login:Penguin
08/01/12 10:36:04 QnvfkAhH
inotifyを
reiserfsで使ってみた。

間違ってイベントが無限に飛んでくる
バグとかあってプロセス10万
発生させてしまってマシン群止まっちまったw

reiserfs禁止にしたほうがいいぜ

498:login:Penguin
08/01/12 13:06:44 ZIVLcoIL
間違ったのがお前じゃないことを証明出来たら考える

499:login:Penguin
08/01/12 14:07:31 FBfOnT6z
>>495
pointed hair bossで検索するとちょっと幸せになれるかも

500:login:Penguin
08/01/12 14:17:16 QnvfkAhH
>>499
上司使えない云々より

pointed-haired bossをそんな風に書く奴が
このスレにいる方が恥ずかしい。もう来るなよw

501:login:Penguin
08/01/12 14:51:08 FBfOnT6z
>>472
siduxのインストール解説してるホームページでreiserfsを入れてたから
そのまま,まねして入れてしまった。

502:login:Penguin
08/01/12 20:37:07 6ANyg4lC
起動時の画面にペンギンは出てくるのに、起動メッセージが表示されないのはなぜ?
シリアルコンソールには起動メッセージが流れてるのに..
カーネルパラメータかデバイスファイルの設定が必要ですか?


503:login:Penguin
08/01/12 22:52:36 k/UIIV/1
>>502
どのメッセージのことか分からんが、
ディストリによってはそういうもんだろ

504:login:Penguin
08/01/13 03:13:19 0vRtfE6z
ちょっと質問を。「組み込みLinuxができる」って言える基準って何か皆さんありますか?

とあるデバイスにLinuxを載せてその上でアプリを走らせるという事をやったのですが、
結局はLinuxの一般的な機能(標準関数やらioctlやらopen("dev/xxx")やら)
を使ってアプリを作ったという具合で、どうも誰でもできるような表層的な事をやったような印象です。
これを組み込みLinuxと言うのは間違っている気がするのですが、

みなさんにとっては何をもって組み込みLinuxでしょう?


505:login:Penguin
08/01/13 03:20:31 YLI1I0ry
>>504
新しい CPU で gcc すら動かないプラットフォームなら gcc を移植する.
bootprom がなければ自前で移植/製作する.
いざとなったら仮想記憶とも戦う.
足りないドライバは自前で作る.
ユーザーランドは必要最低限な物だけ拾ってきて自分で構築する.

あたりかな.


506:login:Penguin
08/01/13 07:01:23 OSM5etr9
下ふたつはいいにしても、
 >gcc を移植する
これはないだろうさすがに。

507:login:Penguin
08/01/13 07:09:47 Hm7xBcnO
最近だとCellか

508:login:Penguin
08/01/13 08:19:09 YLI1I0ry
>>505
あるよ. mips core に特殊な co-processor つけた奴とか,
特殊用途に特化した processor 用のやつとか, 今まで 3回
移植した.


509:login:Penguin
08/01/13 08:26:40 YLI1I0ry
アンカー間違えた >>506
もっとも, 専用組み込みOS用で Linux 用じゃなかったけどな...
開発は全部クロスプラットフォーム.


510:login:Penguin
08/01/13 10:53:17 ujlOgFWo
>>508
そこまでやれなくても組み込みLinuxできると言っていいだろ

511:login:Penguin
08/01/13 11:06:22 2uIpuPRh
そう得意になって言うことでもないな

512:login:Penguin
08/01/13 12:45:24 ZbSPxFY0
>新しい CPU で gcc すら動かないプラットフォームなら gcc を移植する.
>bootprom がなければ自前で移植/製作する.
>いざとなったら仮想記憶とも戦う.

そもそもこの3つはLinux全く関係なくないか?
組み込みであることは確かだが。

513:login:Penguin
08/01/13 13:11:47 ujlOgFWo
俺も今度Linux組み込みやろうと思うんだが、

普通のLinuxのドライバ開発 VS Linux組み込み
Linuxの組み込み VS 普通の組み込み

ってどう違うんだ?
組み込みじゃないLinuxのドライバは経験あるんだけど

514:login:Penguin
08/01/13 13:25:07 tHHnWE3z
>>505が必要だということを知ってればいいじゃないか。
あとはどうやればいいのか自分でしらべればOTJになるし。

515:login:Penguin
08/01/13 13:26:26 tHHnWE3z
すべった。OJTだ。
orz

516:login:Penguin
08/01/13 13:38:02 88CnHFva
組み込みで適当にソース拾ってきてfbconでつまずいてますorz
画面に文字を出すにはfbconを使うと見たのだが。。
アルマジロにしとけばよかったかなぁ あれならいきなり動きそうだし

517:login:Penguin
08/01/13 13:46:09 YLI1I0ry
>>512
> >いざとなったら仮想記憶とも戦う.
MMU とか TLB とか言われる部分のアーキテクチャに依存するので, Linux の
VM が target のアーキテクチャをカバーしきれていない場合必ず発生する.
つか, VM 使った OS なら何だってそう, NetBSD でも結構泣いた.


518:login:Penguin
08/01/13 14:10:42 88CnHFva
MMU辺りと戦うとなるとかなりのパッチになりそうですね
趣味人には荷が重いし、プロだと開発費が厳しそう。

519:login:Penguin
08/01/13 14:32:11 YLI1I0ry
>>518
patch の量は大したことないよ. target のアーキテクチャと
OS の VM アーキテクチャの整合をどうとるかって問題だけだから...

ただし, 双方のアーキテクチャを
***うまく噛み合わせる手法***
を考え付くまでにやたら時間がかかる.


520:login:Penguin
08/01/13 14:57:09 ujlOgFWo
その前にCPUとOSのVMを理解する時間が必要だ

521:login:Penguin
08/01/15 02:45:42 eLLje4gP
linuxでgccを使っています。
cを使ってます。

fork-execでお聞きします。
binは、何かのコマンドです。

if(fork()==0)
{
execl(bin,bin,"gg*.c",NULL);
}else
{
wait();
}
とする場合にexecでは
*がメタキャラとして認識されないようです。

メタキャラを有効にする方法ってありますか?

522:login:Penguin
08/01/15 03:25:29 JuJ/Jd3b
>>521
*の展開は/bin/shの機能だからね。execveで展開される筈もなく。
system(3)やpopen(3)を使うか、自分で*をglob(3)で展開するかしないとダメやね。

523:login:Penguin
08/01/16 01:30:06 R+P7htm7
マルチスレッドでシステムコール使うの禁止なんですよ。
スレッドセーフか、分からないよorz  (man見ました)


524:login:Penguin
08/01/16 02:24:00 84amoxWV
>>523
システムコール禁止ってfork(2)もexecl(2)もシステムコールだと思うが
スレッドがどこに出てくるのか話が見えないんだが、
スレッドの中でfork(2)しようとしてるの?
それはまずいんでない

525:523
08/01/16 04:49:53 R+P7htm7
pthread_atforkと
fork-execの間に無駄な処理しない場合は、今の所OK

526:login:Penguin
08/01/16 07:52:05 XSPkVtkD
>>525
それ嘘だろ

527:login:Penguin
08/01/16 11:41:09 D4p47idN
あってるんじゃないの。
URLリンク(d.hatena.ne.jp)

ただ、
>マルチスレッドでシステムコール使うの禁止
というのは、何かまだ条件が足りていない気がする

528:login:Penguin
08/01/16 11:50:50 vAdXY+Zc
禁止じゃないのもある

529:login:Penguin
08/01/17 00:22:17 gFqea9nd
話割って入ってすまないが

iptablesのようにパケットフィルタを
したいのですが定義されるフィルタ情報が
1万もあります。
とてもじゃないけどまともに1つずつなめている
と終わらないので何か良い方法ないでしょうか?


530:login:Penguin
08/01/17 00:26:04 FBet0L5h
1000に分けて10回処理する
禅問答みたいだけど効果は補償できる、まじお薦め

でも1万ルールも追加しなくても、おそらくネットマスクを使うなりなんなり
方法ありそうな気がします。

531:login:Penguin
08/01/17 01:04:02 gFqea9nd
>>530
カーネル見ながら考えてみたけど
用は困りモノなのがサブネットマスクの値に
よる変動なので

struct mask_zone{
struct mask_zone *next;
struct mask_zone *not_null_next;
uint32_t mask;
};

とかリンクリストを用意、基本的にマスク長単位に分割
する方針ってどうかな?ハッシュも組み合わせる予定

これだけだと毎回33回舐めるからばからしいので
構造体にnot_null_nextっていうNULLじゃないリストへ
ポインタも入れて舐める回数を減らすっていうのはどうかな?




532:login:Penguin
08/01/17 02:13:06 7inzzgaQ
>>525
read(2),write(2),open(2)はマルチスレッドでも呼べると思うんだが。。。
というかシステムコール禁止したら、スレッドで何もできない。。

533:login:Penguin
08/01/17 07:02:23 IbgArDhc
何もできなくはないだろう。
「意味のあることは何もできない」というだけでw

534:login:Penguin
08/01/17 09:54:37 nrX5B3xa
man signal見た?

535:login:Penguin
08/01/17 13:45:36 zG6yMxAP
printfだって下位層でシステムコール呼ぶからな

536:login:Penguin
08/01/17 16:27:11 qlT5HX3f
弱い者たちが夕暮れ、さらに弱い者を叩くんだな。

537:login:Penguin
08/01/17 16:34:11 hGbWYs9C
その音が響き渡ればブルースは加速していくんだな。

538:login:Penguin
08/01/17 17:04:30 oO7ItHQ/
見えないGUIがほしい

539:login:Penguin
08/01/17 23:14:33 RgCsKsuT
見えないGNUを撃ちまくる

540:login:Penguin
08/01/18 05:14:41 12aBnOBC
/dev/shm/と/dev/ram0の違いがわからない

mount -t tmpfs tmpfs /mnt/ramdisk
しても/dev/shmとかは使わないんだな。

541:login:Penguin
08/01/18 22:10:28 ddex+v8t
>>540
俺も知らないが、ブロックデバイスとファイルシステムは違うんじゃない?
それとも、 shm_open(3) 読めばおわりか?

542:login:Penguin
08/01/20 09:17:18 GQI9e7dz
プログラム版の質問スレから誘導されてきました.

while ((c = fgetc(stdin)) != EOF) {
printf("[%d]: %c\n", num++, c);
}
とかやったらいつまでだってもfgetcから抜けれないのですが
stdinでEOFをキーボードから打ち込むにはどうしたらいいですか?
ちなみにLinuxのxterm上で動作させています.

543:login:Penguin
08/01/20 10:02:05 9Tl2aHlP
>>542
Ctrl+D

544:login:Penguin
08/01/20 16:58:04 QAkqHfcc
>>542
Linuxプログラミング固有の話じゃないんだが
誘導する奴はレベル低いな

545:login:Penguin
08/01/20 17:33:57 3cxUYgCe
同感

546:login:Penguin
08/01/20 19:32:41 60pqkMpi
かといってこんなのをプ板にのさばらせておくわけにもいかないからな

547:login:Penguin
08/01/20 19:43:59 m3nXxor1
プ板てw

548:login:Penguin
08/01/20 20:15:53 60pqkMpi
ムだム。間違えた。

549:login:Penguin
08/01/20 21:25:35 lhDKawjW
なんでムなん?

550:login:Penguin
08/01/20 22:03:02 O/GA+k/y
はるか昔、ムー族とマ族の争いがあって、千年続き、
それを嘆いた神がプ大陸を二つに分けたと伝えられる。

551:login:Penguin
08/01/21 01:51:38 EPN4E+gf
>>544
環境依存じゃないか?
UNIX なら stty(1) を見ろとなる。
で、プ^H^Hム板の質問スレなら Ctrl+Z or F6 な人もいるだろ。

552:login:Penguin
08/01/21 21:33:07 DS13UDOd
>>549
プログラ「マ」(について語る|がダベる)板、通称マ板と区別するため

553:login:Penguin
08/01/22 22:56:28 3SjBwwbG
pthreadtypes.hで定義されているpthread_attr_t構造体ですが、
2.6.9と2.6.18で見比べたところ全く違う内容になっています。
というかpthreadtypes.h自体に大幅な変更があったような。
いつのバージョンで変わったか分かる人いませんか?

554:login:Penguin
08/01/22 23:06:29 1aLYQ0Xu
struct sk_buffをそのままユーザ空間に
ひっぱりだしたいんだけど

どうすればいいのかなぁ

555:login:Penguin
08/01/22 23:11:26 Z7iV0h+U
>>553
ユーザアプリからは、構造体の中身を参照しちゃいかんのとちゃう?

556:553
08/01/23 00:20:47 rX2IdG6k
>>555
まじですか!?
そういうつくりになってたんすね。
pthread_attr_init()系の関数でアクセスですかね。
ありがとうございます。

557:login:Penguin
08/01/23 02:08:02 n7QxPJKv
すまんstatを使ってファイルサイズを調べたいんだけど
if (stat(FileSt, &sb) == 1)
{
 (sb.st_size>0)
 {
  ifs_flg=1;
 }
}

ファイルが存在するか?するならサイズは?みたいにしてます。
これを1行でstat(FileSt, &sb->st_size) >0
みたいに出来ませんか?


558:login:Penguin
08/01/23 02:08:50 n7QxPJKv
あ、ファイルは存在する前提です

559:login:Penguin
08/01/23 04:08:18 iwlYPuMF
statなんたらって自前の関数用意すれば

560:login:Penguin
08/01/23 11:43:41 G50LtKQp
>>557
単純にショートカットじゃダメ?
if ((stat(FileSt,&sb)==1) && (sb.st_size>0)) {
...
}

561:login:Penguin
08/01/24 01:44:45 XcZJxRmS
>>560
それやってたんですが、うまく行かない。
あ、括弧なしだったからかな?
括弧つけてみます

562:login:Penguin
08/01/24 09:06:49 +0KdBqsj
recvfromってタイムアウト設定はできないんですか?
データが届かなかったら永久に待ってそうです

UDPのプログラムで任意の時間返答が無かったら
さっさとrecvfromを抜けたいんですが...

563:login:Penguin
08/01/24 09:12:54 +a49+I+1
>>562
selectを使いたくないならSO_RCVTIMEO

564:login:Penguin
08/01/24 09:44:54 +0KdBqsj
>>663
int timeout = 5000

setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(timeout));
とやっても抜けられないです...やはりずっととまったままです


565:login:Penguin
08/01/24 09:51:20 +a49+I+1
struct timevalとintって?同じもの?だっけ?5000秒?待ったり?

566:login:Penguin
08/01/24 10:06:19 A5lAfTzI
>>565
struct timeval と int は別

567:login:Penguin
08/01/24 10:17:10 FNc6yZ5O
565 は知ってて書いているようにしか見えない。

>>564
ためしてないが、その setsockopt(2) は EINVAL になってたりしないか?

568:login:Penguin
08/01/24 10:20:13 +0KdBqsj
>>565-567
できました!

569:login:Penguin
08/01/24 10:27:34 +0KdBqsj
おかげさまでタイムアウトは無事できました
まだ疑問があるのですが
struct timeval tm;
tm.tv_sec = 5;
setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (void*)&tm, sizeof(struct timeval));

とやってもrecvfromにてあきらかに12秒近く待たされています...
あんまり厳密に守られるわけではないのでしょうか?

他のシステムコールの呼び出し等にて7秒以上かかってるとも思えないのですが

570:login:Penguin
08/01/24 10:57:59 +a49+I+1
名前解決じゃね?

571:login:Penguin
08/01/24 11:16:26 +0KdBqsj
>>570
ipアドレスをinet_addr直でやってます.

572:login:Penguin
08/01/24 11:27:31 Z64zlv7x
>>571
tm.tv_usecはクリアした?


573:login:Penguin
08/01/24 11:52:54 +0KdBqsj
>>572
なんという不注意...注意散漫になってるようです.
無事指定時間でタイムアウトさせる事ができました.ありがとうございます

574:login:Penguin
08/01/28 19:51:08 oy6mNs1o
現在、2枚のNICを持つマシン上での開発でつまづいています。

それぞれのNICに同じネットワークのIPアドレスを振ります。
例:eth0:192.168.1.10 eth1:192.168.1.11

この状態で、普通にSOCK_DGRAMにてソケットを生成し、適当なIP
アドレスに対して送信します。
すると、どちらのNICから出すかはルーティングテーブルでどちらが
上に位置するかで決まってしまいます。

これをNICを指定して送信したいのですが、可能でしょうか?
RAWソケットを使えばできるのですが、仕様上の制限があって
使えません。

575:login:Penguin
08/01/29 09:35:56 Jv26bMRM
>>574
bindしてから送信 はどうだろう
やったことないけど

576:login:Penguin
08/01/29 09:52:16 BgbmjeIx
>>575
source address を指定したいわけじゃなくて、どのインタフェースから
出したいか、ということだったらそれじゃぁダメだ。

>>574 がなんでそんなことしたいか知らないけど、iptableのmangle tableで
markして、iproute2で該当するパケットだけルーティングテーブルを別けて
やるほうが自然だろう。
URLリンク(www.atmarkit.co.jp)
もしこっちが使えないならrawソケットでやるしかないよ。

577:login:Penguin
08/01/29 15:44:25 Jv26bMRM
ところで
main(){
 int a=0;
 for(;;){
  printf("%d\n",a++);
  sleep(1);
 }
}
みたいなプログラムを書いたんだけど、これを
$ ./a.out > hoge
としてもhogeに出力されない。
バッファリングされてるみたいなのでprintfの後ろに
sync()やらfsync(1)やら入れてみたけど駄目っぽい
これどうしたらいいんだっけ?

578:login:Penguin
08/01/29 16:25:19 E7XlIkuM
fflush(stdout);

579:login:Penguin
08/01/29 22:53:11 pK88c6Qm
いまどき\nでフラッシュしないstdoutがあるのか・・・

580:login:Penguin
08/01/30 02:17:24 VGRpnUoT
そりゃ・・・、端末に向いてない stdout(3) なら line buffered じゃなくても
いいんでわ。

581:574
08/02/01 11:04:33 KZ/Tojjt
レス遅れてしまいすみません。

>>575
>>576さんの言うとおりbind()をしてから送信すると、L3レベルでは大丈夫
でしたがEtherealでキャプチャするとL2レベルで、MACアドレスが同じに
なっていました。

>>576
提示してもらったWebを確認しました。現在開発しているのはなかなか
処理能力的にシビアな箇所なので、RAWソケットを使用できるように
説得してみます。

582:login:Penguin
08/02/01 19:24:02 MPKtEvB1
というか、bondingしてあとは知らん、ではなんかいかんの?

583:574
08/02/03 21:37:06 mkJ6nZ+Q
>>582

bonding、初耳だったのでぐぐってみましたが中々興味深い技術です。

ですが、仕様上送信元IPアドレス(つまり自分が持つやつ)が複数あり、かつ
対向の種類によって決まってしまっているので使えないようです。

けどこの技術に似たようなのを実装しなければならない機能ブロックも
あるのでこれはこれで提案してみようかと思います。

そういえば、RAWソケットって送信するときにPath MTU Discoveryをソケット
オプションで無効にしてもフラグメントされないなーと思ったら、man raw(7)に
バグとして挙がっているんですね…(使用OSはFedora7)
これも自分で実装しなければならないなぁ。

584:login:Penguin
08/02/03 22:24:34 +lhwKKGQ
>>574
最初から難しいこと考えないで、まず既存の機能 (>>576 の iptable + iproute2等) で
やってみて、それでパフォーマンスなどの問題がないかどうか確認して、どうしても
独自に実装しなくてはならないことを確認してから raw ソケットなり、カーネル
モジュールで何か作るなりすることを検討するほうがいいぞ。

585:login:Penguin
08/02/04 19:10:09 hfVjOmBk
自分のサブネットマスクを取得するのはどう書きますか?
IPアドレスは分かってるとして。

586:login:Penguin
08/02/04 21:29:01 nLbVhZ24
>>585
getifaddrs(3)

587:login:Penguin
08/02/04 21:35:32 G8QRQQli
>>586
IPv4でも使えんの?

588:login:Penguin
08/02/04 21:56:25 nLbVhZ24
>>587
使える。v4でしか使えないバグならglibcが2.3の頃にあったはずだが。

589:login:Penguin
08/02/05 18:12:27 MeDWiyY9
大量のスレッドを生成できなくて困っています。
現在、上限10000個のスレッドを生成したいのですが(そういう仕様なので…OTL)
スタックオーバーフローで生成できていません。

解決策としては、デフォルトでは大きすぎるスタックサイズを
pthred_attr_setstacksize() で減らし、また予めスレッド用スタック領域を
malloc()にて確保し、これをpthread_attr_setstackaddr() にて設定することを
考えました。実際やってみると確かにデフォルトよりは生成数は上がっているの
ですが、到底10000個には追いつきません。

そこで質問なのですが、上記のようなアプローチで合っているのでしょうか?
あと、pthread_attr_setstackaddr() の第2引数(つまり、スタック開始アドレス)は
10000個のスレッドで同一なのでしょうか?

10000回のpthread_create()ループの外で1回だけ
pthread_attr_setstack(&attr, g_pthread_stack) をこーるするのか、

ループの中で
pthread_attr_setstack(&attr, g_pthread_stack+STACK_SIZE*i)のように
スタックサイズ分オフセットを毎回させるのか

が分からないです。

590:login:Penguin
08/02/05 18:15:04 GUozEVBV
それができたとしてうまく動くと思ってやってるの?

591:login:Penguin
08/02/05 20:56:19 SlsIEQrM
何をやるのか、メモリをどれだけ積んでるか、ということによりけりだな。
pthreadとか知らんのでclone(3)で自分でスタックを用意して一万個ほど
スレッドを生成したことはある。使い方によっては普通に動く。

592:login:Penguin
08/02/05 21:03:59 GUozEVBV
それはすごい。

593:login:Penguin
08/02/06 06:41:46 nwp5GfWb
AMD64とかIA64とかでメモリを64GBくらい積めば大丈夫じゃね?

594:login:Penguin
08/02/06 07:25:44 s++avmRm
カーネル側で使うのが各スレッド8KB。ユーザ側のスタックを4KBに抑えれば
スレッドをひとつ増やすごとに必要なのは12KB。10000個ならざっと120MB。

595:login:Penguin
08/02/07 00:54:55 GYgs3mMU
>>589

> あと、pthread_attr_setstackaddr() の第2引数(つまり、スタック開始アドレス)は
> 10000個のスレッドで同一なのでしょうか?
同一で良いはずが無いねえ。スレッド毎に確保ですよ。

スタックの先頭アドレスはページ境界にアラインさせないとsetstackaddrがEINVALで失敗する。
mallocではなくて、posix_memalignかmmapでスタック用のメモリを確保するとよい。


596:585
08/02/08 09:16:22 Tg+rPbrB
サンクス! >>586 , etc...

それググってみましたが、IPアドレスが幾つも取れるじゃないですか。
その中でIPアドレスをマッチングして、そのサブネットマスクを取るしかないんでしたっけ?

それとも、サブネットマスクって1台のマシンに複数IPアドレスがあっても共通?

597:login:Penguin
08/02/09 00:02:49 1XOuKxIO
つーか、IPアドレスに対して、サブネットが対応してるでそ。
インターフェースが2枚あったら、
eth0 : 192.168.1.5/24
eth1 : 10.23.45.67/16
とかさ。

598:login:Penguin
08/02/09 01:25:11 eMQaM6TS
man引けば分かるはずなんだが、今の場合はそれ以前の問題のような。
プログラミングより、くだ質が妥当なような。

599:login:Penguin
08/02/09 01:57:14 pxZu1S51
>>598
manを引いても基本原則知らなきゃわかんないだろうな
こういうのを一番簡単に身につけるには
教科書的なものを頭ッから丸暗記するのが手っ取り早い

600:login:Penguin
08/02/10 17:43:00 AB987pUW
mallocをすると、値が帰ってくる前にsegmentation faultするんだけど・・・
これはライブラリの領域をどこかで破壊しているということでよろしいのでしょうか

601:login:Penguin
08/02/10 18:47:08 rgXsI3qI
gdbで引っ掛けてどこで死ぬかを見極めるべし
まあメモリ破壊の類だとは思うが

602:login:Penguin
08/02/10 20:52:25 +TLKCHqg
>>600
メモリ破壊だったら、Electric Fenceが便利かもね。

603:login:Penguin
08/02/10 20:55:13 qj0nK6Tb
valgrindのほうが。

604:login:Penguin
08/02/10 23:03:17 W61q/SHI
自分に強壮剤がいいよ

605:login:Penguin
08/02/11 12:45:49 0peP2Ab+
>>601-603
ありがとう
ドリンク飲んでがんばります

606:login:Penguin
08/02/11 20:57:09 JHZIo94H
>>600
エラー処理をしているのかと子一時間

NULLが帰ってきたら、どうしてるの?

607:login:Penguin
08/02/11 20:59:54 NXuZoz9l
実際mallocでNULL返ってくるの? CoWなのに。

608:login:Penguin
08/02/11 21:58:06 g58d+k53
>>607
CoWは関係ないような。

というのはともかく、極端に大きなmallocならNULLが戻るよ。
搭載メモリ量とか、32bit/64bitにもよるかもしれないけど、malloc(1*1024*1024*1024)とか。

609:login:Penguin
08/02/11 22:59:43 v7vkIa+N
>>607
物理ページ自体は必要ないが、メモリ空間が足りなくなる可能性はある
x86 (32bit) だと、ユーザ空間が3GB・カーネル空間が1GBで分けられてたはずだから、
多分2.5GB確保は成功して、3GB確保は失敗すると思う

610:login:Penguin
08/02/11 23:27:43 g58d+k53
>>609
適当なプロセスをcat /proc/pid/mapsしてみればわかるけど、.soやらなにやらが3GBのそこかしこにmapされてしまっているから、
2.5GB連続で仮想メモリ確保ってのは難しいと思うよ。

例えばfirefoxあたりだと色々mmapされすぎていて全く無理ですね。

611:login:Penguin
08/02/11 23:49:20 H5r6W4j2
>>606
>>600は「値が帰ってくる前に」と言ってるんだから、NULLが帰ってくるも
ヘッタクレもないと思うんだが。
当然、返り値をチェックしようとしているけど、帰ってくる前にSIGSEGVなんだろ。

612:login:Penguin
08/02/12 21:41:58 i/htmIMa
ファイルAとBが同一パーティション上にあるかどうかLinux的にはどうやって判断すればいいんでしょうか

613:login:Penguin
08/02/12 23:16:42 6Xg+LWoP
パーティションよりファイルシステムの場所を調べる方が汎用性があって
尚且つ簡単そうで良さげ。スクリプトでやっつけるならdfにパスを食わせて
出たファイルシステムを比較すれば一丁上がり、、、かなぁ。

どうしてもパーティション、という場合は知らん。

614:login:Penguin
08/02/12 23:25:33 vZRSZKGy
今Linuxが手元にないんだけど、レギュラーファイルに対してstat(2)すると
struct stat::st_devってどうなるんだっけ?

615:login:Penguin
08/02/12 23:36:11 i/htmIMa
>>613
ありがとうございます。mtab読みに行くことにしました。

616:login:Penguin
08/02/12 23:48:38 943cnSqV
>>614
vmware+Linux入れなよ

617:login:Penguin
08/02/13 00:42:27 XbwK8Zpg
>>614
普通はそれだと思う

618:614
08/02/13 01:03:45 eUvEe13x
>>617
汲み取ってくれて、ありがとう。

619:login:Penguin
08/02/13 07:33:31 pBknmnOU
結局、パーティションまでは分からんということだな。

620:login:Penguin
08/02/13 07:47:41 hT3T8ff2
>>619
>>614にあるのじゃどうしてだめなの?


621:login:Penguin
08/02/13 11:59:04 G1ltJVUD
HTTPクライアントを作ろうと思いますが、
自分の空きポートはどうやったら取得できますか?

622:login:Penguin
08/02/13 12:14:39 5QyCkyQ9
>>621
HTTPクライアントならサーバの80につなげば
いいだけじゃない?空きポートを知る必要が
わからん。(connect()で80につなげばいいだけ。)
クライアントの使用するポートはプロトコルスタックが
空いているポートを適当に割り振ってくれる。

623:621
08/02/13 12:23:24 G1ltJVUD
>>622
あっ、そーですか。有難う。

httpで相手のポート80に接続して、writeするだけですね。
(tcpと大して変わらないのかって、tcpで接続するプログラム書いたことないけど)






関係ないけど、それらがC/C++のクラスライブラリになってたりしませんよね?

624:login:Penguin
08/02/13 12:25:48 YOhJXxZI
>>623
curl
と言いたいけど、お前にはsystem("wget URLリンク(wwwwwwwww)");で充分だ。

625:login:Penguin
08/02/13 13:21:11 hYkhPPAJ
>>623
TCP 以外の何でアクセスするつもりなんだ?

626:login:Penguin
08/02/13 18:02:37 G1ltJVUD
>>625
HTTP


ところで、HTTPエンコードする標準メソッドなんてありますか?

627:login:Penguin
08/02/13 18:20:50 G1ltJVUD
知りたいのは、HTTP エンコードじゃなくて、URL エンコードでしたorz

628:login:Penguin
08/02/13 19:29:27 Mx9E0jHA
>>626
HTTPってTCPじゃね?

629:login:Penguin
08/02/13 19:59:54 JBOJRmRv
>>626を見ると、>>624は正しかったんだな、と思った。

630:login:Penguin
08/02/13 20:54:09 eUvEe13x
>>628
あらゆる意味で違うと、いちおう突っ込んでおけばいいかな?

631:login:Penguin
08/02/13 21:03:49 N8sc8JVE
>>628
TCPってIPじゃね?
以降物理層まで続く↓

632:正義の味方
08/02/13 23:20:51 5UuGIiF+
地球を救う正義の味方、今こそ参上!!
URLリンク(seiginomikata.xxxxxxxx.jp)

633:login:Penguin
08/02/14 01:22:24 AMxoEq8N
>>624 そんなあなたに URLリンク(www.blue.sky.or.jp)


634:login:Penguin
08/02/14 05:16:55 vPDIK5xn
HTTP on TCP on IP on Ethernet

635:login:Penguin
08/02/14 10:46:16 yt/o7Lpq
UDPはTCPじゃないおねw

636:login:Penguin
08/02/22 11:00:23 G/AgynaC
自分が開いているファイルポインタを監視して,
ほかのプロセスから見られているかどうかをチェックする方法ってありますかね?


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4051日前に更新/218 KB
担当:undef