1 :
login:Penguin :
2005/06/06(月) 11:19:09 ID:uXQqRJXF Linux のプログラミングに関する話題です
2get!!!
4 :
login:Penguin :2005/06/07(火) 08:48:19 ID:f398JVV/
Linux固有のプログラミングに関する話題です
5 :
login:Penguin :2005/06/07(火) 09:19:02 ID:VuICZeLP
たとえば? デバイスドライバの書き方とか使い方とか?
6 :
login:Penguin :2005/06/07(火) 09:30:46 ID:M5U+LdKE
=================================== 終 了 ===================================
デバイスドライバの書き方については何でも聞いてください。 答えますよ。
9 :
login:Penguin :2005/06/07(火) 09:52:21 ID:VuICZeLP
Linux特有のならいいんじゃね? SIGCHLDを無効にして子供を自立させるのとかは BSDでは推奨されてないとか、どういうことじゃね?
10 :
login:Penguin :2005/06/08(水) 03:27:42 ID:efnI26oW
面白い話題なのでage これでLinuxにバリバリ依存したプログラミングの話が出来る
立て逃げか( ゚д゚)、ペッ
このスレッドを見てGCCを入れました! 大変参考になりました 1さんありがとうございました
>>1 が立て逃げしたため
=================================== 終 了 ===================================
cとかc++やればいいのでしょか>?
じゃ、ポータブルでないLinux特有の拡張があったらあげてみろや。
17 :
login:Penguin :2005/06/13(月) 23:13:42 ID:2SiW65Xk
Qt絡みの話は駄目?
18 :
login:Penguin :2005/06/16(木) 11:59:14 ID:jlxEkJcI
QtはLinuxだけじゃないから、それだけじゃダメだけど QtでのLinux特有のトラブルの話ならOKじゃね?
redhat v4 のサポート内容があまりにもへぼい件について
>>20 > どのようなソフトをインストールするべきでしょうか?
用途によるが C/C++ とかなら
Eclipse with CDT(Javaなので遅いが比較的マシ)
後は emacs かそのへんのテキストエディタ
>> プログラミングの学習環境をLinuxで整えるには
>>そしてどのように学習していけばよいでしょうか?
ところで何のプログラムをしたいのか?
24 :
login:Penguin :2005/06/17(金) 09:46:40 ID:UHDWQlXq
>>20 初心者ならemacsだろう。
開発用エディタとしては最高。
あらゆる言語のソースモードをもっている。
ソースの先頭に//-*- C++ -*-などと書いてくれたまえ。
それでそのソースを開くときにその言語のモードになる。
次に、ディレクトリ構成とMakefileについて深く学んでくれ。
共有ライブラリ、スタティックライブラリ、
ダイナミックリンク、ダイナミックローディング
についても学んでくれ。
その間にゴミのような小さいプログラムを沢山書いてください。
26 :
20 :2005/06/17(金) 20:32:36 ID:u6tR/1dR
>>21 >>25 レスありがとうございました。
インスコしたてでLinux素人ですが、少しずつ勉強して行きます。
いまはperlを勉強していますが、いずれは他のプログラム言語を学習したいと思っています。
Rubyってどうよ。
28 :
login:Penguin :2005/06/29(水) 02:04:11 ID:rSbPN/4/
デバイスドライバを作るときのテストに便利なアレ
29 :
login:Penguin :2005/07/01(金) 09:29:19 ID:xK97s0Sp
valgrindでメモリリークをチェックできるけど、 CGIプログラムでPATH_INFOとかPOSTを使うプログラムはどうチェックしたら良いの? 他のプログラム同様にやるだけで良いんだろうか。
CGIなら多少漏れたところで、プロセスが直ぐ死ぬから問題ないと思うがどうか。
31 :
login:Penguin :2005/07/03(日) 03:00:50 ID:vXmg8Wmb
_ ∩ ( ゚∀゚)彡 ioperm ! ioperm ! ( ⊂彡 | | し ⌒J
LSBの話でもするか?
valgrindでのメモリリークチェックについてなんだけど、 valgrind --leak-check=yes ./indexer でやると1blocks 8bytesのstill reachableとか出てたので valgrind --leak-check=yes --show-reachable=yes -v ./indexer として実行したところ、メッセージが大量に出てきたんだけど、とりあえず No malloc'd blocks -- no leaks are possible. という行があったら問題無しと見てよい?
ところでみんな何作ってるんだ?
35 :
login:Penguin :2005/07/15(金) 10:43:45 ID:r+pZSuw6
kmallocって非プリエンプティブなの?
モードによって変わったような気がするが。 いつもGFP_ATOMICしか使わんので忘れた。
37 :
login:Penguin :2005/07/16(土) 16:07:15 ID:YgyQE1T3
>>36 アトミックとカーネルってなにがどう違うんだっけ?
38 :
38 :2005/07/16(土) 23:47:35 ID:iwY4tsZJ
プログラミングをしていて、分からない点があるんですけど、 どなたか分かる人はいますか〜〜??☆ お願いします(><)
40 :
40 :2005/07/16(土) 23:58:35 ID:iwY4tsZJ
どうしてもわからないプログラムがあって><
>>40 私も同様の状態で悩んでいます。
もし解決されましたら、解決方法等書き込んでいただけると助かります。
42 :
login:Penguin :2005/07/17(日) 16:39:06 ID:q+4CFsL5
nasmの良い参考書ないでしょうか?
44 :
_ :2005/07/18(月) 23:50:12 ID:5+oTT0Qf
書籍では「Linuxプログラミング」 SOFTBANKがお薦めです。一通り学べます。
45 :
_ :2005/07/18(月) 23:50:54 ID:5+oTT0Qf
あ、nasmの書籍ではないです。流れ見てなかった..orz
LinuxでCプログラミングの情報は、書籍やネットにもたくさんあるが、 LinuxとC++だと初心者用の情報がすくない。ヘルプ。
>>46 「Linux で C プログラミングの情報」 + 「C++言語の情報」
ではダメなのかしら?
nasmといえばZSNESだろ、これのためにあるアセンブラじゃないの? LinuxでならGAS使えば?
49 :
login:Penguin :2005/07/31(日) 00:04:18 ID:0Amwd3lA
UNIXドメインソケットを使ったサンプルプログラムある?
ちょっと借りますね ーーーーーーーーーーーー ねこのえさ サランラップ 麦茶
51 :
login:Penguin :2005/07/31(日) 00:46:47 ID:0Amwd3lA
socket関数でAF_UNIXを指定すればUNIXドメインソケットが出来ますが bind方法がわかりません
お礼を言われる筋子は素敵な筋子だ
54 :
login:Penguin :2005/08/05(金) 00:10:27 ID:6XxyXksp
今のユーザで、selectで待てるソケット数の上限を 調べる方法を教えてください
FD_SETSIZEとか、RLIMIT_NOFILEとか?
>>55 FD_SETSIZEで判明しました。
デフォルトは1024なんすね。
でもなんでtime.hで定義してるんだろ・・・不思議
Visual Basic for Linuxありませんか?
58 :
login:Penguin :2005/08/06(土) 16:56:51 ID:EsGlAU9q
現在進行形の開発者たちはどうやってGUI作ってるの? ボタンの位置とかをピクセル単位で座標をソースに書いてるの?
>58 GladeとかQT Designerとか。
gtkならvboxとかのコンテナを使えば座標指定は特に必要ないよ
61 :
login:Penguin :2005/10/06(木) 18:12:55 ID:ZATs0tPd
まぁ、聞いてくれよ。 daemon プログラムの作成手法を調べようと思いググっていたら、とある海外のサイトに 掲示板形式の 「 教えてくれ 」−「 教えてやる 」 ページが見つかった。 ( 以下、和訳 ) 質問者:どなたか、デーモンのプログラミング方法を教えてください。 回答者:daemon() を呼べ。 俺はもー大爆笑でさ。 いやぁ、どこの国にも、ねらーみたいな人種はいるんだな、と。 このシュールな回答者を、俺は心のなかで絶賛したんだヨ。 ところが、だ。 それに引き続くレスを読み進めると ・・・ 質問者:daemon() は、プラットホーム依存だと理解している。 プラットホームに依存しない方法を求む。 回答者:まず最初に fork() して 親プロセスは exit() して ・・・(以下、略) あれっ? daemon() ってネタじゃねーの? ホントに有るの? で、linux.or.jp 行って調べたら、しっかり daemon() が JM に載ってた。 お蔭で、ほんの10分で自作デーモンが出来上がったよ。 いやー、俺すげービックリした。 最近のプログラミングって、つくづく簡単になったな。
fghack
>>61 デーモン化すること自体は、もともとたいした手間でもないけどな。
> 回答者:まず最初に fork() して 親プロセスは exit() して ・・・(以下、略)
の「以下、略」にいろいろ書いてあったんだろうけど、その中で必須なのは
setsid()することだけだろ? カレントディレクトリをルートに変更して(以下略)
までやったほうが行儀いいけどな。
制御端末から切り離さなきゃならないわけでもない、という話もある。
それを言うと、なにもやらなくていい、ということになるがw
64 :
61 :2005/10/07(金) 08:25:10 ID:DGEJCqAt
>>63 いやぁ、俺のデーモンってのは、こうなんだ。
常時稼動させておきたいあるプログラムがあるんだが、これが外部機器の影響で数日に
1度くらいの頻度で落ちる。
そこで、落ちたら自動的に再起動させるデーモンを作ろうと考えた。
( inittab に respawn 付きで記述したコマンドのような動作 )
1) コマンドライン引数として与えられた他のプログラムを、子プロセスとして exec( ) する。
2) 親プロセスは、そのプログラム ( 子プロセス ) の終了を wait( )。
3) wait( ) からリターンしたら ( 子プロセス ) が終了したら、1) に戻る。
っていう単純なもの。 だから、プログラムコードの大部分は、daemon 化する処理に
なるはずだった。
それが、daemon( ) の1行で済んじゃったもんだから、拍子抜けって訳さ。 こんな
「 ネタ 」 としか思えないサブルーチンがあるなんて、思いもよらなかったからな。
>>62 今、調査中だが ・・・ 「 もっと簡単な方法があったつーことか? 」 な悪寒 ・・・
65 :
login:Penguin :2005/10/08(土) 01:19:33 ID:cQUyfIlR
>>64 おいおい。
そんな監視するだけのプログラムをデーモンにするこたねぇだろよ。
cronに任せて毎n分間隔で監視してきゃええじゃねぇかな?
あと、こんな感じでできるような気がする。
1.親プロセスを起動する。
2.親プロセスからforkして、その先で「外部機器の影響で落ちるプログラム」をexecする。
3.親プロセスは、子プロセスのsignalを受け取るようにする。(落ちたら。すかさず2をする。)
4.あとはすること無いと思うので、waitしてる。
nohupでもぇぇじゃないか、ぇぇじゃないか
67 :
login:Penguin :2005/10/08(土) 16:43:26 ID:QksVjeD+
kinuxのディストリ別に、標準コマンドのソースコードが違いますが(ソースの中のヘッダファイルの名前が違ったり) 皆さんのプログラミングされてるOSは何ですか? deb系 ソースが見つけ易い debian ubuntu gnomeデスクトップが整ってる RPM系 redhat9 参考書のプログラム実行環境だったりする fedora centOS 鯖に向いてる感じ BSD系、Soraris、RHELは、
どうなのですかね? 板違いなので除きましたが・・・ RPM系 vine 理系の初学者に向いている。emacsも日本語。
>>61 daemon(3)はBSD 4.4由来のライブラリ関数で、1993年頃からあるよ。
通常終了するはずが無い常駐プログラムの終了を監視して、数秒以内に
再起動したい状況は結構あるよね。折れもほとんど同じようなコンセプトの
もの(Cで100行のプログラム)を作って使ってるよ。daemon化はしてないが、
特に問題にはなってないな。
探したらこんなの出てきた。こんなに高機能なものはいらないけど、自作
したものの保守が面倒なら、既にあるものを使っておくのがいいかも。
http://www.libslack.org/daemon/
daemontools知らない?
Cでファイルの更新時間を変更するにはどうしたらいいでしょうか system("touch hoge"); はちょっとダサいかなと思って
>>72 touchのソースを読もうと思わんのかい?
utime
74 :
login:Penguin :2006/03/25(土) 00:11:00 ID:yDjJAEUK
gentoo amd64(glibc2.4)でinoftyを使おうと思って、テストプログラムをコンパイルしたら、 /tmp/cc8EI4vn.o: In function `main': test2.c:(.text+0x5): warning: warning: inotify_init is not implemented and will always fail と警告が出ます。そして、確かに失敗します。 gaminのソース見たら、自分でsyscall使ってinotify関係を呼び出していました。 このやり方は、正しいやり方なのか、現状の抜け道みたいな物なのでしょうか?
75 :
74 :2006/03/25(土) 20:42:13 ID:yDjJAEUK
glibcをコンパイルするときに参照するカーネルのヘッダを新しくしたら 使えるようになりました。
76 :
login:Penguin :2006/03/32(土) 22:30:19 ID:S101QXQ7
ハードクロックをinb,outb使って読むデーモンを作るんだが、 なんでhwclock(1)が繰り返し読み出しを行っているか判らな い。 知ってる人いますか?
読んでいる間に時刻変わったら悲惨な事になるべ。
78 :
login:Penguin :2006/04/29(土) 10:55:01 ID:VLPUOXfX
FUSE ようのプログラムを作成しているのですがちょっと詰まっています。 プログラム側に独自の引数を渡すには普通どうやるんでしょうか。 FUSE 用プログラムに渡された引数は、FUSE のライブラリがパースするように なっているので、独自の引数をつけると fuse: invalid argument と表示されてしまいます。 どなたかアドバイスお願いします.
CentOS 4.3でプログラミングを勉強し始めたんですが、XWindowsのコンパイルがうまくいきません。 単純に %g++ -lX11 ではだめなんでしょうか? 手元の本には、こうするということ以上に何も書いていないですし、ググってもわからなかったのでどなたかお助けください。お願いします
?? わけわかめ。 エラーさらせ。
リンクするライブラリを書く位置には意味があるよ。
82 :
login:Penguin :2006/09/07(木) 13:46:38 ID:Ps6xV3hc
usleep(1)で実際に寝てた時間を計測したいんだけど なんか簡単でそこそこ精度のいい法王ある?
環境依存でいいならRTC
x86ならTSC見ればいいんでないかい。
環境非依存なら普通にgettimeofday TSCは #include <asm/msr.h> rdtsc rdtscl rdtscll あたり
86 :
login:Penguin :2006/11/26(日) 04:21:53 ID:2cZaftoe
ルート権限で突っ走るプログラムを書いてるんだけど、 一般ユーザが投げるシグナル(なんでもいい)を受けたいのに Operation not permitted って出て投げてもらうことができません。 どうしたらいいでしょうか
一般ユーザが実行すると、実効ユーザをrootにしてシグナルを送るプログラムを書く
88 :
login:Penguin :2006/12/08(金) 00:30:08 ID:c3V3Q9m7
たとえばライブラリ hoge1.a と hoge2.a をリンクして hoge3.a を作る方法を教えて。
89 :
login:Penguin :2006/12/09(土) 01:47:55 ID:7wC+QgEB
C/C++での2重起動防止について教えてください
どういう条件での話だか分からんが。 うっかりミス防止ってことなら、flock()でも使えばいいんでねえの?
91 :
89 :2006/12/09(土) 02:52:03 ID:7wC+QgEB
exeとかの2重起動防止だったんだけど。 flock()でいいんかな。よく知らないのでわかりません。 open()使うんだろうけど、 これって実行プログラム内でそのプログラムのファイルディスクリプタって得られるものなのかね
92 :
login:Penguin :2006/12/09(土) 03:24:05 ID:vHGg2QAV
適当なファイルでいいじゃん
ロックファイル使うとかプロセス名から判断するとか、あるいはDBUS使うとか。 ロックファイル使うやり方が一番簡単。後の二つは書いといてなんだが よく知らんので、もしかしたら出来ないかもしれない。 実行ファイルそのものをflock()はやったことないな。 後、ディスクリプタはプロセスごとに持ってるものだし、 実行ファイルそのもののディスクリプタを得るにはargv[0]からopen()するしかないと思う。
94 :
89 :2006/12/09(土) 03:32:38 ID:7wC+QgEB
おまえ天才
95 :
89 :2006/12/09(土) 03:34:06 ID:7wC+QgEB
てきとうなファイルでやればいいとは気づかなかったよ
そう、適当なファイルでやる。 シグナルを送る際の便宜のために、自分のPIDを書いた hoge.pid みたいな ファイルを作ることが良くあるが、そいつにロックかけるというのがありがち。
97 :
89 :2006/12/09(土) 23:28:20 ID:ct3MaVHM
ロックファイルを使う方法はなんとなくわかったから、実行ファイルにflock()を実験してみた。 そしたら実行ファイル自体にflock()はできるみたい。 実際、実行ファイルをflock()していいのか分からないけど、 下のプログラムで2重起動防止は成功した。 int main(int argc, char *argv[]){ int fd = open(argv[0], O_RDONLY); if(fd == -1){ return 0; } if(flock(fd, LOCK_EX | LOCK_NB) == -1){ return 0; } //処理 flock(fd, LOCK_UN); close(fd); return 0; } だめな部分あったら教えてください。
-1が帰ってくるところってみんな == -1 でやってる? オレはなぜかしらんが < 0 でやることが多い。 いつからそうなったのか自分でもわからないが
-1以外に負数がエラー番号として使われる関数がしばしばあるみたいだから、 全てのエラーに対して特定の処理する場合は<を使って、 -1のエラーのみ考慮する場合は==を使ってるよ。 と負数で-1以外のエラーを吐く関数を知らない俺がマジレス。
>>97 実行ファイルが複数ある場合はその数だけ実行できるが
それで目的に合っているなら問題ない。
101 :
login:Penguin :2006/12/20(水) 09:38:29 ID:wUoDfaxG
sjisやらeucやらのマルチバイト系から UTF-8やらUTF-16に対応させたいんだけど、linuxって windowsみたいな、便利なAPIは用意されてるの? やっぱり多言語化じゃ、windowsの圧勝かな、かな?
釣りなのか無知をひけらかしたいのかどっちだ?
103 :
login:Penguin :2006/12/21(木) 15:09:32 ID:r43DQSG8
>>102 負け惜しみかい?
あるならちゃんと教えてみてくれないかな、かな?
キモイ無知だ
iconv ってのをご存知ないかね?
>>101 最近のWindowsってシステムフォントやヘルプを他言語で表示できるの?
ようこそ画面もドイツ語、韓国語、中国語、アラビア文字などで表示できちゃうわけ?
>>103 べつに勝ちとかじゃないだろすきなほうを使えばいいんだから
>>103 うわ、キモ。
厨房は受験勉強でもしててくれ
code::blocks 使ってる人いる? 実行でコマンドラインで引数渡せん。
CentOS 4.4 x86_64で以下のようなプログラムを走らせると、 errno=22(Invalid argument) のエラーになってしまいます。 /dev/hda8(/home) でQuotaが設定されててオンになってることは確認済みです。 UID 500のユーザも存在します。 repquota -a や edquota admin も問題ありません。 どなたか原因分かりませんか? #include <errno.h> #include <sys/quota.h> int main( void ) { int result; struct dqblk quotaStatus; result = quotactl( QCMD(Q_GETQUOTA,USRQUOTA), "/dev/hda8", 500, (caddr_t)"aStatus ); printf("result: %d, errno: %d: %s¥n", result, errno, strerror(errno)); return 0; }
111 :
110 :2007/01/22(月) 07:32:07 ID:rYp+9CMw
quotaの設定は以下のような手順で行いました。 /etc/fstab の /home のところに defaults,noatime,usrquota,grpquota を記述 mount -o remount /home touch /home/aquota.user touch /home/aquota.group chmod 600 /home/aquota.* quotacheck -mugv /home quotaon -auvg
112 :
110 :2007/01/23(火) 06:07:17 ID:4TCpYdze
自己解決しました。 #include <sys/quota.h> の前に #define _LINUX_QUOTA_VERSION 2 を付けてやればOKでした。
ほとんどはリナックスに関係無いね(w
114 :
login:Penguin :2007/04/01(日) 23:09:56 ID:u9bTw6ly
C言語で、ファイルが存在するかどうか確認したいんだけど openはしたくない。 どうしたらいいかな stat使うしかない?
readdir(3)でもaccess(2)でもstat(2)でもご自由に。
kernel2.6でopenにO_DIRECTを付けてwriteした場合 端数の面倒は自分でみないといけないと思うのですが、一般的にどのように処理すべきなんでしょうか。 まず、自前でバッファを実装するのは当然として、 ・端数が生じてまだデータが到着する場合 ・端数が生じてデータが到着しない場合(close()する) 他のケースは、倍数に合わせて書き込めばいいので問題ないのですが上記2つの場合 どうすればいいんでしょうか?
>>116 自分の都合のいいように書く。
・端数が生じてまだデータが到着する場合
1) とりあえず1セクタ分書く。その後、到着した時点でもう一度書く。
最初に書き込む際の端数は、どうせすぐに上書きするので気にしない。
2) 到着するのを待ってから1セクタ分書く。
・端数が生じてデータが到着しない場合(close()する)
仕方がないので1セクタ分書く。端数の部分は
1)破壊してはいけないのであれば、読んでから変更部分のに更新して上書きする。
2)破壊していいのなら、気にしないでかく。気になるなら0で埋めておく。
>>117 殿
・端数が生じてまだデータが到着する場合
まぁバッファにキャッシュでもして貯めておけばOKってことで解決しました。
・端数が生じてデータが到着しない場合(close()する)
破壊したくないので端数は気にしないで書くことでいいのですが、O_DIRECTの仕様がいまいち判ってないのですが、端数分中途半端に書き出すとセグ落ちしますよね?必ず埋めて書くしかないのでしょうか?
組み込みLinuxで開発やってます。 VSync割り込みごとにアプリで処理したいのですが、 アプリ処理中にHDDとかに長時間アクセス行くと、 IDEドライバが動きまくってアプリの処理が抜けます。 H/Wは性能アップできないのですが、なんか いい方法ないでしょうか?
>>120 カーネルは2.4です。色々あって2.6にはできないッス。
RT Linuxを使うわけにもいかず、八方塞です…。
プロプラは相当のコストがかかることが分かって勉強になっただろ?
どういうときにfloatよりdoubleの方が速くなるの?
CPUは? 今時のx86なら普通に計算すればそうなる。
>>123 最近のCPUではバウンダリの関係で、そうなる。
が、SSEで最適化されてるとfloat4つでパックされるので必ずしもdoubleの方がいいとも言いきれん。
126 :
login:Penguin :2007/05/21(月) 02:10:20 ID:/b/2zTxh
誘導ども。そちらにいってみます.
すいません、C板からきますた。 Linux上のgccで書いているのですが、 たとえばpid=1234のプロセスがまだ生きているかどうかを調べるには どうしたらいいのでしょうか? kill(pid, SIGALRM)とかやって応答を見るのは一般的にありなのでしょうか?
Linux限定でよければ stat("/proc/1234", &foo) とか。
もう解決したようだが >kill(pid, SIGALRM)とかやって応答を見る はヤバ過ぎるぞ。アラームの時計はプロセスにつき1個しか持ってないんだから。
>>129 killで調べるときは kill(pid, 0) とする
134 :
login:Penguin :2007/05/29(火) 08:41:32 ID:5ePsYsOB
プログラミング板でLinuxのAPIが調べられるサイトがあったら 教えてくださいと書き込んだら笑われてしまった。なんで?
ど素人丸出しで尚且つ意味不明だからじゃないだろうか。 例えば「プログラミングの方法を教えてください」くらいに曖昧で、 ドライバからWebアプリまでどんなことをしたいのか質問した本人にも 分からないような状態に似ている、といえば分かってもらえるかな。 もう少し状況を補足してどんなことを望んでいるのか具体的に 質問すべきだろうな。
136 :
login:Penguin :2007/05/29(火) 11:42:54 ID:6pYOgoyb
「LinuxのAPI」を杓子定規に解釈すれば
>>136 なんだろうが、
質問者が望んでるのは多分違うだろうと思うよなw
サン(゚∀゚)キュー!!
マン○オープン
1プロセスあたりのスレッドの最大数が知りたかったため、 getconf -a を実行して、PTHREAD_THREADS_MAXの値を知ろうとしました。 しかし、そこだけブランクで表示されています。どうしたらいいのでしょうか? OSはCentOS 5.0です。
144 :
login:Penguin :2007/06/15(金) 23:19:32 ID:Sf3Vnle8
146 :
login:Penguin :2007/07/31(火) 10:32:30 ID:k8ila0Kz
Cでプログラム組んでて、設定ファイルが必要になったとき FUGA="Flandre" HUHUN=1 みたいな形式の設定ファイルを読み込みたいときって なにか便利なライブラリがあるんでしょうか それとも毎回構文解析から作ってる?
147 :
login:Penguin :2007/07/31(火) 10:37:54 ID:FuyEnGvx
それのどこに構文解析が必要なのかわからない。
p = strchr(line,'='); strncpy(var,line,p - line); strcpy(val,p + 1);
前後に付いてくるであろう空白くらいは 取っぱらった方がいいのではないかと。
>>149 普段はperlでやるもんで。サーセン
# でも、ほんとにベタな設定ファイルをパースするライブラリってあってもいい気がするけれど。
Tclとか。 PerlのIniFilesみたいなのがほしいですな。
GLIBにGKeyFileってのがあるよ。
>>146 >>148 姫様、犬でも使えるstrtok()がふさわしいと思いますわ。
manに何と書いてあっても、気にしなければすむことですもの。
>>153 結局前後のスペースをトリムしたりとかせんとあかんです。
そこは=とスペースとタブと改行を全部まとめて区切り文字に指定すればよろしいのですわ。
>150 freshmeatでparserで検索したら結構あったな。libConfuseとかlibmbaとか良いんじゃないか?
でも、 こういうのって例えば、 FuGa = """"""""ふがfuga" HuHun=2 <- 文字列の形式を守ろうとしない & 1行に2つの設定をしようとする リザたんかわいいよハァハァ sa="わわわわ" <- 勝手に関係ない文字列を設定の前に挿入してくる とかイレギュラーなことしまくってくる人がいるからねー。 そういう人は無視していいのか、それともきちんと Fuga = "ふがfuga" Huhun = 2 sa = "わわわわ" っていうふうに 読むようにしてあげるべきなのか迷うよね。 きちんと読むようにしてあげようとすると結構大変だしね。
マルチポストになるけどこっちでもきくよ linuxでmath.h(の中にあるはず)のtanhってどうやって使うの? なんか今/usr/include/math.hの中見たらtanhとか入ってないっぽいんだが…
find /usr/include -name '*.h' -print0 | xargs -0 grep -l tanh
「出てきたファイルを#includeすればいいのか」と勘違いしそうなので補足 しておくが、出てきたファイルはmath.hから間接的に#includeされているの で、math.hだけでOK。
$ find /usr/include -name '*.h' -print0 | xargs -0 grep -l tanh /usr/include/bits/cmathcalls.h /usr/include/bits/mathcalls.h /usr/include/bits/mathinline.h /usr/include/tgmath.h /usr/include/c++/4.1.2/athlon-redhat-linux/bits/c++config.h /usr/include/c++/4.1.2/bits/valarray_after.h /usr/include/c++/4.1.2/bits/valarray_before.h /usr/include/c++/4.1.2/i386-redhat-linux/bits/c++config.h /usr/include/kde/arts/gsl/gslmath.h /usr/include/slang/slang.h /usr/include/mpfr.h /usr/include/OpenEXR/ImathMath.h わーい、いっぱーい ところがどっこい、tanhの関数はどこにもないのだな…
>>160 …むぅ
#include <math.h>
しても
「tanhなんてシラネーヨ」って文句言われる…
ひょっとしてglibc-2.6.90が悪いのだろうか…
>>161 お前の出した検索結果の中にマクロでちゃんと定義されてるんだが。
マルチな上にgrepもろくにできない馬鹿は死ね。
ひょっとして -lm してないとか。
メンスの奴とは別人だが マルチに対する扱いなんてそんなんで十分だろ 相手してやってるだけまだいい
句読点ってサービスでしょ
LinuxでELFのリバースエンジニアリングって objdumpでシコシコasm読み以外方法はなし?
>>172 ある脱走兵が作ったコードをよく嘘を付く人間が
保守してるのですが、その人が作った.oファイルは
報告書と実際に作った者が違ったりして困ってる
のですよ。
だからできれば最高ソースコードに近いモノ
最低でもコンパイルしたときに使った.o,.soの履歴が
わかるものが欲しいのです。
>>173 コンパイルに使う.o .soって?
リンクのことだとしたら.soは実行時にリンクするから関係なくない?
(.soならlddで)
つーか、ソースで提出させれば?
デバイスを6個監視する場合 select、epoll、poll どれが一番CPUとSyscallの消費が少ないのでしょうか? どうにもepollってデバイス20個ぐらいないと重いような気がするのですが どうなんでしょうか?
>>175 selectの中の人はポールさんだから大丈夫
あうー?なんかepollの方がselectよりCPU食うんだけど なんで?
epollって1000とか2000とかのfdを管理するのに 使うんじゃないのか?
ちょっと質問なのですが Kernel2.4でNPT使って時刻同期します。 その結果をなるべく正確にSystemで扱おうとするなら 使うべきシステムコール(API)どれに限定されるのでしょうか? 要件は限りなく100ms、500ms、1000msを正確に扱いと思ってます。 ある処理Aを実行(timestamp添付)---->timestampをみて処理Bを実行 って感じでしたいのですが
>>179 gettimeofday見てselectで寝ろ
>>180 gettimeofdayで見てふて寝すると
他のプロセスに影響受けないのでしょうか?
プロセスが起動した後、プロセスの経過時間は
他のプロセスに影響を受けずにHzに依存した
値が必ず取れるような事を聞いたのですが
ソースがどこにあるのか不明確でいまいち自身が持てません。
>>181 どっちに転んだってユーザランドじゃ大した精度出ないんだから
10ms20msは我慢しろ
usleepだってHzずれるんだからビジーるなら10ms以下にしろ
あのーちょっと質問したいのですが pthread_mutexがガチロックしたのか スルーしたのか回数計測したいときみんなどうしてるのですか?
SMPに影響受けないでrdtsc を 有効に利用するにはどうすればいいのでつか?
SMPを切る・・・ またはどっちのCPUか見る
じゃあCPUを指定してみるしかないな つーか、今どきrdtscなんてつかわねーよ
>>187 じゃあ何使うの?kernel2.4.24なんだけど
何使えばいいの?
gettimeofdayとか馬鹿なこといわんでね
半端無いほど重いから
1秒間に処理56万回走るからそんなもん
呼べないからさ
>>188 rdpmcでも見とけ
このくらい自分で考えるか調べるくらいやってみせろよ
-finstrument-functionsで関数のアドレス収集してるのですが 親プロセスがforkしてできた子プロセスが利用する関数アドレスも 収集するにはどう工夫すればいいの?
そういうのはgccのオプションだけじゃむり。 oprofileでも使うのがよろし。
FD_SETSIZEを変更したいんだけど カーネルに手をつけたくない
>>192 変更しなきゃならない用途ならepoll使えよ。
まあそういうなよ プログラム直すの面倒ジャン ちょっとの変更ですむならそれに越したこたないさ
epollでselectもどき作ればいいじゃん
196 :
login:Penguin :2007/09/07(金) 00:37:18 ID:KH51Gp9U
wait(2)が戻した結果のintの変数をpretty printしてくれる関数ってありましたっけ
e1000のモジュールのスタックに 直接パケットデータ突っ込むにはどうすればいいの? そんな野蛮な変態プレイはそもそも不可能?
e1000のドライバー改造すれば? メリットないと思うけど。
>>199 SysCall 減らしたいんですよね
あと300msec速くしたいんだけどもう
詰めるところなくて
めちゃくちゃ減らす必要があるなそれ 300msなんてあったら昇龍拳の無敵時間だって切れちまうぞ
要求設計から間違っている。
syscall減らしたくらいじゃ300msecも減らないって。
300msって今が何msで、何を300ms短くしたいんだ?
206 :
login:Penguin :2007/09/12(水) 00:28:38 ID:oZCXyX9R
FIFOというか、なんかプロセス間でデータを渡せるキューを作りたいんだけど キューになんかデータが残った状態でPCの電源切って再起動して またプログラム動かしたら続きから読み出せるようにしたりしたいので 共有メモリやらメッセージキューやらではない方法で何かいい手を探し中。 なんか良いアイデア無い? 今はSQLiteとか使ってDBをキュー代わりにしてるんだけどなんか 大げさな気がするし、こんな使い方を世間が許すのかちょっと疑問。
queue daemonでggr LPRngとか?MTA系全般?でもSQLiteより大げさか。 ホントに出し入れだけでいいならmaildirフォルダで処理してもいいかな。 O_SYNC+mmapでファイルにマップしたオンメモリキューの操作でもいけるかな。
queue daemonでググったら
>>207 がひっかかった
なんだグーグルのこの異常な速さ
それはさておき、大げさなのが嫌なのは
少しだけ速さを要求されるからなのです
といってもまー大した問題じゃないか
>>208 書き忘れてたけど、BDBのqueueでいいのかも
MQ
211 :
206 :2007/09/12(水) 13:15:50 ID:u4sMCnUI
10GbpsのNICを2枚装備している マシンがあるのですが eth0から毎秒500MB/secでデータ受けて そのデータをeth1に転送してます。 recvとsendで処理してるのですが すぐ8CPUとも80%前後まで使用してしまいます。 もっと言い方法ないですかね?
>>212 /proc/sys/net/ipv4/tcp_{rw}mem
を調整
215 :
login:Penguin :2007/09/13(木) 14:36:42 ID:CQWMmnll
コマンドラインのkillallと同じようなものをCで実装したいとき なんかかっこういい方法ある?
killallのソース見たら?
term シグナルを送りまくれ。 ソースをそのままパクレ。
>>210 MQって何?(というかどれ?Javaなのしかかからん・・・)
>>214 その辺はいじってるけどそんなんじゃ焼け石に水だったw
結局さどうすりゃいいのかね
eth0からeth1にパケットデータ中継したいだけだからさ
zero copyできるような方法ないのかな?
sendfileは入力デバイスがファイルmmapじゃないとダメだったし
spliceも入力もだめだった。
あと方法ないかな?
>>219 spliceはsendfileを置き換えて任意のディスクプリタがOKになって
いるはずなんだか。カーネルのバージョンはいくつ?
>219 あとはcold.sysで聞いてみるとか。
>>220 Linux Ubuntu 2.6.20-16-generic #2 SMP Thu Jun 7
20:19:32 UTC 2007 i686 GNU/Linux
ですけど対応しているから問題ないですよね?
eth0 = socket()
eth1 = socket();
後はspliceでいいのですよね?
splice(eth0, NULL, eth1, NULL, size ,SPLICE_F_MORE | SPLICE_F_MOVE
>>221 えーとそれどこでしたっけ?
>>220 man 2 splice だと
splice() moves data between two file descriptors...
...where one of the descriptors must refer to a pipe
とかあって、この "pipe" って何? pipe(2) な pipe ?と微妙に
どんな意味の制約なのか読めてないんだけど、知ってたら教えてくらはい。
あ。漏れは元質問者とは別の中の人です。
>>222 ,223
間にpipeはさむ事で組み合わせの爆発を防ぐの。
splice linux 使い方、でググれよ。
225 :
login:Penguin :2007/09/15(土) 13:00:59 ID:WW33Uygn
comp.os.linux.development.sys ?
cold.sysで聞いたら japは2chで聞けよって笑われたんだけど どうしたらいいのw?
229 :
login:Penguin :2007/09/15(土) 20:17:38 ID:WW33Uygn
230 :
login:Penguin :2007/09/15(土) 20:33:58 ID:26HMq0m6
>>227 c.o.lは2chと同じだからな。
だいたいLinux自体煽りから生まれた代物だし。
Linuxでまともに質問できる場所なんて未来永劫現れないよ。
金払っても無理だ。
レッドハットサポートつかえばよく分かるぞ。
レッドハットじゃあ話にならんだろ。 IBMなんかのほうがまだマシ。あれもお寒いものだが。 バカ高い金を払ってもいいなら、VAはそれなりの回答をくれた。 といってもずいぶん前の話だから、最近はどうだか知らないけど。 2、3年前から安いサービスをやってるけど、あの値段じゃあたいした回答は貰えないだろうなと思った。
232 :
login:Penguin :2007/09/15(土) 23:20:27 ID:26HMq0m6
それを考えるとやはりマイクロソフトが相当お買い得なんだよな。 開発元直結っていう強みなんだろな。
確かにredhatに電話した後msに電話するとあまりの対応の違いに MS信者になりかけてしまうよな ならないけど
まじな話ぐぐるの人間と酒飲みながら 話たほうが勉強なるってところで RもVも終わってる。
235 :
login:Penguin :2007/09/16(日) 00:17:06 ID:0jBsOxD6
MSいいか?ちょっとでも込み入った質問は全部USに転送されて時間かかるし、
翻訳ミスだかUSのエンジニアもたいしたことないんだか知らんが、まだ
回答に満足できたケースがないんだが。スレ違い+チラシの裏ですまん。
>>231 VAって何をきくのにいくらくらいかかるの?
その、まぁまぁまともな高い方とやらで。
236 :
login:Penguin :2007/09/16(日) 00:19:38 ID:xdnEBkyg
> 何をきくのにいくらくらいかかるの? 馬鹿発見。
>236 理由は?
VA200万ぐらいからなかったっけ?
>>237 理由は?って・・・
理由がわからないのお前だけだと思うぞw
だめだこいつ。 Linuxの質問を業者にするという感覚が不思議なんだよね。俺は必要なら当然自分で調べる。 自分で調べる能力の欠如した低能は最大でいくら位お布施してくれるのかなと思ってさ。
>>240 だからこそじゃないか。
漁場は大事にしなきゃだめだぜ
>>240 お前は食べるものは全部自分で作るのか
魚は稚魚から育て、コメは稲から育て
その感覚がまずわからんわ
> お前は食べるものは全部自分で作るのか > 魚は稚魚から育て、コメは稲から育て そうだよ。オープンソース関連についてはね。 お仕事頑張ってね、SEさん☆
金払ってサポート受けてると、サポート外になるからって、回避策とかみつけてもやらせてくれないし、 やる気がなくなるよ。 と、書いてみたが、プログラミングのサポートなんか受けたことないんだった。
>>243 それではまず半導体プロセスについて語ってもらおうか。
原石はどこから切り出しているんだ?
246 :
login:Penguin :2007/09/16(日) 14:19:01 ID:uzxa+jYq
ヲタの趣味なら納期もコストも関係ないけどなぁ。 オープンソースで一番困るのは、不可解な動作があったとして それが仕様に該当するのかそれともバグと考えていいのか 誰も判断できないことなんだよな。
>>247 それはいくらなんでもないだろ。
アセンブラよまねーとならねぇなんてことはない。
結局責任とりたくないだけだろうな
APIもソースも見れてそれはないよね?
あぁ、これが釣りってやつか。 わかんなかったわ。
オープンソースなら、ソースにある通りだろ。 まあ、コンパイラとかのバグもあるけど。
252 :
login:Penguin :2007/09/16(日) 20:12:51 ID:0c6+c6lv
これがLinuxクオリティー。 そしてこんなやつらがトップクラスのLinuxエンジニアらしい。
253 :
login:Penguin :2007/09/16(日) 20:21:50 ID:0c6+c6lv
> オープンソースなら、ソースにある通りだろ。 > まあ、コンパイラとかのバグもあるけど。 何度見てもすげーな。
だって、ドキュメントが当てにならないプロジェクト多いじゃん。 あと、残念ながら、全然Linuxエンジニアじゃないから。 Linuxは使うだけ。
>>254 まぁエンジニアじゃないなら仕方ないか
もしPGで「ソースが仕様書」なんて言ってたら
若狭湾に浮かべてたとこだ
考えるな、感じるんだ!!
>>255 PGなんて略語を使ってる時点でお里が知れるぞ。
まぁあと、きみの論法だとgoogleの連中はみんな若狭湾だな。
「仕様書」が存在するかどうかに関わらず、ソースは実装であって仕様ではないだろ。 ソースが仕様なら、バグなんてものはあり得ないよな。仕様通りで、正しいものなんだから。
260 :
login:Penguin :2007/09/17(月) 01:25:23 ID:ifKoWn9t
いや、オープンソースってそういうものらしいぞ。 あれだけ偉そうな書き込みかましてるくらいだから、相当名のある Linuxエンジニアなんだろ。 そいつらがいうんだから間違いないだろw 普通はサポートの返答の一番最初に仕様かバグかはっきりさせてくれるもんだよな。 はっきりしない場合は、丁寧なお詫びの言葉を述べてくるだろ。 俺はそういうものだと思ってたし、それを期待してるんだよ。
261 :
login:Penguin :2007/09/17(月) 07:55:20 ID:s0twSYHE
ps -eLf とすると、スレッドのID (LWP) を画面表示できますが、これを取得するシステムコールって あるんでしょうか? psは/procを読んでるだけ? pthread_self()で取れるulong値とは別物です。
>>261 どうしてpsのソースを見るという発想がないのか。
センスないよ。プログラマやめたら?
トラぶったときやること。
1. ドキュメントみる
2. 本家が出してる情報を探す。Webページがあるなら、news/update, errata, FAQとか。
3. 本家のBTS, ML/Forumがあれば、そこを見る
4. Web検索
-------
5. strace/ltrace等で追ってみる
6. ソースみる
7. デバッガ使って深追い(発生している現象の解析、一般化)
BTSすら見ないひとも結構居るね。
ひたすら現象だけ追ったり(パケットキャプチャとかね)して、時間がもったいない。
おかしくなってるのがわかったら、BTSとかMLで、事例がないか調べてみればいいのに。
>>260 サポートが受けられる範囲で、大口ならそういうサポートが受けられるのかな?
構築とかまで全部任せてるとか。
264 :
login:Penguin :2007/09/17(月) 09:45:38 ID:s0twSYHE
>>262 スレの流れ上そういうムードなのかもしれんが、煽るなよ。
ちょうどよい書き込みがあった(
>>261 )ばかりだが書くが、もちろんソースも見ている。
strace ps -L の結果から(下記)、/proc/pid/task/ のエントリ数を見て自分の抱えてるスレッド
のIDを得てることにほぼ間違いないと思いつつ、ソースを確認しているところなわけね。
open("/proc/18220/task", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 6
fstat64(6, {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
fcntl64(6, F_SETFD, FD_CLOEXEC) = 0
getdents(6, /* 5 entries */, 1024) = 92
stat64("/proc/18220/task/18220", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/18220/task/18220/stat", O_RDONLY) = 7
ここで聞いたのは、思わぬ勘違いの可能性を少しでも減らすため。あと、psコマンドが非効率
なことやってる可能性もあるから、最新のシステムコールを知っている人間からの回答があっ
たら嬉しいな、とか。そのへん。
眠いようだ。typo訂正。
正: ちょうどよい書き込みがあった(
>>263 )ばかりだから書くが
266 :
login:Penguin :2007/09/17(月) 13:41:16 ID:2vZ6I9C9
>>263 Linuxサポートは、ぐぐったらこんなページがありましたけど
なんて普通に述べられたりして結構ビビるよね。
>>266 それが自分のページだったりしたら笑えるな。調べ物をしていると、日本語での情報が自分のblogしか
ないってことがよくあるので。
269 :
login:Penguin :2007/09/17(月) 18:23:28 ID:IoEVGx7E
g++-4.1.2, libstdc++-4.1.2で、std::fostreamのインスタンスから、対応するfile descriptorを得るにはどうしたらよいでしょうか?
270 :
login:Penguin :2007/09/17(月) 18:52:45 ID:warckn1B
>>267 それで金とれるんだから、オープンソースっておいしいよな。
ドライバに依存しないで sk_buffにアクセスするにはどうすればいいの?
/proc/kcore
root権限で動いてるんだけど、hogeというユーザからのsignalは受け付けたい というときには何をすればいいんだっけ
raw socketから上がってくるデータに タイムスタンプ付けたい場合ってLinuxの場合 どうするの getなんちゃら禁止だとどうゆうことができそうなの?
>>275 それじゃhogeというユーザじゃなくなっちゃうじゃん
278 :
login:Penguin :2007/09/19(水) 22:22:40 ID:d9OxuuhF
>>278 すばらしい。。お礼にあとでおいしそうなラーメン画像うpするわ。
280 :
login:Penguin :2007/09/19(水) 23:17:27 ID:d9OxuuhF
>279 まぁ死ぬほど使いにくい仕組みだけどな。POSIXのケイパビリティは。 SELinux+SEEditも試しとけ。
futex使い方おせーて
282 :
login:Penguin :2007/09/22(土) 04:51:08 ID:rfMprt9C
drepperタンのドキュソメントでも読んどけ。
どこにあるの?
284 :
login:Penguin :2007/09/22(土) 06:51:15 ID:rfMprt9C
おいkernel2.4でfutexつかえねーぞ
288 :
login:Penguin :2007/09/22(土) 16:53:44 ID:F0YS4UKz
A,B,C というプログラムがいて、それぞれが好きなタイミングで あるキューにデータを積む それをDというプログラムが好きなタイミングで取り出して処理する というプログラムを書きたいんだけど、この場合 キューにどんな仕掛けを使うのが一般的かな
乱数?
290 :
288 :2007/09/22(土) 17:01:08 ID:F0YS4UKz
好きなタイミング ってのは任意のタイミングってことで。 メールスロット?みたいな機能を作ろうと思ってます。
291 :
login:Penguin :2007/09/22(土) 17:05:49 ID:rfMprt9C
mmap?
293 :
288 :2007/09/22(土) 17:35:59 ID:F0YS4UKz
>>291 ありがとう!
メッセージキューって、多対1は出来ないと思い込んでたよ。
ちょっとこれで1時間くらい組んでみる。
295 :
288 :2007/09/22(土) 17:46:05 ID:F0YS4UKz
>>294 やりとりが200ms以上遅延しなければ問題ないです。
あんまりにも遅ければキューのルーチンだけ
別の方法に切り替えるまでです。
>294 遅いって、何とくらべて、どんな処理が、どの程度遅い? @Linux 2.6 w/ futex
マチクタビレタ〜 ☆ チンチン〃 Λ_Λ / ̄ ̄ ̄ ̄ ヽ ___\(\・∀・) < おいしそうなラーメン画像マダー? マチクタビレタ〜 \_/⊂ ⊂_ ) \____ / ̄ ̄ ̄ ̄ ̄ ̄ /| | ̄ ̄ ̄ ̄ ̄ ̄ ̄| | マチクタビレタ〜
かなしい気分になりました。
最近知ったシステムコールと関数: pread(2), posix_fadvise(3), dirfd(3) 活用法を勉強中のシステムコール: madvise(2) 以上、俺のチラシの裏として活用させてもらいました。
302 :
login:Penguin :2007/09/23(日) 14:29:30 ID:2H3sPwph
メッセージキュー(mqueue)を使うプログラムを書いて、コンパイルして リンクしたらmq_openとかが無いっつわれた。 これって、-lなんとかのライブラリを指定しないと駄目なの?
303 :
login:Penguin :2007/09/23(日) 14:43:48 ID:tBRgGEFT
% for i in /lib/lib*.so /usr/lib/lib*.so ; do (nm -D $i | grep " T mq_open" 2>&1 > /dev/null) && echo $i ; done /lib/librt-2.5.so /usr/lib/librt.so ということで -lrt したら?
マニュアル読め
305 :
login:Penguin :2007/09/23(日) 14:54:32 ID:tBRgGEFT
>>304 mq_open(3)には記載がない悪寒
306 :
login:Penguin :2007/09/23(日) 14:56:54 ID:tBRgGEFT
mq_overview(7)に書いてあるようだねぇ。知るかよw
すごーい。
gentoo のマニュアルには mq_* 全部に書いてあった
310 :
login:Penguin :2007/09/23(日) 15:15:42 ID:tBRgGEFT
mq_のマニュアルってglibcの一部だよね? gentooでは自前で製作しているということなのかな
Gentooは普通にLinux Programmer's Manualだけど、 2006-02-25だと書いてあるみたい。
312 :
302 :2007/09/23(日) 17:30:26 ID:2H3sPwph
>>303 ありがとう!
お礼にあとでおいしそうなカツ丼の画像をうpするよ
>>306 それ見てたんだけど見逃してたよ。俺の目は節穴だった。ごめん。
313 :
login:Penguin :2007/09/23(日) 17:33:10 ID:tBRgGEFT
ラーメンは来なかったら、今度は期待してるぜ。
グロ画像にしか見えません。そもそもLinuxプログラミングと関係あるのか
kyってなに? 最近略語が増えてついていくのが大変
Kuuki Yome
空気嫁
読めてません。
324 :
login:Penguin :2007/09/24(月) 16:44:27 ID:/TENigCK
ある特定のライブラリ(libXXX.a)の中でメモリリークが発生していることがわかっているので、 そのライブラリだけBoehm GCのmallocに差し替えたいんですが、そういうことってできまし たっけ?
>>324 libをデバッグシンボル込で作成して
valgrindで調べた方がよくねーか?
そうしたら動作シーケンス解かるから
あとは単体で実行してデバッグすれば
よくね?
そうゆう解決方法は根本的な対処にならないから
やめれ。リークしてるものは修正しろ
>>324 同級生に1人はいた、借りたものを返さないやつだな。
借金沢山ありそうw
>>324 mallocってシステムコールじゃないっしょ。リコンパイルなしでは無理っしょ
330 :
login:Penguin :2007/09/26(水) 01:26:15 ID:yQRyKR94
LD_PRLOAD子欄の?
331 :
login:Penguin :2007/09/26(水) 21:16:50 ID:v+gFFOHB
>>327 LinuxはWindowsと違って多少リークしてても普通に動くよ。
実際、安定しているといわれてるアプリでもリークしてるものが多い。
例えばFirefoxとかGimpとかね。
コマンドの中には最初から解放しない戦略をとってるものもあるし、
多少のリークは修正する必要がない。
実際、有名なアプリでも修正しない戦略をとってるものがあるしね。
ほら吹きOSじゃないんだから、メモリーなんていちいち気にする必要ないんだよ。
また変な釣りが湧いて出たか
バイオワーム未満のまずい餌を みてひさびさに閉口したw
,-´ ~¨"''''‐- ., |` ー- ...,,,___.) |\丶}} !{ |i i| |`ィ,,ヽ {j }、l| ヘミノ /^\ヽ_/^!:|i l_ノ V u _ノ 、リ 人 > ( ●)(●) 何を言っているのか わからねーと思うが /ハノゝ u (__人__) おれも何を言っているのかわからなかった… V" ` ⌒´ノ . | } 常識的に考えて・・・ . ヽ u } ヽ ノ \ / く \ \ | \ \ \ | |ヽ、二⌒)、 \
335 :
login:Penguin :2007/09/26(水) 23:22:54 ID:v+gFFOHB
>>333 バイオワームがまずいんじゃなくて
お前の料理がまずいんだ
素材のせいにスンナボケ
>>330 へー Linux の静的ライブラリは環境変数 LD_PRLOAD で置き換えできるのか〜
教えてくれてありがとう。
337 :
login:Penguin :2007/09/27(木) 02:34:38 ID:VzBoMjAX
>>336 L D _ P R L O A D 子 欄 の ?
Hint:.a
Hint:PRLOAD
338 :
login:Penguin :2007/09/27(木) 08:49:58 ID:hzAH420J
>>336 static linkされたものを置換できるとは誰も言ってない。
勝手に拡大解釈するな。Linkder&Loadersとか、適当な本で勉強汁。
あと、LD_PRELOADな。Eが抜けてる。
Linkder&Loaders じゃなく Linkers&Loaders ごめん。
340 :
login:Penguin :2007/09/27(木) 11:29:56 ID:x6U3NKaN
あ る 特 定 の ラ イ ブ ラ リ ( l i b X X X . a ) の 中 で
341 :
login:Penguin :2007/09/27(木) 13:50:54 ID:iv68VIR1
適 当 な 本 で 勉 強 汁 。
mallocってシステムコールかいな
openipmiの日本語プログラミング マないかな?
345 :
login:Penguin :2007/09/29(土) 23:45:42 ID:KUrKiugz
iptables を使用してトランスペアレントプロキシを作成しようとしています。 ポート10000に届くすべてのあて先IPアドレスを自身宛に書き換えて受け取っています。 その状態で getsockopt()に SO_ORIGINAL_DSTを与えると本来のあて先アドレスがわかるということで試していますが上手くいきません。 ENOPROTOOPT : 指定された層(level)にはこのオプションは存在しない というエラーが返されます。 どのように解決すれば良いかわからず投稿させていただきました。 アドバイスがございましたらよろしくお願いします。 環境 fedoracore6 2.6.18-1.2798.fc6xen gcc 4.1.1 -----------------------------一部抜粋----------------------------------- int sock; socklen_t len; struct sockaddr_in addr0,orig_dst; addr0.sin_family = AF_INET; addr0.sin_port = htons(10000); addr0.sin_addr.s_addr = htonl(INADDR_ANY); sock = socket(AF_INET,SOCK_DGRAM,0); bind(sock,(struct sockaddr *)&addr0,(socklen_t)sizeof(addr0)); len = (socklen_t)sizeof(orig_dst); if(getsockopt(sock,SOL_IP,SO_ORIGINAL_DST,(struct sockaddr *)&orig_dst,(socklen_t *)&len)){ perror("getsockopt"); } -------------------------------------------------------------------------
つ I ホラ、ダイジニツカウンダゾ
(´,∀`)ゴチソウサマ
>>345 SOCK_DGRAMじゃなくてSOCK_STREAMだとどうなんだろう?
350 :
login:Penguin :2007/10/01(月) 14:29:09 ID:WPD1ZzVS
>>349 それかもしれませんね。
試す環境が無くなってしまったので出来ませんが・・・
connectされたソケットじゃないと取れないとか?
どうやって取ってるかわからないから何ともいえないけど・・・。
ありがごうございました。
良回答 10pt
あのーオドオドオド あのーー2socket QuadCore Xeon SNMPカーネル環境下でgettimeofday()すると 時間がびみょうにずれて困るのですが どうすればいいのですか?
>>352 kernelのバージョンとarchは?
kernlは2.4.24と2.6.20です debianで動けばOKです
>>354 ずれるというのは時間が戻るということ?
最新のカーネルを使ってみれば?
古いので動かしたかったら、debianのBTSに突っ込んでみたら?
>>355 そうですねー。
こうゆうのって自分で実装するのは難しいのでしょうかね?
>>352 そういう現象は聞いたことがない。貴方のコードに問題があるかもしれない。
どういうプログラムなのか、コードと実行結果を貼るなりしないと何とも言えないな。
同一の名前で、ちょっとバージョンの違う /usr/lib/xxx.soと/opt/dev/xxx.so があるとして、絶対/usr/lib/xxx.soを使わずに /opt/dev/xxx.soを使うようにコンパイルすること ってできるでしょうか。 libcとか今組込み用に作ってるのですがどうにも /usr/libのほうよみにいっているようで....
>>359 LD_LIBRARTY_PATHだっけか。
>>360 それでいけますよね?
前任者がDQNみたいで
#define printf xxx_printf
とかずらーっと定義して
/dev/xxx..soを必ず使うように
#defineするとか意味不明な
ことしてて困惑しています。
ビルドも独自の.sファイル用意して
アドレスに直にバインドするとか
意味不明なことをしています
>>359 リンク時にバイナリにライブラリ検索パスを埋め込むために、
ld 実行時にLD_RUN_PATH を設定するか、-rpath オプションを
付けてリンクする。
LD_LIBRARY_PATHは、バイナリビルド環境と実行環境の差を
埋める時のみに使うべきかと思う。
>>362 わたしもそう思うのですが
でもなんで
#define printf xxx_printf
なんてしたんだろう。
コード汚くなって意味ないと思うんだけどな...
こんなことする馬鹿他に見たことあるって
人いますか?明日そいつを血祭りにあげようと
思ってます。
おまえさんよりは前任者の方が詳しい鴨よ。 もちっとkwsk書いてみたら?
365 :
login:Penguin :2007/10/04(木) 03:55:40 ID:Lja62WFk
まず理由を聞くべきだろ?
組み込み用ならそれなりの理由があるのかもしれないような。
理由を聞いたが-rpathを知らないから そうやったって自供しました。 もう直後にイラっときたので 廃材詰めるダンボールにブン殴って のしてつめてやりました。 半日ぐらいノビてたなw
暴力はいけません
組み込みでLinuxなのにlibc自作って何か新鮮
Upstreamに流すつもりのFIXコードを書いてテストしておkぽかったんだが、 なんかしらないがそのままゲームにはまってしまって疲れて寝た。 次の日、他の人がパッチをコミットしていた時の悔しさ。
汎用DMAドライバってどっかに ないかなぁ CPU使わないでデータコピーしたい
カーネル2.4にvsyscallのgettimeofdayを 移植したいんだけど いい情報ないかな?最悪ドライバモジュールで 実装でもいい
374 :
login:Penguin :2007/10/10(水) 23:40:45 ID:MaiKO5Xh
Linuxで作成したファイルをWindowsに移すにはどうしたらいいんですか?
ftp
od -x filename | lessしたあと windows側で1バイトずつ 手打ちすればいいよ
>>376 メモ帳でやってみました。
なんかファイルサイズが16倍になったんですが、ホントにこれ使えるんでしょうか・・・。
tcpdumpみたいなものをカーネルモジュールで書いているんですが、 tcpやudpのデータ部分を取得するにはどうやったらいいのでしょうか。 sk_buff->nh.iph->protocol でプロトコルの種類はわかるのですが、実際のデータ部の取得方法が いまいちわからなくて・・・。 どなたかわかる方よろしくお願いいたします。
383 :
login:Penguin :2007/10/15(月) 21:09:43 ID:LCPtRnTv
カーネルソースはあるのにヘッダーsがないばやいで ソースからヘッダーってできないですか っていうかソースがあればヘッダーはいらないと思ってた! なんでなん?
>>383 インクルードするところを
/usr/includeとかになってるところを
/usr/src/linux/includeとかにするところでいいんじゃね?
-Iとかで指定するところだと思うよ
ipmiのライブラリってどれもつかえねーな 全然関係ないけど、montavistaの連中のコードってきもくね? CもC++もどれもまともにかけない糞が多すぎる。 それについてこっちは金払ってるのに問い合わせすると 仕様ですwだってさ あそこのエンジニアはSCOよりひどい
メモリの使い方について質問。 システムメモリ領域は負のアドレスというのを読んだのですが、 連続した次の領域を読む場合、正負どちらの方向に進めばいいのでしょうか? 例えば-521568100の次の領域は、-521568099?それとも-521568101?
-3 -2 -1 0 1 2 3 - +
389 :
387 :2007/11/09(金) 15:12:03 ID:Aq/ZR00i
>>388 なるほど〜。
ありがとうございました。
LD_PRELOADで関数フックしたあと、もとの関数呼ぶ方法ってありますか? void hoge() { hoge(); // <- もとのhoge関数を呼び出したい }
392 :
login:Penguin :2007/11/11(日) 12:34:41 ID:jhqVcqNv
mono develop使ってるヤシいる?
>>390 dlsymとRTLD_NEXTでググればわかるとおもうよ。
>>391 dlopenは不要
394 :
login:Penguin :2007/11/12(月) 03:27:53 ID:V6ygCzcx
今linux security module(lsm)の勉強のために、 root_plug.cを改造して試行錯誤してるんですけど、 これって改造する度に、 毎回全てのソースをコンパイルをしなければいけないんでしょうか?
makeでやれば関係ないソースは以前作ったオブジェクトそのまま使ってくれるだろ
396 :
login:Penguin :2007/11/12(月) 03:34:17 ID:V6ygCzcx
>>395 確かにそうなんですけど、
なんとなく気持ち悪くて、
毎回新しくオブジェクトを作りなおしてました。
でもそうしなくても問題ないということですね。
ありがとうございました。
397 :
login:Penguin :2007/11/12(月) 04:11:37 ID:CZeG29nh
,`,(+Φy〆),`, ‘オソロシキ ゲンゴダナ…
>>391 >>393 dlsym( RTLD_NEXT , "function" )
でできました。
ありがとうございます
Linux上でWindowsのネイティブバイナリは吐けますか?
>>399 cat explorer.exe > new_explorer.exe
mingwのクロスコンパイラが使えるよ。Debianならapt-get install mingw32で。
ありがとうございます
xxgdbでpopen()をトレースすると [New Cannot find thread 2049: invalid thread handle と表示されて止まってしまうのだがこれって仕様?
405 :
403 :2007/11/29(木) 00:55:49 ID:jIID4fY+
>>404 レスありがとう。
system()かexecl()系使うしかないのかしら・・・
opendir(3)の実装はどこにあるんでしょうか? glibcのdirent/opendir.cを見ると DIR* __opendir (const char *name) { __set_errno (ENOSYS); return NULL; } などと書いてあって行き詰ってしまいました。
glibc-2.x.x/sysdeps/unix/opendir.c だと思われる。
409 :
406 :2007/12/03(月) 12:14:14 ID:tGDLCTrZ
syslogのバッファの中身を設定ファイルでは なく、作成したプログラムで行いたいのですが どうすればよいの?
411 :
login:Penguin :2007/12/08(土) 01:09:58 ID:3wxXE3Np
emacs code browserをつかいこなしてる人いませんか? python2.4とpython2.5が両方はいってる環境で boost.pythonでc++と連携させると実行時に 「なにかがない」 というエラーが頻発しないですか?
>>410 syslog(2)かsyslog(3)のどっちだよ。
それより何がしたいの?
>>412 syslogを監視したいと考えています。
swatchみたいな仕組みを作りたいなぁと
414 :
login:Penguin :2007/12/09(日) 19:30:32 ID:kFipn9r2
Linuxで組込み機器の開発をしています。CPUはMIPS及びx86で、カーネルは2.6、swap領域は用意していません。 RAMは128MBです。下記状況で悩んでいます。 あるプロセスが大きめ(数十MB)のファイルを、読み込み専用(PROT_READのみ)でmmapし、その後そのファイル を一通り読み込み、理由は不明なのですが、その後munmapせずに長期間mmapしたままにしています。 この状態でもし物理メモリ(free page)が足りなくなってきたら、ファイルのreadonly mmapに使用されていた 物理メモリは他の用途に使うために回収されるでしょうか? カーネルの当該処理を行なう関数名だけでもかまいませんので、おしえてください。
>>414 Linuxの仕組みにこだわらず常識の範囲で答えるなら
swapがもし設定されておらず、メモリの確保を行ったプロセスが生きており、かつ新しいプログラムがメモリを要求し
メモリが足りないばあいは、そのようなエラーが出て後のプログラムが終了する。
確保エラーてきなそれで。
416 :
414 :2007/12/09(日) 20:49:28 ID:kFipn9r2
DirtyにならなきゃSWAPは関係ないんじゃないか? PRIVATEマップだったら予約はされるのかねえ? 試せ。
418 :
417 :2007/12/09(日) 20:53:20 ID:vfNigUJQ
>>416 読む前に書きました。Linuxの識者ではありません。
こ、これが本当なら、使用頻度の低いプロセスの確保しているページが勝手に破棄されるってこと? なにやら「書き換えられているなら」の和訳に難ありと見た。
420 :
login:Penguin :2007/12/09(日) 21:59:02 ID:kFipn9r2
>419 破棄されても、必要になり次第またディスクから読めばいいから、問題なくね? ディスク上のファイルが書き換えられていたらちょっと困るかも試練が。。。
>>420 ディスク上にあるデータばかりとは限らなくね?
そのへんをどうしているのか...
ファイルだったら、どこにあろうと開いてるからカーネルの管理下じゃね
なるほど、カーネルが管理しているページから破棄していくのか。 でもそうだとすると、この議題である「事前に確保されたページ」がカーネルの管理とは言い難いと思うのだが。
>>423 は何言ってるのか分からんから放っておいて、
>>416 は資料に書いてある通りだと思うんだけどね。mmap()のシステムコール先が
どんなマークつけてメモリ確保するか、もうカーネルのソース見たほうが早くね?
ローカルの時間を設定する 関数ってなんて名前なの?
settimeofday(2)
>ローカルの時間を設定する >関数ってなんて名前なの? いきなり時刻を変更していいなら、settimeofday(2)か、stime(2)。後者は秒単位でしか設定できない。 徐々に時計をあわせたいなら、adjtime(3)かadjtimex(2)。たぶん。よく知らなかったのでntpdateコマ ンドをstraceして調べた範囲だが。 あと、ハードウェアが覚えている時刻を更新したいんだったら、/sbin/clock -w するか、/dev/rtcを open(2)してioctl(RTC_SET_TIME)も必要。これもclockコマンドをstraceしただけだけど。
皆さんどうもです。 もう1つ聞きたいのですが libe1000に近い機能って 最近のカーネルにないでしょうかね? tigon3で使えないので泣き入ってますw
もしかしてこっちのことだったりして # cp /usr/share/zoneinfo/場所 /etc/localtime あるいは環境変数 TZ
それを言うならasia/Sapporoを作ってDSTを有効にする方法じゃね?
カーネルモジュールのメモリリークチェックどうやってる? slab使ってれば、destroy()でチェックになるようだが、 ページ単位だと手がないよね
自分でカーネルモジュール書く場合とか。
自分を信じる
/proc/meminfoをreadすると 遅くていらいらするので 実態を直接参照したいのですが 何を呼び出せば得られますか?
/usr/bin/freeも/proc/meminfoをopenしてreadしているようだ。 ちょっと思いつかない。
もう1つ別の話になりますが プロセスA,B,Cがあったときに 起動順序に依存関係があった場合や 不意の終了が起きたときの再起動等の 管理を含めた プロセスの監視、管理ってみなさんどうしてますか?
>>436 昔はps(8)にしてもvmstat(8)にしても、その手の奴は nlist(3)を使って/dev/kmem を
スキャンしてカーネルの変数を直接読んだんだけど、それをするためのプログラムは
setuid rootが必要だった。
今でもできると思うけど、別にそんな速くなるかというと、微妙だと思うなぁ。大体なんで
そんなものをreadするのに速度が必要なのか。
今はカーネルのさまざまな変数をsysctl(2)や/procファイルシステムで見るように
なっているから、そっちが一般的だと思うが。
>>438 ここはプログラミングスレだから、そういうツールを紹介してほしい、じゃなくて、
そういうものを書きたい、という事だよね?
UNIXのプロセス管理、特にwaitシステムコールの仲間と、SIGCHLD周辺をよく
勉強するといいと思うよ。
>>439 OSは何ですか?Linuxだとnlistという関数はないっぽい
elfutilsの付属品で/usr/include/nlist.hというのがあるけどOSの情報をとるものではないようで。
なぜPacket socketってRxのみなのですか? Txにも対応して欲しいのですが 誰かなんとかなりそうってヒントくれませんか?
>>443 そっちじゃなくてpacket_mmapだた
これは無理ですよね
無理ならstruct net_deviceを直接参照する
ようなコードをモジュールレベルで書きたいのですが
難しいですよね〜
eth0からeth7までをNIC1台の鯖に積んでるのですが 例えばeth0からeth4にパケットを転送するときって send()するしかないですよね? しかし5.6GBpsのコピーだとはんぱーねほど 負荷かかって困るw たまにーマシンごとお亡くなりになってしまうし
チップセットがIntel以外とか、BIOSをageてないとかでないの
447 :
login:Penguin :2007/12/20(木) 01:12:56 ID:gjGGDzJy
LinuxカーネルではRCUというデータ構造?が使われていると聞いたのですが、どんなものか 概要を知るにはどこが便利でしょうか?
>>445 いまいち状況がわかんないけど、sendfile(2)でもいいんじゃない。
>>448 in socket
out sokcet
これは無理ですよ。manページまともに読んでくれ
452 :
login:Penguin :2007/12/26(水) 23:54:48 ID:S8Qi2r6E
ここで訊くのが合っているか判らないけど質問 デスクトップをクリックした、というイベント取得したいんだけどどうやるんだ?
何を言ってるのかイマイチわからんかったので、とりあえず 「XCheckMaskEventでXButtonPressMask」 と答えておく。
ポルナレフ同士かよ
CPU使用率(百分率で0〜100)はどこで取得できますか?
/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
wとかtopのソースコード嫁ば?
>>457 以外とめんどくさいよね。 なんで定期的にpollしてアプリで計算しなければ
ならないのかと。 カーネルで計算しといてくれて/proc/... で読めれば
便利なのに。
計算する必要がないことをカーネルにやらせないだろ
>>458 養護施設か精神科完備の病棟に
入所したほうがいいよ。
社会に迷惑かけてしまって、親族、
地域に迷惑をかけてしまうまえに
自分の意志で入所しなよ。
みんな喜ぶよ?
462 :
login:Penguin :2008/01/01(火) 19:50:29 ID:VCekl7x7
>>458 そういうドライバを書けばいいよ。
キャラクタ型ドライバの入門としては
結構いい題材だと思う。
ちゃんとdoubleで計算するんだぞ
464 :
458 :2008/01/01(火) 23:44:28 ID:yGAu0gFM
>>462 ぐぐったらそのような計算をしているコードを見つけた。
drivers/cpufreq/cpufreq_ondemand.c
465 :
login:Penguin :2008/01/06(日) 23:48:28 ID:5PoYdP/T
Linuxの[vdso]って、シグナルにも何か関係があるんでしたっけ? おしえてください。
#include <sys/inotify.h> これに含まれているinotifyってシステムコールは ファイルにシステムによっては使えないこともありますかね? reiserfsで使えないようなw
今どきreiserfsを使っている人はいないと思うけど一応 サポートはされていないらしい
使う人いねーのかよw じゃあ何が主流なのw?
今から使う人はいなくても 数年前にreiserfs入れてまだ使ってる人は結構いると思うよ。
>>470 縁起悪いの知ってて使う人いるんだw
Jail好きなのね
>>472 あんなことになったのは残念だけど、Hansはファイルシステム設計という
領域に留まらない天才の一人だったと思う。
でも天才であっても他はやっぱり人間だった。判決はまだ出てないけど、
背景を聞くにつれて、あれだけの能力があっても人生の幸せを掴むのは
また別の話なんだなと無常を感じたよ。
まぁ悪魔の犯罪者だからなぁ
確定なの? 遺体は出たの?
476 :
login:Penguin :2008/01/11(金) 16:12:28 ID:f8prPTXJ
LINUX勉強中の身なのですが・・・どなたか教えて下さい。 Windowsでは、GetPrivateProfileStringでiniファイルの読み込みをしていたのですが、 LINUXで使えなくて困っています。>146〜に同様の質問があったのですが、理解できませんでした。 write処理も無いのですよね? 関数が存在しないということは、LINUXではiniファイルという概念が無いという事でしょうか? 普段皆さんは、どのようにしているのですか? 環境はKNOPPIXです。
普通は環境変数から読んでくるんじゃない
478 :
476 :2008/01/11(金) 16:38:30 ID:f8prPTXJ
レスありがとうございます。 でも組込用LINUXで、自分自身で設定出来ない場合はどうするのでしょうか? SDやUSBはあるので、アプリ実行時に、外部媒体へbatファイルを読みに行く 処理を追加し、環境変数を変更するのは低レベルでしょうか?
組み込み業界ってこんなやつばっかなん?
yaccとlex使って構文解析部分から作ってみるのもunix流の練習になるんじゃね?
組込もLINUXも初なので勘弁して下さい。
かなしす
できる人に教えてもらえば?
できるひと・・・いない
かわいそう...
perlを使って初期化ファイルから環境変数を作成する処理をラップすれば? 実行プログラム本体にはそれを読ませてやれば楽だろ
Linuxは初めてだって言ってるんだから、職種は関係ないだろ。 言語とか開発環境とか具体的に書いてもらわないとわからないけど、 GetPrivateProfileString()って言ったらWindowsのAPIだけど、プログラム中からコールするのかな? Cの関数でいえばsetenv()、getenv()があるよね。 バッチレベルでいいならexportで登録しておくとか。
誰も職場内で方針示してやれないような仕事取ってくるなよなぁ〜w 痴呆が上だからIT業界は7Kだって言われる
組み込みlinuxでファイルI/Oを使って初期設定を読込み? 設定はヘッダーに入れてしまってハードコーディングじゃだめなのか? 初期設定を読ませるためだけに小さいとは言え余分なライブラリを使える メモリと処理能力の余裕がある? linux以前の問題な気がするなぁ、、、
書き込み fprintf 読み込み scanf でやればいいんじゃないの?
scanf->fscanf
>>478 Linuxではそういう処理は起動スクリプトで行われる。 /etc/init.dの
中の他のアプリのスクリプトを参考に。
cmakeでwindowsとの互換をあくまで維持したい俺
495 :
478 :2008/01/12(土) 08:28:35 ID:DOVfiP6Z
昨日はショボンでしたが、 みなさんありがとうございました。 意見を参考に試してみます。 私含め、上司がレベル低いのは入社当初から知ってます。
>>495 Linux歴が浅いのでLinuxの作法を知らないのは当然だとして
それ以外の基礎知識や能力や言葉の使い方や文章の書き方は俺の数段上を行ってるなぁ
まぁ一緒にされたら迷惑だろうけど……。
最近稀に見る好印象な方だなぁと思った。
inotifyを reiserfsで使ってみた。 間違ってイベントが無限に飛んでくる バグとかあってプロセス10万 発生させてしまってマシン群止まっちまったw reiserfs禁止にしたほうがいいぜ
間違ったのがお前じゃないことを証明出来たら考える
>>495 pointed hair bossで検索するとちょっと幸せになれるかも
>>499 上司使えない云々より
pointed-haired bossをそんな風に書く奴が
このスレにいる方が恥ずかしい。もう来るなよw
>>472 siduxのインストール解説してるホームページでreiserfsを入れてたから
そのまま,まねして入れてしまった。
502 :
login:Penguin :2008/01/12(土) 20:37:07 ID:6ANyg4lC
起動時の画面にペンギンは出てくるのに、起動メッセージが表示されないのはなぜ? シリアルコンソールには起動メッセージが流れてるのに.. カーネルパラメータかデバイスファイルの設定が必要ですか?
>>502 どのメッセージのことか分からんが、
ディストリによってはそういうもんだろ
504 :
login:Penguin :2008/01/13(日) 03:13:19 ID:0vRtfE6z
ちょっと質問を。「組み込みLinuxができる」って言える基準って何か皆さんありますか? とあるデバイスにLinuxを載せてその上でアプリを走らせるという事をやったのですが、 結局はLinuxの一般的な機能(標準関数やらioctlやらopen("dev/xxx")やら) を使ってアプリを作ったという具合で、どうも誰でもできるような表層的な事をやったような印象です。 これを組み込みLinuxと言うのは間違っている気がするのですが、 みなさんにとっては何をもって組み込みLinuxでしょう?
>>504 新しい CPU で gcc すら動かないプラットフォームなら gcc を移植する.
bootprom がなければ自前で移植/製作する.
いざとなったら仮想記憶とも戦う.
足りないドライバは自前で作る.
ユーザーランドは必要最低限な物だけ拾ってきて自分で構築する.
あたりかな.
下ふたつはいいにしても、 >gcc を移植する これはないだろうさすがに。
最近だとCellか
>>505 あるよ. mips core に特殊な co-processor つけた奴とか,
特殊用途に特化した processor 用のやつとか, 今まで 3回
移植した.
アンカー間違えた
>>506 もっとも, 専用組み込みOS用で Linux 用じゃなかったけどな...
開発は全部クロスプラットフォーム.
>>508 そこまでやれなくても組み込みLinuxできると言っていいだろ
そう得意になって言うことでもないな
>新しい CPU で gcc すら動かないプラットフォームなら gcc を移植する. >bootprom がなければ自前で移植/製作する. >いざとなったら仮想記憶とも戦う. そもそもこの3つはLinux全く関係なくないか? 組み込みであることは確かだが。
俺も今度Linux組み込みやろうと思うんだが、 普通のLinuxのドライバ開発 VS Linux組み込み Linuxの組み込み VS 普通の組み込み ってどう違うんだ? 組み込みじゃないLinuxのドライバは経験あるんだけど
>>505 が必要だということを知ってればいいじゃないか。
あとはどうやればいいのか自分でしらべればOTJになるし。
すべった。OJTだ。 orz
組み込みで適当にソース拾ってきてfbconでつまずいてますorz 画面に文字を出すにはfbconを使うと見たのだが。。 アルマジロにしとけばよかったかなぁ あれならいきなり動きそうだし
>>512 > >いざとなったら仮想記憶とも戦う.
MMU とか TLB とか言われる部分のアーキテクチャに依存するので, Linux の
VM が target のアーキテクチャをカバーしきれていない場合必ず発生する.
つか, VM 使った OS なら何だってそう, NetBSD でも結構泣いた.
MMU辺りと戦うとなるとかなりのパッチになりそうですね 趣味人には荷が重いし、プロだと開発費が厳しそう。
>>518 patch の量は大したことないよ. target のアーキテクチャと
OS の VM アーキテクチャの整合をどうとるかって問題だけだから...
ただし, 双方のアーキテクチャを
***うまく噛み合わせる手法***
を考え付くまでにやたら時間がかかる.
その前にCPUとOSのVMを理解する時間が必要だ
linuxでgccを使っています。 cを使ってます。 fork-execでお聞きします。 binは、何かのコマンドです。 if(fork()==0) { execl(bin,bin,"gg*.c",NULL); }else { wait(); } とする場合にexecでは *がメタキャラとして認識されないようです。 メタキャラを有効にする方法ってありますか?
>>521 *の展開は/bin/shの機能だからね。execveで展開される筈もなく。
system(3)やpopen(3)を使うか、自分で*をglob(3)で展開するかしないとダメやね。
マルチスレッドでシステムコール使うの禁止なんですよ。 スレッドセーフか、分からないよorz (man見ました)
>>523 システムコール禁止ってfork(2)もexecl(2)もシステムコールだと思うが
スレッドがどこに出てくるのか話が見えないんだが、
スレッドの中でfork(2)しようとしてるの?
それはまずいんでない
525 :
523 :2008/01/16(水) 04:49:53 ID:R+P7htm7
pthread_atforkと fork-execの間に無駄な処理しない場合は、今の所OK
禁止じゃないのもある
話割って入ってすまないが iptablesのようにパケットフィルタを したいのですが定義されるフィルタ情報が 1万もあります。 とてもじゃないけどまともに1つずつなめている と終わらないので何か良い方法ないでしょうか?
1000に分けて10回処理する 禅問答みたいだけど効果は補償できる、まじお薦め でも1万ルールも追加しなくても、おそらくネットマスクを使うなりなんなり 方法ありそうな気がします。
>>530 カーネル見ながら考えてみたけど
用は困りモノなのがサブネットマスクの値に
よる変動なので
struct mask_zone{
struct mask_zone *next;
struct mask_zone *not_null_next;
uint32_t mask;
};
とかリンクリストを用意、基本的にマスク長単位に分割
する方針ってどうかな?ハッシュも組み合わせる予定
これだけだと毎回33回舐めるからばからしいので
構造体にnot_null_nextっていうNULLじゃないリストへ
ポインタも入れて舐める回数を減らすっていうのはどうかな?
>>525 read(2),write(2),open(2)はマルチスレッドでも呼べると思うんだが。。。
というかシステムコール禁止したら、スレッドで何もできない。。
何もできなくはないだろう。 「意味のあることは何もできない」というだけでw
534 :
login:Penguin :2008/01/17(木) 09:54:37 ID:nrX5B3xa
man signal見た?
printfだって下位層でシステムコール呼ぶからな
弱い者たちが夕暮れ、さらに弱い者を叩くんだな。
その音が響き渡ればブルースは加速していくんだな。
見えないGUIがほしい
見えないGNUを撃ちまくる
/dev/shm/と/dev/ram0の違いがわからない mount -t tmpfs tmpfs /mnt/ramdisk しても/dev/shmとかは使わないんだな。
>>540 俺も知らないが、ブロックデバイスとファイルシステムは違うんじゃない?
それとも、 shm_open(3) 読めばおわりか?
プログラム版の質問スレから誘導されてきました. while ((c = fgetc(stdin)) != EOF) { printf("[%d]: %c\n", num++, c); } とかやったらいつまでだってもfgetcから抜けれないのですが stdinでEOFをキーボードから打ち込むにはどうしたらいいですか? ちなみにLinuxのxterm上で動作させています.
>>542 Linuxプログラミング固有の話じゃないんだが
誘導する奴はレベル低いな
同感
かといってこんなのをプ板にのさばらせておくわけにもいかないからな
プ板てw
ムだム。間違えた。
なんでムなん?
はるか昔、ムー族とマ族の争いがあって、千年続き、 それを嘆いた神がプ大陸を二つに分けたと伝えられる。
>>544 環境依存じゃないか?
UNIX なら stty(1) を見ろとなる。
で、プ^H^Hム板の質問スレなら Ctrl+Z or F6 な人もいるだろ。
>>549 プログラ「マ」(について語る|がダベる)板、通称マ板と区別するため
553 :
login:Penguin :2008/01/22(火) 22:56:28 ID:3SjBwwbG
pthreadtypes.hで定義されているpthread_attr_t構造体ですが、 2.6.9と2.6.18で見比べたところ全く違う内容になっています。 というかpthreadtypes.h自体に大幅な変更があったような。 いつのバージョンで変わったか分かる人いませんか?
struct sk_buffをそのままユーザ空間に ひっぱりだしたいんだけど どうすればいいのかなぁ
>>553 ユーザアプリからは、構造体の中身を参照しちゃいかんのとちゃう?
556 :
553 :2008/01/23(水) 00:20:47 ID:rX2IdG6k
>>555 まじですか!?
そういうつくりになってたんすね。
pthread_attr_init()系の関数でアクセスですかね。
ありがとうございます。
すまんstatを使ってファイルサイズを調べたいんだけど if (stat(FileSt, &sb) == 1) { (sb.st_size>0) { ifs_flg=1; } } ファイルが存在するか?するならサイズは?みたいにしてます。 これを1行でstat(FileSt, &sb->st_size) >0 みたいに出来ませんか?
あ、ファイルは存在する前提です
statなんたらって自前の関数用意すれば
>>557 単純にショートカットじゃダメ?
if ((stat(FileSt,&sb)==1) && (sb.st_size>0)) {
...
}
>>560 それやってたんですが、うまく行かない。
あ、括弧なしだったからかな?
括弧つけてみます
recvfromってタイムアウト設定はできないんですか? データが届かなかったら永久に待ってそうです UDPのプログラムで任意の時間返答が無かったら さっさとrecvfromを抜けたいんですが...
>>562 selectを使いたくないならSO_RCVTIMEO
>>663 int timeout = 5000
setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(timeout));
とやっても抜けられないです...やはりずっととまったままです
struct timevalとintって?同じもの?だっけ?5000秒?待ったり?
>>565 struct timeval と int は別
565 は知ってて書いているようにしか見えない。
>>564 ためしてないが、その setsockopt(2) は EINVAL になってたりしないか?
おかげさまでタイムアウトは無事できました まだ疑問があるのですが struct timeval tm; tm.tv_sec = 5; setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (void*)&tm, sizeof(struct timeval)); とやってもrecvfromにてあきらかに12秒近く待たされています... あんまり厳密に守られるわけではないのでしょうか? 他のシステムコールの呼び出し等にて7秒以上かかってるとも思えないのですが
名前解決じゃね?
>>570 ipアドレスをinet_addr直でやってます.
>>572 なんという不注意...注意散漫になってるようです.
無事指定時間でタイムアウトさせる事ができました.ありがとうございます
現在、2枚のNICを持つマシン上での開発でつまづいています。 それぞれのNICに同じネットワークのIPアドレスを振ります。 例:eth0:192.168.1.10 eth1:192.168.1.11 この状態で、普通にSOCK_DGRAMにてソケットを生成し、適当なIP アドレスに対して送信します。 すると、どちらのNICから出すかはルーティングテーブルでどちらが 上に位置するかで決まってしまいます。 これをNICを指定して送信したいのですが、可能でしょうか? RAWソケットを使えばできるのですが、仕様上の制限があって 使えません。
>>574 bindしてから送信 はどうだろう
やったことないけど
577 :
login:Penguin :2008/01/29(火) 15:44:25 ID:Jv26bMRM
ところで main(){ int a=0; for(;;){ printf("%d\n",a++); sleep(1); } } みたいなプログラムを書いたんだけど、これを $ ./a.out > hoge としてもhogeに出力されない。 バッファリングされてるみたいなのでprintfの後ろに sync()やらfsync(1)やら入れてみたけど駄目っぽい これどうしたらいいんだっけ?
fflush(stdout);
いまどき\nでフラッシュしないstdoutがあるのか・・・
そりゃ・・・、端末に向いてない stdout(3) なら line buffered じゃなくても いいんでわ。
581 :
574 :2008/02/01(金) 11:04:33 ID:KZ/Tojjt
レス遅れてしまいすみません。
>>575 >>576 さんの言うとおりbind()をしてから送信すると、L3レベルでは大丈夫
でしたがEtherealでキャプチャするとL2レベルで、MACアドレスが同じに
なっていました。
>>576 提示してもらったWebを確認しました。現在開発しているのはなかなか
処理能力的にシビアな箇所なので、RAWソケットを使用できるように
説得してみます。
というか、bondingしてあとは知らん、ではなんかいかんの?
583 :
574 :2008/02/03(日) 21:37:06 ID:mkJ6nZ+Q
>>582 bonding、初耳だったのでぐぐってみましたが中々興味深い技術です。
ですが、仕様上送信元IPアドレス(つまり自分が持つやつ)が複数あり、かつ
対向の種類によって決まってしまっているので使えないようです。
けどこの技術に似たようなのを実装しなければならない機能ブロックも
あるのでこれはこれで提案してみようかと思います。
そういえば、RAWソケットって送信するときにPath MTU Discoveryをソケット
オプションで無効にしてもフラグメントされないなーと思ったら、man raw(7)に
バグとして挙がっているんですね…(使用OSはFedora7)
これも自分で実装しなければならないなぁ。
>>574 最初から難しいこと考えないで、まず既存の機能 (
>>576 の iptable + iproute2等) で
やってみて、それでパフォーマンスなどの問題がないかどうか確認して、どうしても
独自に実装しなくてはならないことを確認してから raw ソケットなり、カーネル
モジュールで何か作るなりすることを検討するほうがいいぞ。
585 :
login:Penguin :2008/02/04(月) 19:10:09 ID:hfVjOmBk
自分のサブネットマスクを取得するのはどう書きますか? IPアドレスは分かってるとして。
>>587 使える。v4でしか使えないバグならglibcが2.3の頃にあったはずだが。
大量のスレッドを生成できなくて困っています。 現在、上限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)のように スタックサイズ分オフセットを毎回させるのか が分からないです。
それができたとしてうまく動くと思ってやってるの?
何をやるのか、メモリをどれだけ積んでるか、ということによりけりだな。 pthreadとか知らんのでclone(3)で自分でスタックを用意して一万個ほど スレッドを生成したことはある。使い方によっては普通に動く。
それはすごい。
AMD64とかIA64とかでメモリを64GBくらい積めば大丈夫じゃね?
カーネル側で使うのが各スレッド8KB。ユーザ側のスタックを4KBに抑えれば スレッドをひとつ増やすごとに必要なのは12KB。10000個ならざっと120MB。
595 :
login:Penguin :2008/02/07(木) 00:54:55 ID:GYgs3mMU
>>589 > あと、pthread_attr_setstackaddr() の第2引数(つまり、スタック開始アドレス)は
> 10000個のスレッドで同一なのでしょうか?
同一で良いはずが無いねえ。スレッド毎に確保ですよ。
スタックの先頭アドレスはページ境界にアラインさせないとsetstackaddrがEINVALで失敗する。
mallocではなくて、posix_memalignかmmapでスタック用のメモリを確保するとよい。
596 :
585 :2008/02/08(金) 09:16:22 ID:Tg+rPbrB
サンクス!
>>586 , etc...
それググってみましたが、IPアドレスが幾つも取れるじゃないですか。
その中でIPアドレスをマッチングして、そのサブネットマスクを取るしかないんでしたっけ?
それとも、サブネットマスクって1台のマシンに複数IPアドレスがあっても共通?
つーか、IPアドレスに対して、サブネットが対応してるでそ。 インターフェースが2枚あったら、 eth0 : 192.168.1.5/24 eth1 : 10.23.45.67/16 とかさ。
man引けば分かるはずなんだが、今の場合はそれ以前の問題のような。 プログラミングより、くだ質が妥当なような。
>>598 manを引いても基本原則知らなきゃわかんないだろうな
こういうのを一番簡単に身につけるには
教科書的なものを頭ッから丸暗記するのが手っ取り早い
mallocをすると、値が帰ってくる前にsegmentation faultするんだけど・・・ これはライブラリの領域をどこかで破壊しているということでよろしいのでしょうか
gdbで引っ掛けてどこで死ぬかを見極めるべし まあメモリ破壊の類だとは思うが
>>600 メモリ破壊だったら、Electric Fenceが便利かもね。
valgrindのほうが。
自分に強壮剤がいいよ
606 :
login:Penguin :2008/02/11(月) 20:57:09 ID:JHZIo94H
>>600 エラー処理をしているのかと子一時間
NULLが帰ってきたら、どうしてるの?
実際mallocでNULL返ってくるの? CoWなのに。
>>607 CoWは関係ないような。
というのはともかく、極端に大きなmallocならNULLが戻るよ。
搭載メモリ量とか、32bit/64bitにもよるかもしれないけど、malloc(1*1024*1024*1024)とか。
>>607 物理ページ自体は必要ないが、メモリ空間が足りなくなる可能性はある
x86 (32bit) だと、ユーザ空間が3GB・カーネル空間が1GBで分けられてたはずだから、
多分2.5GB確保は成功して、3GB確保は失敗すると思う
>>609 適当なプロセスをcat /proc/pid/mapsしてみればわかるけど、.soやらなにやらが3GBのそこかしこにmapされてしまっているから、
2.5GB連続で仮想メモリ確保ってのは難しいと思うよ。
例えばfirefoxあたりだと色々mmapされすぎていて全く無理ですね。
>>606 >>600 は「値が帰ってくる前に」と言ってるんだから、NULLが帰ってくるも
ヘッタクレもないと思うんだが。
当然、返り値をチェックしようとしているけど、帰ってくる前にSIGSEGVなんだろ。
ファイルAとBが同一パーティション上にあるかどうかLinux的にはどうやって判断すればいいんでしょうか
パーティションよりファイルシステムの場所を調べる方が汎用性があって 尚且つ簡単そうで良さげ。スクリプトでやっつけるならdfにパスを食わせて 出たファイルシステムを比較すれば一丁上がり、、、かなぁ。 どうしてもパーティション、という場合は知らん。
今Linuxが手元にないんだけど、レギュラーファイルに対してstat(2)すると struct stat::st_devってどうなるんだっけ?
>>613 ありがとうございます。mtab読みに行くことにしました。
618 :
614 :2008/02/13(水) 01:03:45 ID:eUvEe13x
結局、パーティションまでは分からんということだな。
HTTPクライアントを作ろうと思いますが、 自分の空きポートはどうやったら取得できますか?
>>621 HTTPクライアントならサーバの80につなげば
いいだけじゃない?空きポートを知る必要が
わからん。(connect()で80につなげばいいだけ。)
クライアントの使用するポートはプロトコルスタックが
空いているポートを適当に割り振ってくれる。
623 :
621 :2008/02/13(水) 12:23:24 ID:G1ltJVUD
>>622 あっ、そーですか。有難う。
httpで相手のポート80に接続して、writeするだけですね。
(tcpと大して変わらないのかって、tcpで接続するプログラム書いたことないけど)
関係ないけど、それらがC/C++のクラスライブラリになってたりしませんよね?
>>623 TCP 以外の何でアクセスするつもりなんだ?
>>625 HTTP
ところで、HTTPエンコードする標準メソッドなんてありますか?
627 :
login:Penguin :2008/02/13(水) 18:20:50 ID:G1ltJVUD
知りたいのは、HTTP エンコードじゃなくて、URL エンコードでしたorz
>>628 あらゆる意味で違うと、いちおう突っ込んでおけばいいかな?
>>628 TCPってIPじゃね?
以降物理層まで続く↓
632 :
正義の味方 :2008/02/13(水) 23:20:51 ID:5UuGIiF+
HTTP on TCP on IP on Ethernet
UDPはTCPじゃないおねw
自分が開いているファイルポインタを監視して, ほかのプロセスから見られているかどうかをチェックする方法ってありますかね?
inotify...でできたようなできなかったような。
638 :
login:Penguin :2008/02/24(日) 23:17:29 ID:BrtZUi2N
gdbってスレッドの中まで追跡してくれないよね? 今開発しているプログラムが生成したスレッドの中で何かおかしなことを やってるみたいなのだが再現性が100%にならず困っている. gdbでlistとかやっても表示されるのはスレッドを生成してる 関数のところが表示される. せめてどこで落ちてるのか分かればいいんだが...
マルチコア環境上で、指定したスレッドを実行しているCPU番号を取得する 方法はないでしょうか? ちょうど、RTLinuxでいうrtl_getcpuid()のようなものを探しています。 # sched_setaffinity() を利用したCPU括り付けでのマルチスレッドの動作確認を しようと思っています。
info threads thread thread_no
>>640 CPU番号を取得するのがカーネル空間なのかユーザ空間なのかで違う。
カーネル空間ならthread_infoのcpuを読めばいい。
ユーザ空間ならthread_infoのcpuを読むようなカーネルモジュールを作って
システムコールで呼ぶしかない。ただ、システムコールのためにカーネル空間に入って
戻ってきたときには別のCPUに切り替えられているかもしれないので使い物にならない。
644 :
login:Penguin :2008/02/27(水) 01:24:58 ID:YHDpNSRs
>>639 スレッドの本を読んで勉強するほうが早い
>>639 >>641 のコマンドをgdbで実行すれば追跡できるけど?
gdbはVer.5辺りからスレッドに対応してるよ。
Linuxではディレクトリをopenしてファイルディスクリプタを 得ることはできないのでしょうか?
ファイルディスクリプタが欲しいんですよ。 ディレクトリのディスクリプタに対してlockfしたらどうなるか試したかったもので。
man open O_DIRECTORY
(引数+環境変数)の長さはARG_MAXで制限されると見たのですが、実験してみると ARG_MAXをはるかに超えて環境変数を保存できるようです。 これはそういう仕様と理解していいのでしょうか?ポインタでも示していただけると幸いです。 Linux ru 2.6.22-14-generic #1 SMP Tue Feb 12 07:42:25 UTC 2008 i686 GNU/Linux #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int main(int argc, char *argv[]) { char* str; int i; int size = 10000*1024; str = malloc(size); fprintf(stderr, "ARG_MAX=%d\n", sysconf(_SC_ARG_MAX)); memset(str, 'a', size); memcpy(str, "hoge=", 5); putenv(str); printf("%s", getenv("hoge")); free(str); return 0; }
>>650 仕様かどうかは知らんが、free(str)の前にsystem("ls");といれて、
straceつきで実行してみればARG_MAXがどこに効いているかわかるんじゃね?
650じゃないけどやってみた。 現在の環境変数hogeの5文字目を読むプログラムenvcをsystem()で実行。 execve("/bin/sh", ["sh"..., "-c"..., "./envc"...], ["other-env=.....", "hoge=aaaaabaaaaaaaaaaaaaaaaaaaaa"...]) = -1 E2BIG (Argument list too long) exit_group(127) = ? で失敗するよう。 自プロセス内のputenv,getenvは単にアドレスを保存しているだけみたいな感じ。
Linuxでどうやってるのか知らないけど、古典的なUnixだとputenvしたときには 書く場所がなければmallocして場所を作るしなあ
654 :
650 :2008/03/07(金) 18:57:12 ID:WLDLR5XW
ありがとうございます。 そういえば FreeBSD の putenv も malloc していたような記憶があります。
kernel 2.6.22でnetdevice.hのnet_deviceに なぜstruct net_device *next消えてるの? linux-sourceにはあるが linux-headerには無い なぜ?
>>655 なるほど解ったどもね
今snullベースで
仮想Ethernetデバイスを作ってるんだけど
たとえばeth0がすでに登録されてて
eth0のパケットをsnull0で送受信したい場合って
initの中で
dev_get_by_name("eth0);
でeth0のnet_devicはとって来れるけどこいつを
どうやって料理すればいいんだ?
なーんにも思いつかないw
658 :
login:Penguin :2008/03/15(土) 18:03:02 ID:NRAbwdcX
/usr/include/pgsql/server/postgres.h と /usr/include/wand/MagickWand.h を 一緒に #include すると、コンパイル時に以下の警告が出るのですが、 これってどうにかならないもんしょうか? /usr/include/pgsql/server/pg_config.h:14 から include されたファイル中, /usr/include/pgsql/server/c.h:53 から, /usr/include/pgsql/server/postgres.h:48 から, main.c:9 から: /usr/include/pgsql/server/pg_config_x86_64.h:571:1: 警告: "PACKAGE_BUGREPORT" が再定義されました /usr/include/wand/wand-config.h:10 から include されたファイル中, /usr/include/wand/MagickWand.h:29 から, main.c:8 から: /usr/include/wand/wand-config-64.h:491:1: 警告: ここが以前の宣言がある位置です 以下が重複しているようです。 PACKAGE_BUGREPORT PACKAGE_NAME PACKAGE_STRING PACKAGE_TARNAME PACKAGE_VERSION ググっても分からなかったので、せめてヒントでももらえると助かります。 環境はCentOS 5、postgresql-8.2.5-2PGDG、ImageMagick-6.2.8.0-3.el5.4 です。 コンパイルコマンドは以下のような感じです。 gcc main.c -m64 -I/usr/include/pgsql/server -lpq -lWand
>>658 そのヘッダの中身見てないけど、警告がでないようにするなら、
1. postgres.h,MagickWand.hを#includeしている間に#undef PACKAGE_*
を入れる。
2. main.cから、postgres.hが必要な部分とMagickWand.hが必要な部分を
別々のファイルに関数として切り出して、それぞれのファイルでは
postgres.hかMagickWand.hのどちらかのみ#includeする。
のいずれかでどうよ?
>>659 やっぱそうするしかないよねー。
前者の方法でやってみるー。ありー。
kernel空間でキューを作ってmmapで参照させたいんだけど 余計な処理が込み入ってないサンプルってありますか? ドライバの形式はなんでもかまいません。
663 :
login:Penguin :2008/03/17(月) 00:43:36 ID:nawcmHh0
664 :
login:Penguin :2008/03/17(月) 12:33:53 ID:nScJcaBW
自動停止してくれません。判りますでしょうか? 前提条件:テスト用に/root/test_stop.sh に、 プロセス停止のシェルプログラム作成。 (ちゃんと停止しないとファイルが壊れるため) 1:/etc/rc.d/init.d/test_stop として、下記を作成 ----------------------------- #!/bin/bash # Stop /root/test_stop.sh ----------------------------- 2:/etc/rc.d/init.d/test_stop に 実行権をつける 3:リンクの作成 ln -s /etc/rc.d/init.d/test_stop /etc/rc.d/rc3.d/K99test_stop コマンドラインで /root/test_stop.sh /etc/rc.d/init.d/test_stop と打ち込むと実行(正常に停止して)されますが、 サーバーを再起動しても動いて(正常に停止して)くれません。(涙
665 :
伊藤 :2008/03/17(月) 15:29:49 ID:CWhG8eFa
>>664 エスパーのオレが回答する。
パスが通っていない。
init.dの下にある他のファイルを参考にパスを通しなさい
/bin,/sbin/usr/bin/usr/sbin くらいは通さないと駄目かと。
>>666 お前アホだろw
666 :
664 :2008/03/17(月) 15:49:11 ID:nScJcaBW
?? パスですか? 他のファイルをみてますが、、今ひとつ??
uClinuxでpthreadって使えるでしょうか 全く調べてないですけど
>>664 直接ln -sなんてやってるのもまずいし、そもそもディストロが何か書いていない
時点で、rc.d以下がどういう挙動をするのかということがRHELやらSLESやら
ディストロによって違うということが分かってないだろ。
つーか、どういう動作を期待していたのか、何を試してどうなったのかも分からんが、 スクリプトの書き方からして根本的に駄目だ。 他のスクリプトをひとつでも見れば、どうしようもなく間違ってることくらい すぐに気づくはずなんだが。
>>669 じゃあ手本見せてやれよ
分からない分からないばかり言ってないでさ
手本は多数インストールされてるだろが。それを見れ。
>>672 Kentucky Fried Chicken に決まってるじゃないの
>>664 runlevel 3は再起動じゃなかったりするわけだが。
/etc/inittabに説明が書いてないか?
ついでにK99じゃ遅すぎて、呼ばれる前にkill -TERMくらうと思うわけで。
>>667 使えるはず。
kernelじゃなくてuClibc側が対応してなかったりする可能性もあるが。
>>674 667ですが使えました。
あろがとうございました。
ありがとうございました!
KFCか
24時間で誤差1ミリsec以内に 時間を調節したいんだけど NTPだけじゃどうにもならん こうゆうときどうするの?
GPSから受信するのがいいんじゃないか?
受信機からシリアルで送ってもらうと、1msくらい余裕でぶれそうな 気がするでよ。 システムクロックをTCXOで作ればどうにかなりますかねえ。 そもそも何でそこまでの精度が必要なのか気になりますな。
683 :
login:Penguin :2008/03/19(水) 01:52:51 ID:Dy7hJrHZ
>>679 さすがに1日1秒もずれねーよなー
っていう前提の下に、1分に1回時刻合わせする
で、肝心のNTPサーバが他人様の物で、毎分の御アクセス ありがとうございます。というメールとともにアク禁にされると。
puttyなターミナルから入った最近のLinuxで、ncursesw使ってutf-8を表示しようとしたのだけど、 mvprintw(1, 0, "※"); mvprintw(1, 1, " "); mvprintw(1, 2, "※"); mvprintw(1, 1, "☆"); なら期待どおり ※☆※ になるのに、 mvprintw(1, 0, "※"); mvprintw(1, 1, " "); mvprintw(1, 2, "※"); mvprintw(1, 1, "あ"); と最後の☆を変えただけで ※あ に表示が崩れるのは、どこに原因があるのでしょうか?
IMEの入力モードを変換するAPIってあるんでしょうか?
Linuxで各スレッドが何回Mutexかけて 失敗したとか統計情報ってどこにあるの?
ねーのか 腐ってるんだな本当に windowsがやっぱ最強だな
WindowsはMutexかけ損なった統計があるのか スゴイな。どうやったら取れるんだい?
691 :
login:Penguin :2008/03/28(金) 11:01:02 ID:HvPMQUTZ
イベントログじゃね? ところで、質問です。 iconvの使い方、サンプルコードがあれば、教えてください。 やりたいことは >SJIS 文字列と UTF8 文字列を相互に変換する ことです
iconv -f SJIS -t UTF-8 iconv -t SJIS -f UTF-8
ありがとうございます。 プログラムから使う場合も教えてくださいorz
system()
シェルスクリプトからそのまま使え。 C99(UTF-8->SJIS) char *instr = "文字列"; char *i = instr; size_t i_len = strlen(i); char out[256]; char *o = out; size_t o_len = sizeof(out); iconv_t cd = iconv_open("SJIS", "UTF-8"); int r = iconv(cd, &i, &i_len, &o, &o_len); iconv_close(cd); iconvの引数は、普通cd以外全部書き換わるから、元のアドレスはどっかに取っとけ。
当たり! これが解決すれば、もう無問題なんですが。
環境変数は ・プロセス毎に持つものである。 ・どの環境変数をどう使うかは各プロセスに自由に任されている。OSは関知しない。 以上を踏まえて自分の目的が達成出来るか否か検討するよろし。
黒タイツの暗黒シュシュトリアン
C/C++でHDDの使用量を取得したいのですがどのようにすればよいのでしょうか?
dfのソースでも読んでみれば
・kernel様にお伺いする。 ・アプリからI/Oポートを直接操作する。 かな。
>>703 statfsを呼べばおk
続きはmanで
707 :
login:Penguin :2008/04/07(月) 16:33:38 ID:K3aneVtn
C++好きだけどいい加減自重してほしいとは思うな
正直ワロタ。もはやネタの域にきとるな。次はinline C#とかw
スレッド間の排他について質問です。 現在、共有資源の内容を変更(新規追加・内容変更・削除)を行うスレッドが1つと 共有資源の参照のみを行うスレッドがN(N>=2)の構成のアプリケーションを開発 しています。 今まで、どちらのスレッドもアクセスするには同じMutexによる排他を行っていた のですが、どうにもスループットが出ないので、参照のみを行うスレッド間を並列に 動かせるようにするための方法を探していたところ、読み書きロック(正式には 何と呼ぶのでしょうか?)を発見しました。そこで、 変更するスレッド:変更前後で pthread_rwlock_wrlock() / pthread_rwlock_unlock() 参照するスレッド:参照前後で pthread_rwlock_rdlock() / pthread_rwlock_unlock() というようにして試験したところ、劇的にスループットが向上しました。 これはこれで良かったんですが、となるとMutexの存在意義について疑問が出てきました。 今後、あらゆるMutexを使用している場面で、読み書きロックを使用し、Mutexの出番は ない!と断言してしまって良いのでしょうか?
常識的に考えれば、この世にロックの手法がいくつもあるからには、 それぞれ向き不向きがあるのではないかと思うだろ。 常識で分からなければソースコード読んでみれ。pthread_rwlock_rdlock()で やっている処理があらゆる場面で常に必要なのかどうか。
なんで参照でロックすんの?
アトミック書き込み関数とかがPOSIXにはないから、かなー。 あとは、アレ、読み取り一貫性?そういうのを確保しないと、 これからはCPUコア数の増えていくからネ
つーと、具体的には変更スレッドと(参照スレッド)の同時発行時に参照スレッド側が遅延した場合とか考えてるのかな? だとすると、Mutexを利用して変更スレッド側の優先度をごにょごにょしたりするつーことなの?
カーネル2.4の環境で、共有メモリを使用したプロセス間通信を行っているのですが、 プロセスが停止(終了ではなく一時停止)します。 ・AとBの2プロセスが動作しています。 ・AはBへメールを送信(msgsnd)します。 ・Bはメールを受信するとTCP/IP接続されたサーバに情報を送信し、 送信したことをAプロセスへメールで通知します。 これを繰り返していると、たまにBプロセスの関数途中でAプロセス側へCPUが スイッチされそのままBプロセスへ制御が戻らなくなります。 (システムコール等でブロッキングされているわけではありません) ※メール送信時の共有メモリは、メール送信毎に作成し、受信側で破棄する作りです。 ※今のところTCP/IP通信を行わないと発生しません。(ドライバは標準の物) ※一時停止したプロセスはコンソールへの入力等(H/W割り込み?)を行うと再開します。 このような現象にあった方はいないでしょうか?(長々とすみません)
送信側にディレイを入れてみるとか?
717 :
715 :2008/04/09(水) 15:05:40 ID:7C+zl+CD
すみません、情報が漏れていました。 AプロセスはBプロセスのTCP送信が終わるまで、次のメールは送信しません。 その為メールボックス一杯や、メモリ枯渇も無いはずです。
straceで調べてみるとか?
pthread_rwlock_wrlock()とか 遅いし使う価値ないじゃん 全部pthread_mutexの方が安全だし
720 :
login:Penguin :2008/04/10(木) 17:20:05 ID:hC2NJA9B
時間について教えて頂けないでしょうか? 1) 時間の取得(文字でなくて数値) 2) 時間のローカルタイム化 3) 夏時間の演算(tm_isdstの使い方が答?) を順番に行うコードもしくは関数を教えて頂けないでしょうか?
721 :
720 :2008/04/10(木) 17:30:23 ID:hC2NJA9B
>1) 時間の取得(文字でなくて数値) については、gettimeofdayがあるみたいですね。 その後がよくわからなくてorz
723 :
720 :2008/04/10(木) 18:06:20 ID:hC2NJA9B
>>722 有難う。
1のgettimeofdayについては、分りましたが。。。
分らないから聞いてるんですけど。
正直言って、
>>722 のリンクは書き込む前に読んでます。
時間と時刻の使いわけ ものをたずねるときの態度 終わってるな
LINUXの固有の質問じゃないのに、聞く場所間違ってる。 だだのCの標準関数の使い方だろ?
>>731 おまいはクズなだけじゃなく、チ●カス野郎だな。
おまいの出したPOSIXのヘルプ読んでみろよ。
今は使うべきでないものから、BSD拡張まで書いてあるからwww
職業プログラマ?
中学生か高校生でしょ。関わらない方がいいよ。
低スキル職業プログラマでしょ。 で、誰かに知恵をつけてもらって必死でやり返そうとしてるんだろ。
これは酷いわ
>>735 >夏時間は廃止されました。
本当ですか???
本当ならどれだけうれしいか。
ところで、
>>720 の演算を順番に行うコードも知りたいです。
なるほどサンクス。 time(); ・・・UTC(もしくはGMT) ctime()・・・ローカルタイム化+文字列化 ですか。
ていうか、「ありがとう」は?
サンクスって書いてあるじゃん
743 :
login:Penguin :2008/04/12(土) 09:17:33 ID:H1hJd2mx
以下のプログラム fd = iconv_open("EUCJP", "SJIS"); iconv(fd, (char **)&inptr, (size_t*)$size, (char **)&outptr, (size_t*)$size); iconv_close(fd); Valgrind --leak-check=yes でチェックすると、iconv_open()で Invalid read size of 4 Address xxxxxxx is 48 bytes inside a block of size 49 alloc'd とエラーを出すんですがiconv()を使っていて問題を起こしてる方いませんか? iconvの出力は正常なんですが
iconvは危険だから使ってはいけない
時代は酢昆布
>>744 アプリを書き換えることにしました。ありがとうございます。
>>745 そうだったんですか?初めて知りました。もっと勉強します。
そのドル記号は何だw
ログ出力の際にファイルロックが必要かどうか実験していたのですが、 ちょっと不思議な現象に出くわしました。 以下のプログラムを100プロセス同時に実行すると、hoge.logの一部で「wwritten」と なってしまう箇所があります。 fprintfでなくwrite(2)を使うと再現しないのでglibc(2.6.1)のせいだと思うのですが、 これはどういう原理なのでしょうか? #include <sys/file.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char *argv[]) { int i; FILE* fp = NULL; int fd; int pid = getpid(); fp = fopen("hoge.log", "a"); if (!fp) { exit(1); } fd = fileno(fp); for (i=0; i<10000; i++) { flock(fd, LOCK_EX); fprintf(fp, "written by pid %d\n", pid); flock(fd, LOCK_UN); usleep(1000); } fclose(fp); return 0; }
>>748 flock(fd, LOCK_EX);
fprintf(fp, "written by pid %d\n", pid);
+ fflush(fp);
flock(fd, LOCK_UN);
まあglibcのせいと言えなくもないが…
いや、「glibcのせい」と言ってはマズイじゃろ。「Cのせい」だよな。 つーか、この内容ならロックを取らずにアトミックに書き出せばええやん。
751 :
748 :2008/04/18(金) 13:21:14 ID:3NdGmVsA
fflushとはすっかり忘れていました。 ついでにお聞きしますが、ログ追記の定石というのはあるのでしょうか? ・ロックは不要か ・1行書くたびにfflushではパフォーマンスが気にならないか ・クラッシュしたときのためatexitでfcloseするべきか とりあえずlog4cではflushもロックもしていないようでしたが。
要件による。
複数のプロセスからひとつのファイルに書き込むなら、 open(2)にO_APPENDをつけてファイルを開いておき、 write(2)で書き込むのが常道だろう。 ディスク表面への同期を行うべきか否かについては ケースバイケースだな。
754 :
login:Penguin :2008/04/18(金) 21:48:41 ID:BhtI3++S
こなあああああああああああああああああああああああああああ
/ | / ̄/__ / ̄ ̄/ __ / / /_ 〃 / | /_/ _/ _/ /_/ / /\___/ヽ (.`ヽ(`> 、 /'''''' ''''''::::::\ `'<`ゝr'フ\ + |(●), 、(●)、.:| + ⊂コ二Lフ^´ ノ, /⌒) | ,,,ノ(、_, )ヽ、,, .::::| ⊂l二L7_ / -ゝ-')´ + | `-=ニ=- ' .:::::::| + \_ 、__,.イ\ + \ `ニニ´ .:::/ + (T__ノ Tヽ , -r'⌒! ̄ `":::7ヽ.`- 、 ./| ヽ¬. / ノ`ー-、ヘ<ー1´| ヽ | :::::::::::::ト、 \ ( ./ヽ \l__,./ i l.ヽ! | .| ::::::::::::::l ヽ `7ー.、‐'´ |\-、 int main() { char* str="Hello World\n"; printf("Hello World\n"); return 0; }
>>756 apt-get install hello
用意したデータをそのままIPのペイロードとして(IPのヘッダだけをつけて)送り出したいのですが、 具体的な方法を教えていただけないでしょうか。 できるだけ自分でプログラムを書かず、 既存のものを利用して実現したいと思っています。
760 :
login:Penguin :2008/04/19(土) 02:08:23 ID:+tIgJ88f
>>759 ありがとうございます。
これから調べてみます。
762 :
login:Penguin :2008/04/24(木) 13:01:17 ID:Eon8tTkZ
libcのprintfってスレッドセーフなん? 出力が混じるくらいは目をつぶるとして
763 :
login:Penguin :2008/04/24(木) 13:17:50 ID:8jColJMw
これもしかして俺が作ったスレ? 違ったっけ?
764 :
login:Penguin :2008/04/24(木) 14:41:36 ID:8jColJMw
なぁおまえら。 char* ch; というような宣言があったとして、chはcharポインタ型と言って しまっていいんかな?
キャラクター型ポインタ、略して きゃらぽ
766 :
login:Penguin :2008/04/24(木) 14:52:04 ID:8jColJMw
Cの宣言の解釈順に読むとchはpointer to char chはcharへのポインター
>>762 ちゃんと見てないが考慮はしてるようだ@2.7
書く所で排他制御してりゃ混ざらんとは思うが。
何かのポインタ本読んだときに
ポインタは英語で読めってのは結構良かった
以来、
>>767 と同様、一度英語にしてから読んでいる
俺は複雑な宣言だと、英語の訳し方があやしいから cdeclコマンドを使って確認かな。 cdecl> explain char *(*(*hoge[10])())() declare hoge as array 10 of pointer to function returning pointer to function returning pointer to char
right to leftの原則で自力で嫁
msgctlに必要な権限ってrootだけなんでしょうか?
>764へ おまえ 読み方は、さておき 一般的に char* ch; ってコードがあったら何を連想する?
スレッドの生成(pthread_create)を実施する関数のテストをしています。 スレッド生成が失敗した場合のケースをテストしたいんですが、意図的に pthread_createを失敗させる方法が分かりません。 PTHREAD_THREADS_MAX をいじっても当然無意味(そもそも、コメントアウトされている)で、 /proc/sys/kernel/threads_max はマシン全体にわたるパラメータなので、 他の使用者(共通端末上で開発しています)に迷惑がかかってしまいます。 プロセス毎の生成可能スレッド数を動的にいじることができれば理想です。 どなたか、妙案をご存知の方いませんでしょうか?
$ ulimit -u 32752 $ ulimit -u 3 3 $ ls bash: fork: Resource temporarily unavailable $ ulimit -u 32752 bash: ulimit: max user processes: cannot modify limit: Operation not permitted ひエエエええええええええ
これってどう直すんだw execで置換もforkが前段に入るから無理?
あきらめてログアウトすれ。 ちゃんとman page読んでから試せよ…
マソパゲ
dlopenや共有ライブラリのプロファイル情報を 取りたいのですがどうすればいいの? 普通に-pgでコンパイルしても gmon.outにmain1個だけしか出てこないw
実験でゲームサーバーを構築したいのですが クライアント側からのキー入力をTCP/IPプロトコルで、サーバーに送信する技術ってやっぱり socketを用いるのが吉?
ソケット以外の何でTCP/IPするというのだろうか・・・
>>783 linuxや通信関係の実装は、一回もやったことが無いので、確認させてもらいマスタ
元々C++使いなので、Cはわかるのですが、linuxのプログラミングに関して
Cの情報は多いけど、C++の情報が少ないのが残念デツ
車輪の再発明はしたく無いので、C++のsocketのライブラリィーとか知っていたら教えてもらえマツカ
オナガイシマスエロイヒト
>>782 クライアント側が BSD socket インタフェース持ってるんだったらそれが吉
もっと便利なライブラリがあるんだったらそれを使う方が、おそらく、もっと吉
そうでなければ使ってる OS の流儀に従うしかねぇんじゃねぇの?
786 :
782 :2008/05/10(土) 20:52:57 ID:s9qAIz4p
>>785 thx
何となくですが、輪郭が見えてきました
WindowsのクライアントはMFCの中に多分berkley socket関連のライブラリがあると思うので
それを使います、問題はlinuxでの実装になります、いろんなシステムコールが準備されているみたいですが
早速つまづいています(^^;
dstSocket = accept(srcSocket, (struct sockaddr *) &dstAddr, &dstAddrSize);
accept()システムコールでこんなエラーが出ます
error: invalid conversion from \342\200\230int*\342\200\231 to \342\200\231 socklen_t\342\200\231
型変換が違うとコンパイラは言ってると思うのですが、引数の型は
accept(int,(struct sockaddr *) arg1, arg2);
なので正しいと思うのですが・・・・・?
型がおかしいって言われてるのにどの型を使ってるか書かないのは釣りなのか?
789 :
782 :2008/05/10(土) 21:15:38 ID:s9qAIz4p
790 :
login:Penguin :2008/05/22(木) 14:41:47 ID:NBp9AMHO
すみませぬ。 規則性を持って空のファイルを作る場合にCPUやメモリに負荷を あまり掛けないで作る方法ありますか? gccと標準的なシステムコールでお願いします。 open文で作ってますが、ファイルI/Oは、結構な仕事 なので、少しでも軽くしたいです。 規則はN文字のaaa(N=3)というファイルを作成 aab aac aad aba zaa .. zzz のように作ります。 規則性は、あまり関係ないですけど。 結構な大量ファイルを作成する必要があります。
791 :
login:Penguin :2008/05/22(木) 14:50:27 ID:WyDCfVht
すみませぬ。 LUNAXにプログラムにおいて 20という数字をターミナルに入力したら、 それを読み取り、30という数字を表示する プログラムの作り方がわからない為、教えて頂けませんか??
日本語でおk
read; echo 30
>>790 open/creat呼び出しはどうにもならんだろう。
FS側でジャーナリング止めるとか…
>>791 突っ込み所満載だから誰も突っ込んでないけど、LUNAXって何だよ・・・
>>795 この場合、ext3のジャーナリングがオーバーヘッドとして比重が相当に
大きくなってそうですな。
メモリ上にあるデータのmd5sumを取得(計算)したいんですが、 GNU coreutilsのmd5sum.cから貰ってくる以外に簡単な方法は 無いでしょうか。
>>798 RFC1321のAppendixを丸写しする
800 :
login:Penguin :2008/05/24(土) 01:18:02 ID:QlwIdcZn
カーネルが持ってるのをどうにか持ってくる。
Cryptographic APIってユーザーランドから使う方法ないんだっけ?
パイプでmd5sumに流し込めば?
正直、LinuxよりLunaxの方がかっこいいと思った
>>798 やったことねーけど、そういうライブラリがあるんじゃね?
opensslが入ってるなら、EVP_md5
806 :
790 :2008/05/28(水) 14:15:25 ID:7atgnQdI
すみません。 open以外に空ファイルを作る、CPUやメモリに負荷を掛けない 方法ありますか?
807 :
あいちゃん :2008/05/28(水) 14:44:30 ID:u23B6L4S
どうにかしてプラッタに刻む
808 :
login:Penguin :2008/05/28(水) 21:51:43 ID:hyFpgWYw
ドライブに負荷を掛けにくい方法ならある cpuとメモリの負荷を減らしDMA転送も出来る。 が、負荷を かけない ってのは無理
809 :
login:Penguin :2008/05/28(水) 22:21:06 ID:6Rl9Qb5b
>>806 システムコールを使いたくないなら、次のようにするしかないんじゃないかな?
1. ext3ドライバのソースを読んで空ファイルの作り方を調べる。
2. 直接HDDを操作して空ファイルを大量発生させるプログラムを作る
あらかじめファイルが格納された状態のファイルシステムのイメージを用意して、 raw I/Oなりddなりでビットマップやinode領域等を書き込めば軽いだろ。 ファイルシステムを破壊するけどなw
811 :
login:Penguin :2008/05/28(水) 23:36:20 ID:7atgnQdI
>>809 システムコールがだめってわけじゃないけど
touchやcpのソース(coreutil)とか調べて負荷が低いのを探してた。
ext3のソースは未だ調べてない。調べて見る。
>>808 はい、より負荷を掛けない方法を模索してます。
>>810 考えてたけど、排他がマンドクセーと思ったので、未だやってないっす
812 :
798 :2008/05/29(木) 02:30:49 ID:rITSsBYp
>>811 superblockいじっちゃいなよ。
write()でファイルに書き込んだあと close()しても、すぐにはディスクには同期されていなくて、 タイムラグがあるそうなのですが、 close()した直後に別のプログラムから同じファイルを open()してread()しようとしたら、どうなるのでしょうか? その前にwriteした内容はちゃんと読み込まれるのでしょうか?
>>814 ちゃんと読み込まれる。バッファ統合されているから。
バッファ統合前の、昔のUnixではその点の保証がなかったが、
いまどきのUnix系OSはみんな統合されている。
ダーティーなデータの読み取りって昔は出来なかったの?
読み込みに使うキャッシュと書き込みで使うバッファとが別々だったから ダーティ・ページもクリーン・ページもない。
おお。なるほど。知らなかった。 ページキャッシュとバッファキャッシュの統合とか言う前の段階か。
今日ソフトバンクから出た デバドラの本最強すぎます バイブルの域に入ります
本の題名を詳しく
Linux デバイスドライバプログラミング
>>821 目次見る限り、買う価値はありそうな気がするね。
までも、オライリーのドライバ本読んだら、カーネル解説書読んで
とっととソース読めって気もするが。
といいつつ、Amazonで1click購入してしまた
>>822 でもソース読んでも
どうしても解らないことがる
mmapでユーザに領域明け渡してpollで
データ通知するのはいいんだけど
ユーザが書いてきたデータをkernelに通知
させるのがよく解らん
馬にはそんなこと1行も記述されていないし
>>824 >ユーザが書いてきたデータをkernelに通知
>させるのがよく解らん
なんでもioctlしてしまえばOK
>>825 それ昔海外のBBSいったら
ふるぼっこにされたんだけど?
もうさ、read, writeなくしちまって、open, close, ioctlだけでいい気がするのだけど どうなんだろう。read, write, SIGIOとか、柔軟性ないし。最低、引数付きシグナル は必要。
>>828 「ケンシロウ、ioctlはいいぞ」 という声が聞こえてきました。
read,writeは シェルからでも使えるようにするための種もみです。
スレッドチューニング用のプロファイラってありませんかね?
ありません
ズコー
ubuntu 8.04-64bitで bfd_minisymbol_to_symbol使うと問答無用で segるんだけど何が原因なんすかね?
PC/AT機のI/Oポートを操作するような時に、outb_pと(普通の)outを使い分ける 条件ってどうなってるんでしょうか? 『I/O操作の遅いデバイス』と『I/O操作の早いデバイス』で使い分ければよいのでしょうか?
>>834 まあそんな感じでよろしいのではないかと。
コマンド書いてから動き始める間で時間かかりますなんてのは、
outb_pでつつくのがよいです。
836 :
login:Penguin :2008/08/15(金) 23:35:52 ID:Dq4dt+Vm
質問させてください。 デバドラからアプリケーションにイベント通知したいときって どういう風に実装するのがフツウなんでしょうか。 よろしくお願いしますm(_ _)m
>>836 アプリケーションがioctlを呼んで、その呼び先のデバイスドライバで
イベントが無かったら寝る。デバイスドライバでなんかイベントがあったら、
寝てるやつを起こす。って実装しときゃいいんじゃない?
それならpollの方がよいのではないかと。
read, write, pollいらねーんじゃね。ioctlでなんでもできるし、シグナルも不要。
840 :
login:Penguin :2008/08/17(日) 04:15:45 ID:RamYD2Yk
>>837 >>838 >>839 レスありがとうございます!
システムコール内で待つのが常套手段みたいですね。
ところで、
教えていただいた情報をもとに調べていくうちに、
デバドライベントを複数同時待ちしたいという新たな欲望が生まれてしまいました。
pollを実装すれば要件をみたせるようなので、
今回はpollを使うことにします。
ありがとうございました!!
LinuxのカーネルモジュールをC++で作りたいんだけど無理? とりあえずCで書いた本体の.oとg++で吐いた.oをリンクして、モジュールをビルドしたら.koは出来るんだけど、シンボル解決出来ずinsmodに失敗した。
C++ シグネチャでググレ
Tcl/Tk 最近のものは、けっこう強力になったし、スピードも上がってるようだが、 あまり流行ってないのか? Linux, FreeBSD, MacOS X, Windowsと、殆んど同じコードが使えて便利なようなのだが…
844 :
login:Penguin :2008/08/24(日) 13:24:24 ID:WgO6gp39
>>843 gtk+やwxWidgetsと比較してどうなの?
興味がわいたのでTkだけ使ってみたいのだけど
おすすめ解説ページとかあったら教えてください。
特に画面遷移とかC/C++との連携方法とか・・・
tkはともかく、tclを使ってる所なんてここ何年も見たこともない
EDA関係ではまだ多いんじゃないの?
淘汰されたのに昔に戻してくれるなよ
日経からムック『すばりわかる!Tcl/Tk』出ないかなあ。 『ゼロから学ぶgtk+』でもいい。
>>845 ネットワーク業界ではテストツールを書くのにがんがん使われている。
Tcl/Tkの日本語情報があまりにも少なすぎる。
両方
Qt4を少しだけ触ってみたんですがgtkmmにくらべ,ウィジェットの生成・消去にかかる処理時間が2〜3倍 さらに2D描画の処理時間が1.5〜2倍くらいかかりました. これって仕様?
gtkmmはCだろうけど、QtはC++だからしょうがないんじゃね。 GUIみたいなやつだと
gtkmmはGTK+のC++バインディングですよ それにC++とC言語でも処理時間はさしてかわらないはず Debian使ってGNOMEデスクトップでQT4インストールしてやってるんですが 同じ言語で処理速度に2〜3倍の差が出るとかありえるんでしょうか
速度差が気になるなら、プロファイル取って原因調べるなり なんなりする。調査結果貼り付けたら、喜ぶ人もいる。 俺は、めんどいから調べないがw
とりあえず処理速度gtkmm>Qt4と結論づけて Qt5出るまでgtkmm使うことにします GTK枯れてるのであまり使う気は引けるのですが... 本屋なんかでQt4の本とかはよく見かけるのに GTKの本なんかは絶版しててAmazonで全国5冊とかそんなのばかり...
gnome上でQTは時間かかるでしょ、逆も真なり。
Qtは時間かかんないよ。 KDEアプリはDCOPサーバ立ち上げるのに時間かかるけど。 GTKもKDE上で特に時間がかかるような事はない。
ここは一つGASで…
軽くてシンプルなツールキットを自分で作っちゃえば?
863 :
login:Penguin :2008/09/09(火) 23:40:53 ID:YosnVhH1
Xtで十分
GAMBASってやっぱ人気ねーのな。
865 :
login:Penguin :2008/09/24(水) 15:06:15 ID:OEqJ5D76
wxWidgets、機能面は申し分ないけど 小さいアプリでもなんかもっさりするな。
selectでファイルを監視していて、selectが帰る度に前回からの経過時間を取得したい ntpdが動いていてる環境なんですけど、10ms精度で取得する方法はありませんか?
>>866 clock_gettime(3) でいいんじゃね?
GTKのプログラミングの本ってどれおぬぬめデスか_?
いくつもないんだし 全部読め
どれあるんすか?
やっぱり勉強やめた 英語無理
>>873 1年前は俺もそう思ってたよ。
ところが仕事でやるようになって、
解らなくても必死に調べてたらそのうち解るようになってきた。
結論としては解らなくても続けていればなんとかなる。
ただ一人じゃつらいから仲間は必要だな。
Qtなら多少説明できるが、GTK+は未経験。
でもQtはWindowsと考え方はたいして変わらなかった。
やりたい人がいるんなら、プログラミングサークルwでもつくる?
>>876 とりあえず、飽きるのに耐えつつ
昨日届いたFoundations of GTK+ Development
を読んでいる。
結局wine入れてWin32API使うのが楽 すなわちWindows使うのが一番楽
素のWin32APIは… VCLがお手軽で良かったのう。
つまりLinuxデスクトップがWineで構成されているディストリビューションがリリースされればいいのか...
Lindows再び みたいなのがそのうち出るんだろうね。 Mono2.0では.NETアプリケーションの45%は修正なしでいくらしい。
VBやDelphiみたいなのが出ればWindowsのサンデープログラマーが移行しやすいと思うね。 あとは開発ドキュメントの日本語化。
もう過去に失敗してるけどね まあ何度でもトライすればいいとは思うが
perl python rubyあたりのスクリプト言語と適当なGUIライブラリで 十分だろ。趣味なら。
なんでGTKでのGUI開発って 宗教的儀式作法としか考えられんほど糞なコーディング強いるの?
例えば?
イベントとかもう嫌だ .NETみたいに書きたい
慣れの問題 どのGUIにも特有の決まりごとはあるもの やってることはそれほどかわらない
あのなあ、そりゃGTKしかないなら慣れるしかないだろうけど、 実際には「学ばない」という選択肢があるから慣れようがないんだよ。 他とやってることがそれほど変わらないのなら、 簡単で合理的な「他」を選ぶだろうがバカめ。
というかGTKはOSXかWindowsどっちかと 機能と仕様統一すべきだろ GTKって生産性低いんだよ
馬鹿宣言乙
そもそも.NETやCocoaだと5分で作れるようなことが まずソースコード読もうとかアホな次元から始まる GTKは本当にありえない
実例をあげろ
ラーメンタイマーはもういいからw
ワロタ
まあ.NETやCocoaは実質有料だからなあ。
GTKやってる奴って趣味で(好きで)やってんだろうからどうでもいいが
俺専用なら、俺はまずGUIなんて作らんし大抵はスクリプトで終了だよ
ゲームならどのみちGTKとか使わんだろ
>>898 一般人はWindowsがプレインストールされているPCを買うし
NETフレームワークもVisual Studio 2008EEもタダで手に入って
ポトペタRADが利用できるわけで
主流のXPには.NET入ってねぇだろ。 あれはWindowsUpdateのカスタムで「除外」するのが 企業なんかじゃあたりまえだぞ。 セキュリティ部門が運用で面倒くさくなるかならな。 VSが失速しタダみたいになったのは.NETになって 非.NETアプリの需要がまだあるのに非.NETアプリを 簡単に作るのが面倒になったらからだと思う。 .NETアプリっーつのは、ユーザーに別個に.NETのインストールを 指示する必要があるから面倒なんだよ。 (ATIのビデオドライバなんかがそうなっているね) 一般企業的価値感では.NETを利用するなら 旧開発環境で非.NETにするか、どうしてもフレームワークを使うなら javaにいくと思う。 周辺機器なんかの付属ソフトなんかもたいがいそうだよね。
>>900 > 主流のXPには.NET入ってねぇだろ。
> あれはWindowsUpdateのカスタムで「除外」するのが
> 企業なんかじゃあたりまえだぞ。
> セキュリティ部門が運用で面倒くさくなるかならな。
デフォで入ってなくともタダで入れられるし。
Linuxデスクトップなんて趣味丸出しの世界と
業務で使ってて好きに弄れない端末(非開発機)を同列に論じてるのも意味不明だな。
一応確認するが、 まさか.NETランタイムも入れられない環境に LinuxやWin用GTKランタイムは入れられるとか寝言言ってんじゃねえよな?w 知らんようだから教えてやるが、 .NETは思いっきり仕事でも使われてるよ
なんでそんなに必死なの? ひょっとして仕事で.NET関係の開発してる? そりゃ大変だよね〜、VISTAがもっと流行ればいいね〜 (ちょっと無理っぽいが、計算狂ったんだろうなぁとは思う)
>>903 お前さんが知ってる「世間」が狭すぎる上に主張が意味不明だから
突っ込んだだけだが
「Javaならいい」ってのも意味不明だしな
JREはノーカウントかw
>>904 必死さはよく伝わったよ。一応903とは違う者なので
こういう場合、何一つ具体的な反論をしていないほうが分が悪い どちらだかは言うまでもないな?
GTK用のRADツールでまともなもん 無いの?なんで作らないの? リーナス馬鹿だから? 犯罪者排出したから?
リーナス関係ないじゃん。 と釣られてみる。
あんなお絵かきツールいらんw どんなGUIにもたいていついてるけどw できるソース最悪だしまともなもの作れるとは到底思えない 特にあの子供のお絵かき的な操作はやっててむなしくなってくるw 間に合わせではなくいいものを作りたいなら 普通にコーディングしたほうがいい
RADは簡単なGUIをすばやく、簡単に作るもので 時間がないのでGUIを手早く・・・ GUIはあまり重要でないので適当に・・・ という場合に(仕方なく)使用するツール にも関わらずこれら以外の場合で喜々として使用したいような方は RPGツ○ールえっくすぴーでもいじってた方が効率的 なにも理解してないゆとりの時代の子供が 無理にプログラマーの真似事をする必要はありません
>>910 > なにも理解してないゆとりの時代の子供が
> 無理にプログラマーの真似事をする必要はありません
吹いたw
VBにしろAccessにしろ.NETにしろDelphiにしろNetBeansにしろ
思いっきり業務で使われている/いたわけだが……
パッケージソフトにしろ、ダイアログを作成するのにリソースエディタの一つも
使わないというのはあり得ない
GTKはかなり昔に少しやっただけなので黙っていたのだが、 gladeとRuby/GTKあたりでやるのが楽だと思うよ。
つーかLinuxのGUIはWindowsかOSX遵守しろよ 違法コピーOSのくせに
イミフ
アプリケーション間でショートカットキーくらいは統一してほしいところ あとウィンドウマネージャはクリップボードの機能をもっと強化すべき WindowsやMacOSはそういうところが尋常じゃなくしっかりしてる
すでに文句言うために文句言ってるというw
>>911 パッケージで堂々とRADとはサスガですね?
>>918 Windows自身VC++で作られてるわけだが
それがなにか? OS自身をRADで作るとでも? 私にはあなたがソリューション系の仕事を転々としてきた派遣の人に見えます 知ったかぶりは後々弱目になるので気をつけたほうがいいですよ?
話が変な具合にねじれてるな VC++をRADと定義するかどうかのズレか? 普通はVC++をRADとは言わんと思うが 知っての通りVC++にはリソースエディタがついており、 コードの自動生成やクラスライブラリとの連携機能があり、 VC++は事実上Windowsの標準開発環境として広く利用されているわけだが パッケージならむしろVC++を用いていないもののほうが稀だろ 無論kernelコードなら「リソースエディタ」なんぞは関係ない話だが 「Windows」というOSに関しては、GUIデスクトップ環境まで含まれるからな
知らないものは当然のように馬鹿にする無教養な人間ってだけだろ。 カーネルとシェルとemacsとgdbだけで生きてる人間にGUIなんぞわからんよ。 デスクトップだけで生きてる人間がttyをわからんのと同じでね。
すまんがここはプログラミングスレ。コードで語ってくれ。 グチやウンチク語りたいなら他所いってくれ。
つまりLinuxではGUIプログラミングは無理なので やめた方がいいということです
そうそう君には無理だ、諦めてね。
Linuxのプログラミングって宗教だよね 草加みたいできもい
草加草加
結局wine入れてWin32API使うのが楽 すなわちWindows使うのが一番楽
930 :
login:Penguin :2008/11/02(日) 13:46:53 ID:P/zWxESO
やっぱり GUIエディタが弱いのと、 ライブラリごとにドキュメントが分散してることが linuxプログラミングの2大障害かなあ。 その点、.NETとかだと 普段linuxやってて知識0でもさくさくコーディングできる。 自分と逆の立場の人は大変だろうな。
ドキュメント整備だけはマイクロソフトえらいと思うわ。
やはりいいものはいいと認めるべきだな ドキュメント整備からはじめよう
933 :
login:Penguin :2008/11/02(日) 15:21:46 ID:J1BSkb6i
real programmerにドキュメントは必要ない。 ドキュメントが必要なプログラマはプログラマでは無い。 従って、M$プラットフォームを利用するプログラマはプログラマとは言えない。 Linuxプログラマこそが真のプログラマであり、唯一のプログラマである。
かんじーざいぼーさー かんじーざいぼーさー かんじーざいぼーさー
real programmerにドキュメントは必要ない。 ドキュメントが必要なプログラマはプログラマでは無い。 従って、M$プラットフォームを利用するプログラマはプログラマとは言えない。 Linuxプログラマこそが真のプログラマであり、唯一のプログラマである。 こういうアホがいるのはLinuxだけなんだよなぁ
まだまだ、趣味でのんびり付き合える人向けだよね、Linuxは。
>>935 この手の話題は、犬糞が出来る前から海胆糞業界では、
「ソース読め」で終了してたわけだが…
>>937 今はそんなアホなこと言う人もだいぶ減ったよね
だいたいソースコードは成果物であって仕様では無いんだが
そこんとこわかって無い人多すぎ
ソースがドキュメントってのはハッカーの自虐ジョークなんだが 真に受ける馬鹿な素人が多すぎるんだよな Unixはベル研の昔からman整備してるしGNUもinfoがある 難を言えば、分かってる人間にしか読みこなせないあたりかね MSも事情はかわらんが、オンラインの検索能力がゴミなのと、 日本誤訳が問題を更に悪化させてるのがな・・ないよりマシだが
>>939 ここ数年のMSのドキュメントへの力の入れようはパネェよマジで。
「○○の翻訳おかしいぞ直せゴルァ」とメールすると翌週には直ってる。
>>938 仕様を仕様として確定するまではソースコードが正義だよ
IETFあたりでは、いまだに………
>>941 IETFは「動かない仕様なんて意味が無い」と現実の動作を重んじてるだけで、
ただの一言も「ソースが仕様です。ソース嫁」なんてレベル低いことは言ってない。
仕様は先に決めるものだからなぁ。 ソースが仕様通りになっていないとバグになるわけなんだが、 ソースが仕様書だというと、おかしなことになる。
出来ちゃったバイナリが仕様書はよくあること
オープンソースの醍醐味
ptyにつながってるstdinて書き込んでも怒られんのですね。 しばらく悩んだ。
947 :
login:Penguin :2008/11/15(土) 16:35:52 ID:FFNCNb8R
948 :
login:Penguin :2008/11/15(土) 16:59:06 ID:szPmAnhd
他にも「…従ってGDIプリンタは真のプリンタとは呼べず、PSプリンターのみが 唯一のプリンターである」とか「…従ってWinモデムは真のモデムとは呼べず…」 とか色んなバージョンがあったよね。 もちろんジョークじゃなくて本気なんだよw
次は、「ソフトウェア無線」は真の無線デバイスとは呼べず・・・か? 行き着くところはFPGAは真のチップとは呼べず、だな。
950 :
login:Penguin :2008/11/16(日) 06:07:00 ID:m6bvpmnq
>>949 Linuxで動かない者の代表格といえば、最近では動画関連かね。
LDPの文書で真の動画とかあったっけ?
LinuxでVRAM直書きってできますでしょうか?
できる
Xwindowで特定のアプリケーションだけキーリピートOFFにできますか?
954 :
login:Penguin :2008/11/25(火) 00:51:06 ID:pyfm2t6k
わざわざLinuxのプログラミングスレまできて 布教活動を行うWindows信者たちをみたとき
Windows信者はわざわざ布教する必要ないだろ。 あれだけ広まってるのだから。
956 :
login:Penguin :2008/11/25(火) 03:41:10 ID:pyfm2t6k
それでもどこでもWindows賛美したがるのが Windows信者の習性らしい Linux板まできてなにやってんだか
きっとM$ピラミッドのいちばん最下層で飯を食いつないでいる人でしょう。 彼らは必死なのです。分かって大目に見て上げましょう。
スレ違い
史的唯物論によれば、歴史的事実からして、ルンペンプロレタリアートは反革命的利害の持ち主だったらしいです。 なぜなら彼らはブルジョアジーの利益のおこぼれにあずかって生き延びてきた社会階層であったからだそうです。
ごめん。ブルジョアジーではなくその時代の支配階層(その当時は貴族階層?)の間違いでした。
ラージページってどうやってとればいいのですか? Kernel2.6.22ぐらいなら対応してそうだと思うのですが うーん
>>961 ラージページってヒュージページのことなのか?
そうなら、Documentation/vm/hugetlbpage.txt に設定からサンプルコードまで載ってるけど。
Eclipse非常に良いんだが環境によっては重くて・・・ 誰かC++かなんかで書き直してくれないかな。。
Objective-Cで
unix domain socketで接続している相手のプロセスIDって取得できますか?
ルートキット一発!
969 :
966 :2008/12/25(木) 16:50:01 ID:YLVoSR1u
>>967 lsofみたいに/proc見るとか?
便利な関数はないと考えてよいでしょうか。
971 :
login:Penguin :2009/01/04(日) 15:13:41 ID:+pbzPaSy
デバッガのようなものを作っています。 ブレークポイントでブレークしたときに、デバッギプロセスのバックトレースを 取りたいのですが、これはどうやったら実現できるのでしょうか? 同一プロセスならば、glibのbacktrace関数で取得できることは分かっているのですが、 他プロセスに対応させる方法がわかりません。
>>971 GETREGSでspもらってきて、頑張ってそこからたぐる。
>>972 マジすか。フレームポインターの有無などを考えると、
逆汗が必須になるような気がするのですが、そういうものなのですか。
>>973 フレームポインタ云々より、逆汗無しのデバッガって…
>>973 そういうのです。
デバッグ情報が使えればそこにスタックフレームの使われ方が書いてあるけど、
ダメなら力業で解析するしかない。
gdbにもそういうコードが入ってる。
ユーザ空間で使えるspinlockって無いですか?
自分でCAS(x86ならcmpxchg等)で実装する
>>977 自由に使えるデータ構造もないし
全部自分で実装かぁ
単純なspinlockだけならint値と操作関数だけでよくね? まあpthread_spin_lock使えば?
そういえばpthread_rwlockってmutexより良い感じ?
pthread のマイナー関数群って 枯れてない関数の代表格じゃね? わざわざ使う気になれん。
>>977 カーネル内でspinlock, unlockするモジュール
作って、デバイスファイル経由で呼び出せばOK
pthread_rwlockまんせー