>>6 UNIX厨が出てくると逆に話がややこしくなるスレだよな。
そこってw
前スレの987以降(999は除く)の自作自演は死んどけ
Part7まで続いているスレなのに 今になって板違いとか騒いでるのは一体何なの?
素直にUNIX板へ移動よろ。
UNIX板に立てれば、わざわざ「UNIX」プログラミングと断る必要ないし おれも移動には賛成するよ。 UNIX板に「プログラミング質問すれ」立てればいい。
なるほど。
じゃあ誰かスレ立てよろ
UNIX板に行くとLinux排除するやつが出てくるからここでいい。
ここでもLinux厨は排除したいのだが。
プログラミング質問すれ Part7 で立てようとしたけど無理だった。 どっか依頼してこようか?
いいじゃんこのままで。
WindowsでのプログラミングはWindows板で。となるのか?
Windowsはデファクトスタンダードですから。 UNIXはダメ!
なんだ、要するにUNIXを目の仇にしている奴ってことか。
おれUNIX大好きだけど、 この板にあるのは、なんか違うんじゃないかって。
この板にあって然るべきだとは思うけど、 現実問題としてS/N比はUNIX板にある場合の方がずっと高そうだ。
プログラム板でプログラミングのスレが迫害される理由は無い。
>>30 *NIX厨がこの板へ足を運ぶことが問題。
自治スレでID制の導入が検討され始めたな。 厨房ってのはwinにしろunixにしろウザいから俺は賛成だ。
何事もなかったように、このままこのスレは続きます。
まあ削除されるまでは厨の隔離スレかな。
削除依頼出した?削除理由はなに?
マジで立てやがった。氏ね
>>6 関連してるだろ。てゆうか Port13 建てたの俺だし。
getrlimit, setrlimit の RLIMIT_AS に対応する、 プロセスの仮想メモリ使用サイズを取得する システムコール、ライブラリ関数は無いのでしょうか? 調べたところ、 /proc のファイルを読み込んで解析すれば 望む結果は得られそうなんですが、面倒なうえに 処理速度も問題になりそうな場面で、 関数呼び出しで済ませたいと思っています。
42 :
デフォルトの名無しさん :2005/09/27(火) 10:50:43
質問age
>>41 せめてOSくらいは書けよ。だから犬厨と言われるんだ。
それからmanくらい読め。
man getrlimitの一番下に関連する項目がある。
Linuxは知らんが、man getrusageしてみろ。
44 :
41 :2005/09/27(火) 11:55:10
>>43 すいません Linux です。
getrusage は最初に見たのですが、仮想〜で探していたので
ru_maxrss を見つけて、RAMに割り当てられたものしかないのかと
勘違いしてしまいました。
今、再度確認して ru_minflt を見つけました。
これが望む値になりそうで Linux でも使えるようです。
(この変数名の意味はさっぱりわかりませんが。 flt は、 fault ?)
とりあえずこれで試してみます。
ありがとうございました。
ファイルの削除はどの関数を使えばよいのでしょうか?
unlink とか書いてみる
48 :
デフォルトの名無しさん :2005/10/02(日) 08:10:03
cygwinさんは、unix_Cのシステムコール使えますか??
unix_Cの教科書のコードがcygさんで、8割方コンパイルできたよ。
50 :
デフォルトの名無しさん :2005/10/03(月) 01:39:06
stat でファイルのアクセス権を取得したんだが、これをC言語でRWX に変換する方法はありませんか?このために関数作るのもな。環境はLinuxです。
chmod(2)
>>50 >このために関数作るのもな。
ハゲワラ
>>50 はモードを文字列にして表示したいんだと思う
>>53 あなたの想像、予想、妄想なんて興味ありませんよ
phpやperlからメールを送る方法はわかるのですが、Cの場合、どのようにやればよいのでしょうか?
phpやperlと同じ方法でやれ。
mailコマンドをpopen()して垂れ流す方法から自分でSMTPを喋る方法まで まあ好きにしる
60 :
デフォルトの名無しさん :2005/10/03(月) 23:17:11
>>51 chmod(2)
2ってなんですか?
これでは表示されないみたい
man 2 chmod
62 :
デフォルトの名無しさん :2005/10/03(月) 23:44:49
ls.cを見ていますがいまいちわかりません。 aclが関係しているんですか?
mite
66 :
デフォルトの名無しさん :2005/10/05(水) 13:27:59
実行ディレクトリの取得方法を教えてください
次の質問をどうぞ
68 :
えすぱぁ :2005/10/05(水) 13:41:53
自分自身の実行ファイルの場所を知りたいのですが教えてください
>>69 それは何度も繰り返し質問されている議題です
pwd
コンソール上でウィンドウを出したいのですがAPIを教えてください
newwin() とか subwin とか。
system("startx ウィンドウを出すコマンド名 -- :ディスプレイ番号");
system関数で&付のコマンドを実行して、そのコマンドが終了する前にプログラムを終了すると、ゾンビプロセスが残ってしまうのですが、 コマンドの終了を待たずに、プログラムを正常に終了するにはどのようにしたらよいのでしょうか?
それが原因でゾンビができるとは思えないが。
77 :
75 :2005/10/06(木) 15:59:39
system関数ではゾンビプロセスは発生しないと考えて良いのでしょうか?
出来るが、 > そのコマンドが終了する前にプログラムを終了すると、 これは余分な条件。孫と祖父の関係だからゾンビ関係ない。
で、ゾンビが残ると何が問題なんだ? そのうち消えるのに
消える保障なんてねーよ馬鹿
消えないならOSの不具合ですね
ゾンビとオーファン間違っている奴いねーか?
>>75 システム的に、正常終了するためにゾンビになってwait()待機中なんだが…
二重起動を抑止する方法を教えてください。 Windowsでは経験があるのですが、Unixの場合どのようにすればよいのでしょうか?
>>83 Windowsと同じ要領でいいと思います。
頑張ってマルチを想定して作ろう じゃなきゃ、ファイルをロックする。 実行ファイル自身を消す。 /sbinにでも置く、とどめにinit 1をコールする。
>>84 もう少し詳しく教えていただけないでしょうか?
具体的には、ミューテックスの作成方法がわかりません。
>>86 Windowsと同じ要領でいいと思います。
CreateMutexを使うにはどのヘッダをインクルードすればよいのでしょうか?
>>83 ドラエもんなら、/var/run/ドラエもん名.pidにpidを書いとく。
ユーザアプリなら、~/.アプリ名/lockをO_EXCLで作成かな。
> ドラエもんなら、/var/run/ドラエもん名.pidにpidを書いとく。 > ユーザアプリなら、~/.アプリ名/lockをO_EXCLで作成かな。 しょぼ。
ホントUNIXってしょぼいわ こんな基本的なシステム関数すら提供されてないとは
>>91 >こんな基本的なシステム関数すら提供されてないとは
...
93 :
41 :2005/10/07(金) 09:42:38
>44 の ru_minflt を試してみましたが、やっぱりだめでした。 /proc/self/statm を scanf するのが最善手なのかもしれません。
UNIXコンソール上でMSN Messenger機能を使いたいのですが、できませんか?
>>94 それのどこがプログラミングの質問ですか?
つーか、IP Messengerでいいんでない?
そういえば昔、terminal 用の ICQ クライアント使ってたなあ。
>>95 Messengerプロトコルを知らん馬鹿は黙ってろ
ではそれを知っているらしいお利口さんの
>>97 に解説キボン。
UNIXプログラミングと関係ない話ししは他所でおねがいします。
てゆうかいちいち相手するのが悪い
自分が理解できないアプリケーションを作成するのは UNIXプログラミングではないと思い込んでいるジジイ がいるようですね
「UNIXコンソール」に違和感
つーかこんなスレ必要ないじゃん。
やっぱりお前か
青木みねろーさんの本は、Linux上のプログラミングを勉強する上で、一冊目としてどうでしょうか?
106 :
デフォルトの名無しさん :2005/10/09(日) 11:07:05
lsコマンドのようにターミナルの文字に色を付ける方法を教えてください。
その色の付く ls の出力をファイルにでも入れてよくながめてみたまへ。
私の手元のlsは色がつかないなぁ。強調化されたり下線がついたりしているけど。
>>106 lsがGNUのだとして、(以下*BSDは無視で)
$ ls --color=always | hexdump -C
man terminfo
man ncurses (Linux)
man curses
$ printf "\033[01;34mtest\033[01;00mtest\n"
ls>tmptmptmpか?
>>113 出力先がファイルかどうかを見て、ファイルだったらエスケープ
シーケンスを吐かないような処理をしてるので、単にリダイレクト
するだけじゃ駄目。
>>110 のようにするとか、script コマンドで
ログを取るとかしないと。
わたしのためにあらそうのはよしてー
つーかUNIXスレは板違いとかじゃなかった? 正直こんな感じ悪いスレならいらないけど。 >107とか変な奴ばっかり。
UNIXのスレはひねくれた精神異常者ばっかり そんなんだからWINDOWSにシェアで負けるんだよ
>>118 じゃあWindowsのプログラミング技術関係も板違いなのか?
>>118 お前が消えればまったく問題無い事ですね。
>>118 UNIX板にスレを建てた誘導しようとしていた
キチガイが必死に自作自演していたなw
うまいことキチガイを隔離できててよかったんだがなあ
124 :
デフォルトの名無しさん :2005/10/10(月) 19:03:33
最近、clone()とかrfork()とか、 UNIXenでも違いが増えてきたから、少しづつ統一していってくれないかな…
UNIXプログラミングの話題だからといって、UNIXで育ったやつと Windowsで育ったやつが同じスレで仲良くできるわけがないのだ。 双方キチガイ呼ばわりして荒れるのが自然の摂理。 と、重いマスタ。
「自然の摂理」なんてなんだが仰々しい話は知らないけど、 UNIXに興味がないんだったら用はないはずだと思うけどな。 至って単純な話だと思うんだが。
UNIXにしか興味が無い奴とUNIXにも興味がある奴では 仲良くできないよな
まあUNIXは不の遺産を使い続けるしかないパラダイムだから ひねた奴ばっかりです
"不"の遺産??
つまりUNIX=不可ってことか。 納得。
不動産
要するに、UNIXが気に入らない奴がわざわざここまでやってきて荒らしているということだ
いまさら何を。
まあ、荒れてない方じゃないか? 板的にもApacheとかPerlとかUNIX発のsoftwareに恩恵受けている人が多いから。 これが「Mac OSプログラミング質問スレ」だったら大変なことに…
大変な事にはならなかったよ。書き込み無くて消えたから。
>>134 つまりキチガイが煽ったり暴れたりしているわけだ
IDがついていればあっさりあぼーんしているところだな
>>137 わざわざこっちまで出張して来るなよ。
こういう奴は ID 変えながらカキコするから、ID 制になっても無駄なんだよ。
>>138 そういう真性以外には効果があるということでよろしいか?
なんで?
粘着発生w
>>138 出張して来るも何も、
ここのスレが建つときに荒らされそうになって危なかったから、
こっちからわざわざIDスレに出向いているんだが?
当スレにスレタイが読める人間がいない件について
IDスレから来ました 解決してやるから問題点を述べてください
定期的に他スレから荒らしがやってきます
てへ、ばれちゃいました?
>>143 たしかにそろそろアホは放置して
普通の質疑に戻らないといけませんね。
149 :
デフォルトの名無しさん :2005/10/11(火) 06:32:34
ファイルのロックの仕方を教えてください
// sorry for my poor english. #include <sys/file.h> #include <stdio.h> int main(int argc, char *argv[]) { int lockfd; if (argc != 2) { // check the argument printf("usage: ./a.out filename\n"); return 0; } lockfd = open(argv[1], O_RDONLY); // open file in read-only mode, if (lockfd == -1) { // of course, you can use other mode. printf("cannot open file \"%s\"\n", argv[1]); return 0; } if (flock(lockfd, LOCK_EX | LOCK_NB) == -1) { // try lock the file as non blocking printf("file is already locked\n"); return 0; } printf("file is locked! please enter to exit\n"); getchar(); // wait return 0; // to unlock and close file is done by operating system :) }
UNIX Cって、平気で長い関数書いてgoto使いまくったり グローバル変数だらけってイメージしかない
それ俺がよく見るWindowsプログラムの特徴
gotoを使わず短い関数で綺麗に設計されたバグだらけのプログラム gotoを使ったり長い関数を使いまくっているが目的を達成しているプログラム
gotoは、それを使うパターンというのがあるからそれに則って使う分には 何の問題もない。
>>155 それは正しい。だが
「それを使うパターン」というのが人によって違うという点が・・・
>>154 前提条件がオカシイ。
gotoを使わず短い関数で綺麗に設計された目的を達成しているプログラム
gotoを使ったり長い関数を使いまくっているが目的を達成しているプログラム
UNIX C じゃなくて単に C で書かれたプログラムの特徴かもしれんね。 ま、俺は goto は C++ でも平気で使うけど。
>>156 それはパターンとは言わないんじゃないか。
>>158 C++だと間に変数定義の関係でジャンプできなかったりするのがちょっと不便ねえ。
まあずらせばいいんだけどさ。
gotoの使用/不使用と関数の長短を同列に論じても意味があるとは思えない
関数が長くなっていいならgotoいらないんだよ
本題とは無関係な変数まで導入して意地でも goto 使わないやつがたまにいるよなw
変数1個とgoto1個、どっちが有害かよく考えてみろ
そりゃ当然、変数のほうが有害です。 期待に反する答えでしたか?
突拍子もない飛び方してるgotoはそんなに見ないけどなぁ。 俺はアンチがいるみたいなんだ使わないが。
if (A) { goto Y; } X: 〜S〜 goto Y; Y: 〜T〜 goto X; この構造でgotolessにするにはコードのコピーが必要。 この還元不能が有名かな。 けど実際こんなケースはまったく遭遇しなくて、 例外処理の大域脱出、(これは例外や多段breakで済む場合が多い) エラー処理の一本化、状態マシン実装くらいじゃないかな? 後はCでの多段continue。
>>164 使い方による。
無計画なグローバル変数と計画的なgotoとかな。
スローガンを自分の中で消化せずにただ叫んでるだけって無意味だと思うが。
発展途上の極東地域の教育がそんな感じだな。旧日本とか北朝鮮とか。
蒸し返すようで済まないが gotoを使い短い関数で綺麗に設計された目的を達成しているプログラム に対する言及が抜けているような気が
それがUNIXプログラミングとどう関係があるのかね
>>167 あと、末尾再帰のつもりで関数先頭付近にgoto、というのもある。
こうやって見ると goto はプロ向けだね。 女子供はJavaでも使ってろ
多重ループから直截抜ける手段と例外機構があればgotoが必要な場面は ほぼ無くなる筈。 Cの場合はしょーがない。
例外機構は遅い。 しかも最適化される処理系はほとんど無い。
末尾再帰もサポートしないとgoto無くすのは無理
再起を勝手に末尾再帰にするCのコンパイラあるよ。gccもやる。
>>174 あくまで例外時にしか使わんのでパフォーマンスにはこだわらん。
>>176 そうなんだけどC自体で保証されるわけじゃないからねえ。
gccもLispコンパイラ並にきちんとやってくれるわけじゃなく、場合によって
やらない(Cのセマンティクスを守るため?)ので、ジャンプに最適化するのを
期待する場合は一応アセンブリ出力を確認する必要がある。
>>177 例外機構は例外が発生しなくてもパフォーマンスに影響するんだが……
>>178 最近の gcc なら実行速度に関しては例外が投げられない限りペナルティは無いよ。
コードサイズが増えるのは逃げられないけど。
Linuxでman 7 socketのSO_RCVLOWATの項に These two values are not changeable in Linux and their argument size is always fixed to 1 byte. getsockopt is able to read them; setsockopt will always return ENOPROTOOPT. とあったのですが実際にsetsockoptで2以上の値を設定してもENOPROTOOPTは返って来なかったので getsockoptで確認してみたら設定した値になっていました manが古いってことなんでしょーか
Linuxのmanなんてメンテされとらんだろ
182 :
デフォルトの名無しさん :2005/10/14(金) 18:44:22
すみません、C言語なら俺に聞けスレで誘導されてしまったので 大変申し訳ないのですが、こちらにマルチさせていただきます。 たとえば、sigaction()でSIGSEGVを捕捉したい時に、そのハンドラを sigaction構造体のsa_handlerで設定しますよね。 でも、これを設定してしまうと、今度はSEGVした時にcoreを吐かなく なってしまうと思います。 coreを吐かせるようにする(捕捉した関数の動作+元の動作も行いたい) にはどうしたらいいのでしょうか?
マルチには答えられんなあ
185 :
182 :2005/10/14(金) 19:31:10
多分自己解決しました。 sa_flagsにSA_RESETHANDをセットして、ハンドラ内でraiseすればいいのではと思い やってみたら何とかできたようです。
ほんと、役立たずなスレwww
シグナルとシステムコールの処理についての質問です write()やsend()、recv()などを実行している時にsignalによって割り込まれ、-1が返ってEINTRが設定された時は -1が返っているのでデータの書き込み、読み込み等は全くされていない データが途中まで書き込み/読み込み、又は受信/送信されている どちらが正しいんでしょうか もし後者のような状態が正しいなら何byteまで書き込み、読み込みされたかを調べる方法はありますか?
マニュアルぐらい読めよ。 EINTRがどんなときに設定されるか書いてあるぞ。
マニュアルって、manのことか? あの役立たずなmanのことか?あ?
190 :
デフォルトの名無しさん :2005/10/15(土) 00:48:53
>>187 write()やsend()、recv()はそれぞれ何バイト読み書きするのかというパラメータを渡しています。
それぞれのシステムコールが失敗してー1が帰ってきたということは、
指定したサイズ分の読み書きに失敗したという意味です。
よって、データの読み書きがまったくされていないかも知れないし、
途中まで読み書きしている途中なのかも知れません。
また、このとき、何バイトまで処理できたかを知ることは出来ませんし、
きちんとしたエラー処理がプログラムでなされていれば、それを知る
必要もないと思います。
最も役立たずなのは189
最も期待されているのはスルーだから
>>190 入出力がアトミックでないのならばエラー回復なんて無理ですよね。
write時のEINTRはファイルポインタを変更しない と(たぶんほとんどの)マニュアルに書いあるんだから EINTRのときは一切出力してないんじゃないの?
>>190 >必要もないと思います。
勝手に思っててください。
>>189 >>190 はカス
>>188 が正しい。
>>187 英語苦手ですか? write(2)には
> EINTR The call was interrupted by a signal before any data was written.
とありますが?
つまり「before any data was written」でなければ、signalで中断されることはないのです。
>>197 > signalで中断されることはないのです。
言いすぎた…
帰り値が-1になってerrnoがEINTRに設定されることはないのです。
199 :
デフォルトの名無しさん :2005/10/15(土) 03:05:18
実に香ばしいヌレだな。禿ワロヌ
>>190 0 で帰ってくることを言わなくていいのか?
そんなこと言われなくてもわかってます。 それ以前に、そんな忠告するぐらいだったら最初から全部答えろやカスが。
202 :
デフォルトの名無しさん :2005/10/15(土) 13:08:26
火病晒し上げw
203 :
デフォルトの名無しさん :2005/10/15(土) 13:19:56
でも
>>201 の言う事は最もだと思います。
スレ住人の皆様も少しはこのスレの存在意義を考えた発言をお願いします。>ALL
206 :
デフォルトの名無しさん :2005/10/15(土) 13:30:41
>>205 そんなあなたも
そんなこと言われなくてもわかってます。
それ以前に、そんな忠告するぐらいだったら最初から全部答えろやカスが。
といわれてしまいます。
208 :
デフォルトの名無しさん :2005/10/15(土) 13:36:44
>>210 わからないからってそんなことしちゃダメですよw
NGワード:カス
メガンテ
ワロタ
sigaction(2) write(2), send(2), recv(2)のどれか 読めばあっさり解決することだし。
213 :
デフォルトの名無しさん :2005/10/15(土) 13:56:26
>>213 そんなこと言われなくてもわかってます。
それ以前に、そんな忠告するぐらいだったら最初から黙っとれやカスが。
I understand it even if you didn't mention. You should at first answer it without such a meaningless comment. You good-for-nothing.
reading manual is the best way. reading manual is the only way. so, reading manual is your way. if the answer is in the manual.
218 :
デフォルトの名無しさん :2005/10/15(土) 15:59:31
なにしゅーがぜよ
どきやー
>>218 あてーは、高知九反田の侠客、鬼龍院政五郎の、鬼政の娘じゃきー、
なめたら、なめたらいかんぜよ!
>>201 は、わたしの「2ch名言語録集」に見事登録されました。
おめでとうございます。
223 :
41 :2005/10/18(火) 13:41:13
/proc/self/statm を scanf してみましたが、やっぱり処理速度が問題になってしまいました。 毎回オープンしても、オープンしたままで lseek() で巻き戻しても、 処理時間にあまり差がありませんでした。 Linux で自プロセスの現在の仮想メモリサイズ(または物理メモリ使用量)を取得する方法を /proc ファイルを読む方法以外で知っている人がいたら教えてください。
225 :
デフォルトの名無しさん :2005/10/18(火) 22:39:35
free BSDで自分のログインもとのIPアドレスを出力するコマンドなり、プログラムなり どなたか知らないでしょうか? whoコマンド以外で できればIPのみを出力する感じがいいです・・・
何でログインしているの?
227 :
すいません・・・ :2005/10/18(火) 22:58:44
横レスすいません。聞きたいことがあるうですけど。 掲示板にかきこみできなくなっちゃいました。 ボブって奴らしいんですけど。ボブってなんですか?
229 :
すいません・・・ :2005/10/18(火) 23:07:14
これなんですか?
231 :
224 :2005/10/19(水) 10:18:24
232 :
デフォルトの名無しさん :2005/10/23(日) 03:49:06
テンポラリディレクトリの位置を取得する方法を教えてください
>>233 ちんぽディレクトリはWindowsならTEMPやらTMPといった環境変数に
書いてあるのが通例だけど、Linuxだとそういうのは無くていきなり
/tmpがちんぽだという暗黙の了解しかない。
>>232 環境変数を参照してTMPやTEMPがあればそちらを、なければ/tmpを
ちんぽディレクトリとすればいいよ。
環境変数ならTMPやTEMPなんて使わない。普通はTMPDIR。 なければ/tmpで、shell scriptでは通常 ${TMPDIR:-/tmp} と書く。
236 :
232 :2005/10/23(日) 06:55:19
/tmp はリブートすると消える(覚悟しておく) /var/tmp はリブートしても消えない*かもしれない* 環境変数TMPDIRがあればそっちを使うと親切、くらいだな。 でも結局OSによるので man hier しる
>>232 あと、実際にテンポラリファイルを作るときには、
mktemp(3)はセキュリティ的な問題(race condition)があるから使うな。
代わりにmkstemp(3)を使うよろし。
OSのリビジョンと設定によっては、/tmp直下は消えるがサブディレクトリ以下は消えなかったりもする。
240 :
デフォルトの名無しさん :2005/10/23(日) 13:01:24
今unixの勉強してるんだけど、 『AAA BBB CCC DDD AAA BBB SSS DDD AAA BBB CCC DDD』 ってファイルに対して SSSが入っているやつ以外の最後にSSSを付け足す とかってできんの?
できる
>>240 ed filename <<EOF
v/SSS/s/$/ SSS/
w
q
EOF
perl -ape '{ next, if /SSS/; s/$/ XXX/; }' -i filename UNIXというかperlだが…
perlってすげーな。 UNIXはどうだか知らないけど
sed -e '/SSS/s/$/ SSS/'
ed/perl/sed ときたかw 残っているのはpythonとawkくらいかな
>>245 条件逆やし、書き換えてないし。
$ sed -e '/SSS/n' -e 's/$/ SSS/' filename
で、条件は合う。けどこれ板違いじゃないか? プログラミングとは言いがたいし。
ruby -pe '$_.sub!(/$/, " SSS") unless /SSS/'
おまえらそれだと AAA BBB XXXSSSXXX CCC DDD みたいな行でダメじゃないか
単語境界認識しろってことか?
ruby -ape '$_.sub!(/$/, " SSS") unless $F.include?("SSS")'
perl -pe '{ foreach $i (@F) { next LINE, if $i =~ /^SSS$/; } s/$/ ZZZ/; }' こういうことか?
>>253 あ、-a忘れた。
perl -ape '{ foreach $i (@F) { next LINE, if $i =~ /^SSS$/; } s/$/ ZZZ/; }'
awk '/\<SSS\>/ {print; next;} {printf("%s SSS\n", $0);next;}'
>>255 後ろのnextはなくても大丈夫だね。
単語境界を使うとperlは、
perl -pe '{ next, if /\bSSS\b/; s/$/ XXX/; }'
だな。\bは行頭、行末も大丈夫。
自分自身の現在のメモリ使用量を取得する方法を教えてください。
もう何回目だよこの質問。
getrusage
自分の実行ファイルのパス名を知りたいんですが、 GetModuleFileNameと互換性のあるAPIありませんか?
>>260 その関数の仕様は?
いきなり関数名だけ提示されてそれと互換性云々聞かれてもね。
wchar_tを扱える正規表現ライブラリってありませんか? 鬼車はUcharみたいですし…
>>264 wchar_tは出来損ない
この型を使った時点で負け
キチガイが増えたねえ。 ここはUNIXのスレなんだから回答者にはそんな知識は期待されてない。 したがってそういうのは質問者がなるべく情報を提供して回答者の負担を 軽減するべきだし、そうすればこそ答えてもらえる可能性も高くなる。
知らなきゃ黙ってりゃいいのに
それが言えるのは問題の知識がUNIXの知識の場合。 そんな区別もつかずに逆ギレとは、キティはどうしようもないねえ。
UNIX知識だけしか持ってないUNIXプログラマなんて この世に不要だよ・・・
ということにしたいのですね
はいはい。指しゃぶってなさい。一番幼稚なパターンだったねえ。
ファイルシステムでファイルにディスクスペースを割り当てる最小単位は 何バイトかを知りたいのですが、statfsしてf_bsizeを見ればいいのでしょうか?
>>275 f_bsize はブロックサイズじゃー(゚Д゚)
man statfs しる。
じゃあどれさ。f_bsizeが一番それっぽいんだけどさ。
279 :
264 :2005/10/25(火) 15:22:08
一応ググってはみたんですが見つけられなかったので… 結局wchar_tは使わないほうがいいってことなんですかね
漏れも f_bsize かと思ったので事の成り行きに注目・・・
まともに質問すらできなくて答えてもらえない池沼が 逆切れしてるなw
マニュアル読めと言ってる奴だけがマニュアルを読んでない希ガス
>>279 boost::regexは?C++ですが。
サロゲート使わなくていいんなら、wchar_tで問題ないとおもうけど。
>>275 statfsがあるシステムではそれでも可(某Lの字だけ異端だが実際はほぼ無問題)。
ただしstatfsはPOSIXでは定義されていないので、
POSIXならstatvfsしてf_frsize。またはpathconf(path, _PC_ALLOC_SIZE_MIN)。
>>281 275の質問はまともだろ。質問がまともかどうかもわからないのでは、
自分でもろくな質問ができないのだろうな。かわいそうに。
f_frsize だな。
287 :
264 :2005/10/25(火) 23:15:36
>>286 ありがとうございます
>>283 「Cのライブラリ」と書くのを忘れてました。すいませんでした。
携帯からで出来るだけ文章を短くしようとしていたとは言え
こんな重要なことを書き忘れた自分の無能さに鬱
そもそも、任意の文字コード <-> wchar_t の変換が出来ないので(locale の 文字コードとは変換できるが)、wchar_t は使わない方が良い。
>>288 > 任意の文字コード <-> wchar_t の変換
(゚Д゚)ハァ?
wchar_tて型ですが変換するんですかあ?
>>289 ,
>>291 何か問題が?
struct statvfs の f_frsize は POSIX 互換だと思うけど。
>>292 はいはい。statvfsという答えが出てからそんなこと言ってもなー。
バカはLinux板で遊んでてね。
>>294 > はいはい。statvfsという答えが出てからそんなこと言ってもなー。
変な人…
意味不明の即レスするひととか変な人が増えてきたね。
Lの字しか知らんバカと指摘されたのが悔しかったんでは
ヽ(´ー`)ノ
なんか荒れてきたから名無しに戻る(´Д`)
自分で荒らし始めたくせに。変な人。
このスレは異常な奴が多いな
荒らして楽しんでいる狂った奴がいるようだから、 荒れてきたらスルーしとけ。
305 :
デフォルトの名無しさん :2005/11/06(日) 14:28:19
おまいらUNIX板逝けよ
>>305 禿同。
このスレといいajaxスレといい、明らかに板違いなくせに
ム板に居ついてる香具師が多すぎ。
自演乙
メールを送信する方法を教えてください
sendmail
>>310 それで添付ファイルを付ける方法を僕に教えて!
>>311 OEのメッセージのプロパティ/ソースなどを見れ
314 :
デフォルトの名無しさん :2005/11/08(火) 13:31:03
suse linux 9.0上でAMDのACMLをg++で使用しています。 #include <acml_mv_m128.h> をインクルードしようとすると、 error: '__m128' does not name a type というエラーが出てコンパイルできません。どのようにしたらよいのでしょうか?
__m128を定義しているヘッダを探してinclude。
>>314 スレ(板?)違いです。
Linux板のくだ質あたりが適切じゃないかと。
>>315 ありがとうございます。
#include <xmmintrin.h>
を追加したら、エラーは出なくなりました。
ところが別の問題が出て、コンパイルすると
/tmp/ccZFaKu6.o: In function `main':
/tmp/ccZFaKu6.o(.text+0x11): undefined reference to `fastexp'
collect2: ld returned 1 exit status
というエラーが出てコンパイルできません。
コンパイルオプションには
g++ -m64 -I/opt/acml2.7.0/gnu64/include test.cpp -L/opt/acml2.7.0/gnu64/lib -lacml -lg2c -lacml_mv
を付けているのですが、他に何かオプションを付ける必要があるのでしょうか?
おまえの脳に思考力強化オプションをつける必要があるな
コンパイラやらリンカやらが文句を言うたびにここに書き込むのかw
そう言わずに、教えてくだすれ
コンパイルは出来てるじゃん
322 :
デフォルトの名無しさん :2005/11/09(水) 13:03:12
リンクでした
solarisでgcc動作させるまでえらい梃子摺った俺が来た 騙された、全くやる気のないbinutilsが居た /usr/ucbは一体何?
つwww.sunfreeware.com
ゾンビプロセスをinitの子にしてずっと残らせる方法教えて下さい。 例えばこうゆうプログラムを作って実行します。 int main(void){ int pid; pid = fork(); if(!pid){ printf("child dakedo owari!\n"); exit(0); } printf("parent ikinokori!\n"); sleep(10000); printf("parent owari!\n"); exit(0); } するとsleep(10000)の間中以下のようにゾンビが出来ます。 # ps afx | grep a.out 21716 pts/1 S 0:00 | \_ ./a.out 21717 pts/1 Z 0:00 | \_ [a.out] <defunct> ここで親(21716)をkill -KILLで終了します。すると子(21717)は残る と思ったのですがきれいに終了してしまいます。 どうしたらゾンビを残すことが出来ますでしょうか?
326 :
325 :2005/11/10(木) 14:43:16
書き忘れました。linuxでやってます。
なんのために?
328 :
325 :2005/11/10(木) 16:02:34
どういう場合に残るのか事前に知っておきたいのです。
forkのあとsetsid() してみては?
330 :
325 :2005/11/10(木) 16:34:56
>>329 ありがとうございます。でも駄目でした…
init にバグでも仕込まない限り無理やろ
>>325 forkしてwaitしてfork先でforkしてexitすれば最後のforkが生き残る
こいつは親が死んだ後もゾンビを残したいって言ってんでしょ? 無理でしょ?
う−ん、initにSIGSTOP送ってみるとか
>>333 >>332 の方法で出来るお
(最後のforkの身元引受人がinitになる)
>>334 それをいうならSIGCHLDをSIG_IGN
(移植性なんて見えやしねー)
>>335 それってゾンビの他に生きたプロセスが残るんだよね?
だめじゃん。
残したいのはゾンビなのかーそりゃー無理だ・・・ ・・・あ、できるかも
ていうか・・・不毛だ。
340 :
325 :2005/11/10(木) 19:14:08
みなさんありがとうございます。 やっぱり無理なんですね… ただ、不思議なのが、たまにこういうinitの子になってしまう ゾンビプロセスって出来ることありますよね。 あれは何なんでしょう。
initの子になった後でinitがそいつを処理する前の間。 いつまでもいるならそれはバグ。
342 :
デフォルトの名無しさん :2005/11/11(金) 02:12:50
プロセスの質問に便乗しまつが、forkやexe〜関数を使うプログラミングを マルチスレッドと呼んでいいのかな??
343 :
デフォルトの名無しさん :2005/11/11(金) 02:13:49
マルチスレッドプログラミング?
344 :
デフォルトの名無しさん :2005/11/11(金) 02:16:49
C言語主体のUNIXプログラミングとは、あんまり関係ないんでしょうかね? オブジェクト指向で用いるものなのかな
>>342 それはマルチプロセス。
マルチスレッドは単一のプロセス内で複数スレッドが動くものをそう呼ぶ。
>>345 さん
素早いレスありがとうございます。
私のUNIX_Cの教科書には、スレッドの説明が載ってないのです
メモしておきます。有難うございました
厨くさいスレだ
350 :
デフォルトの名無しさん :2005/11/11(金) 02:52:06
935 名前: デフォルトの名無しさん [sage] 投稿日: 2005/11/06(日) 15:25:10 このsageない基地外なんか過去から全部同じ椰子じゃないかとまで思ってしまう。 (ネタがつまらんのが致命的にキモイ)
>>1 ./ \
.| ^ ^ |
| .>ノ(、_, )ヽ、.| <あまり私を怒らせない方がいい
__! ! -=ニ=- ノ!___
/´ ̄ ̄ .|\`ニニ´/ `ヽ
{ .|__  ̄ ̄ヾ }
i;;',,, r---イ /|,、_,, ,',;:',i
.l;';',;,, } /;\ / ヽ / ,;,;;',;l
.|;;',;, } ./;;;,, \ / ;;;;;;ヽ ,,;;','i
i;',, / /;;,',';; ノ--, ',',;;::',',゙i ,,';';i
i;,'; /./,',',';;" / \ ',',',;;,'i ,;',i
/ / i 、 / ヽ ',;::'、| \
ヽヽヽヾ丿 〈 ヽ'' {////
```` ト, i | 、 i´´´
|',',;; } ! ',',;;i
|,','、 / ヽ',',','|
!;;', / !,',;,;'|
ゾンビではなくキョンシーの作り方を教えてくらさい
テンテンの画像が見られるサイトを教えてください
(;´Д`)ハァハァ
エスケープシーケンスって誰のお仕事? 色とか誰が認識してるわけ?
TeraTerm とかw
あと、カーネル内のコンソールドライバとか、 kterm みたいな端末エミュレータとか。
screenが喰っちゃうこともある。
360 :
デフォルトの名無しさん :2005/11/14(月) 23:59:41
361 :
デフォルトの名無しさん :2005/11/16(水) 19:44:11
初歩的な質問ですみません。Cで ftw(ファイルツリーウオーク)を利用して 指定DIR配下のファイル削除を行うプログラムを作成しています。 再帰的にファイルを探す処理まで出来ているのですが 肝心のファイルを削除する関数を知りませんでした。おしえてください。
なんでUNIXのソケットプログラミングってのはforkを使って 子プロセスを生むんだい?スレッドではできないのかい?
>>362 出来るよ。
fork() を使えば、スレッドに比べれば細かい事を考えなくていいから
サンプルプログラムなんかでよく使われてるだけだ。
364 :
デフォルトの名無しさん :2005/11/16(水) 21:02:40
$./configure $make で、ビルドしたものは、デバッグ可能でしょうか? gcc -g hoge.c gccではなくmakeを使ってコンパイルしたものでは勝手はどう変わるのでしょうか?
361 これでうまくいったら教えてくれ char *unko="a.txt" system("rm "unko);
>>361 remove(3)
unlink(2)
むちむち。良い言葉だよな。
もちもち。のほうが好き
373 :
デフォルトの名無しさん :2005/11/17(木) 19:07:24
C言語なのですが、そのプログラムを起動したユーザSIDを取得できる ステートメントってありますでしょうか?
ユーザSIDってなんだろう?
ステートメントというと if とか while とかかな…たぶん無いんじゃない?
で、ユーザSIDってなに?
まさかこんな面白い質問しておいてsetuidがオチなんてことはないよね
379 :
373 :2005/11/18(金) 00:26:43
すみません正式にはなんていうかわからないんですが UNIX(空)で シャットダウン前にwhoを叩いたときに表示されている ユーザー名のようなIDです。 起動したユーザのIDを取得したいです
380 :
373 :2005/11/18(金) 00:27:58
セットユーザーIDでした
SID = Security IDentifier windowsがユーザーやグループを番号で管理するためのもの unixのuidやgidの進化版、って認識であってる? だからgetuid(2)とかかな
session id しか思い浮かばなかった。
>>379 > ユーザー名のようなIDです。
「のような」て…
プログラミング向いてないんじゃないの?
でもそのアバウトさはプログラマ向き
むしろLisperの思考だな「〜のようなもの」
型推論するから平気です
noyounamonoはよく使います
utmpって誰が更新してるの?
>>388 telnetdとかsshdとかxtermとかいろいろ。
他にはsessreg(1)とか
391 :
デフォルトの名無しさん :2005/11/30(水) 09:22:12
___ ./ \ .| ^ ^ | <あまり私を怒らせない方がいい _| .>ノ(、_, )ヽ、.|___ /´ ̄ ̄_! ! -=ニ=- ノ! `ヽ i;;',,, r--- .|\`ニニ´/ヾ_,, ,',;:',i .|;;',;, } ./イ /|;;;;ヽ ,,,'i i;,'; /./,',',';;;,,\ _ / ',',',;;,'i ,;',i / / i 、 ;;" / \ ',;:'、| \ ヽヽヽヾ丿 / ヽ'' {//// ```` ト, i | 、 i
わかった この流れは 終了
ということにしたいのですねw
は?それがなにか?
ここもツンデレだらけだなw
盛り上げようと一生懸命なのはわかるが、他に方法がないのかよ
UNIXはもうだめかもわからんね
はあ?
Windowsにシェア奪われまくりだったな
出張ご苦労だが、UNIXプログラミングのスレなんだよねえ
WindowsサーバがLinuxサーバを抜いて出荷首位になりました UNIXサーバにいたっては年々減少しています
そろそろ巣に戻れ
短期的にスレの流れを変えたのは
>>398 だぞ
荒らす意図がなくてやってるなら以後控えてくれ
やれやれ
ほらそうやって荒らす そろそろ勘弁してくれ
UNIXはもうだめかもわからんね
僕の肛門もそろそろだめそうです
毛を剃って清潔にしておくように
410 :
デフォルトの名無しさん :2005/12/08(木) 13:54:46
/ ̄ ̄ ̄ ̄ ̄ ̄\ / \ / ヽ l:::::::::. | |:::::::::: (●) (●) | |::::::::::::::::: \___/ | ヽ:::::::::::::::::::. \/ ノ \ / ♪ / ::::i \ / / ::::|_/ \/ ::| | ::::| キュム i \ ::::/ キュム \ |::/ |\_// \_/
キチガイは巣に返れ
タダイマー
ここがキチガイの巣です。
お前が荒してるだけじゃねえか
416 :
デフォルトの名無しさん :2005/12/08(木) 21:00:40
最近の貧乏人は皆こぞってjavaを選択してしまうことがunix_Cプログラミング衰退の原因
頭が固くなりすぎて新しい言語を学ぶこともできないジジイ乙
使い分けすら考えないとはアホだな
UNIX はもうだめかもわからんね
自分自身の現在のメモリ使用量を取得する方法を教えてください。
OS依存です また、あなたの言う「メモリ使用量」の意味を明確に 定義しないことには方法を提示できません
getrusage(2)
自分のプログラムの実行パスを得たいのですがよろしく。
Windows使え。
>>425 > 自分のプログラムの実行パスを得たいのですがよろしく。
環境依存。ここに少しだけ載っている。
http://shinh.skr.jp/binary/b2con.html 抜粋すると:
Linux :
readlink("/proc/self/exe")
MacOSX:
_dyld_get_image_name
Win32 :
HMODULE h = LoadLibrary(NULL);
GetModuleFileName(h, buf, 1024);
Solaris: /proc/プロセス番号/psinfo を sys/procfs.h にしたがって読む。
>388 と同じ事で気になって >389-390 のご回答で納得なんですが これって機構を用意しただけで 使うかどうかは特に決められてないもんなの?
はい
環境はRHLinuxなんですがPOSIXってのに準拠してれば UNIXもLinuxも同じと聞いたので教えてください。 ちなみにUNIX系のプログラムはずぶの素人です。 Dual構成のマシンを使い、あるスレッドを指定のCPUでのみ 動作させたいと思ってます。 Win32(VC++)だと「SetThreadAffinityMask()」と言う関数で 提供されているのですが、UNIX(orLinux)では同様の処理は ありますか?あれば教えて頂きたいのですが。 また参考サイトなんか教えて頂けると幸せです。 宜しくお願いしまふ。
sched_setaffinity お薦めサイトはグーグル
433 :
431 :2005/12/15(木) 14:49:21
thx!!ありがとうございます。 感謝感激雨あられです。m(__)m 確かにgoogle最強ですね。 助かりました。
UNIXはドキュメントがほとんど存在しないから名前知ってないと全くわからないね 死ねよ
確かに日本語のドキュメントは少ないな 英語のできない中卒にはつらいか・・・ とはいえ、Windowsプログラマでも技術英語読めないんじゃ底辺だよなw
ドキュメントっつっても結構砕けた英語多いしな
ていうか、ある程度長くやってりゃ中卒だろうがなんだろうが ドキュメント読むくらいのことは自然となんとかなるようになってこね?
>>434 googleで、キーワード site:linux.or.jp あるいは site:jp.freebsd.orgで検索するとか、
docs.sun.comで検索するとか。
440 :
デフォルトの名無しさん :2005/12/16(金) 00:51:37
解決できる人はメモを残さないし 解決できない人は疑問しか書き残さない だから 行き詰ると どの国の言葉でも 出来ないわからない しか検索に引っかからない ドイツ人は自己解決しても結構まめに回答まで書き残すんだよな
んなことないよ
442 :
デフォルトの名無しさん :2005/12/16(金) 01:03:14
C言語のプログラムで、2、3GBほどのファイルをfopenなどの 関数で操作するにはどうすればいいですか? 開こうとすると Can't open : hogehoge って言われます。 よろしくお願いします。
OS書いた方がいいよ
すごいエラーメッセージ出すOSだなw
>>443 でかいファイルだからってfopen()で失敗するなんてことはない。
449 :
デフォルトの名無しさん :2005/12/19(月) 13:08:02
a.outに関する質問です。 user> ./a.out < a000001.txt > result.txt で結果をtxt化しているのですが、a000001.txtをa100000.txtまで処理させて 一個一個の結果をresult.txtに足していきたいのです。 どのようにしたら良いのでしょうか? (初心者なのでお手数おかけします) ちなみにresult.txtの中身は 1 0 3 2 4 3 3 7 7 4 8 3 5 8 1 6 2 8 7 0 4 8 2 3 となっています。一列目は固定で、順に足していきたいのは2列目と3列目です。
>>449 $ ./a.out < a000001.txt
がresult.txtの二列目
$ ./a.out < a000002.txt
が三列目ってこと?
>a.outに関する質問です。
「a.outに関する質問」か?
451 :
449 :2005/12/19(月) 13:31:57
>>450 レスありがとうございます。
a000001.txtは一列目から三列目まで出力されます。
同様にa000002.txtにも一列目から三列目まで出力されます。
10万ある各ファイルの二列目と三列目だけを足していきたいのです。
a.outに関する質問じゃなかったですか(^^;;
板違いじゃないの
>>452 シェルプログラミングだと思えばいいよ
>>451 ./a.out <$f |head -n 2|tail -n 2 >> result.txt
1〜100000は自力でがんばれ
>>453 そのheadとtailは意味あるの?
というか列と行間違えてない?
要件が曖昧でわからん
どっちにしろ「UNIXプログラミング」じゃないからスレ違い。
457 :
449 :2005/12/19(月) 15:20:05
要件を詳しく書きます。 a000001.txtは以下のように出力されたとします。 1 0 3 2 4 3 3 7 7 4 8 3 5 8 1 6 2 8 7 0 4 8 2 3 a000002.txtも以下のように出力されたとします。 1 0 3 2 2 6 3 4 7 4 6 3 5 2 2 6 6 9 7 1 1 8 1 2
これが10万まで続くのですが、結果の2列目と3列目を足していきたのです。 1 0 6 2 6 9 3 11 14 4 14 6 5 10 3 6 8 17 7 1 5 8 3 5
459 :
449 :2005/12/19(月) 15:40:33
板違いのようなのでシェルスクリプトスレにいってきます。 ご迷惑おかけしました。
10まんこもあるとシェルスクリプトはどうかと思う Cでつくれば?こんなの初心者だって出来るでしょ
何故C
なんでCになるんだ?
perlなら30秒で瞬殺だろ。 実行は2分くらいかかるかもな。
なぜシェルスクリプトじゃだめなのでしょうか
UNIXといえばCでしょ PerlでもCでもコーディング量はそんなに変わらん気がする main() { int loop, i, n, m; char fn[100]; static long a[9], b[9]; FILE *fp; for(loop=0; loop<100000; loop++) { sprintf(fn, "a%06d.txt", loop); fp = fopen(fn,"r"); while(fscanf(fp, "%d %d %d", &i, &n, &m) == 3) a[i]+=n; b[i]+=m; } fclose(fp); } for(i=1; i<=8; i++) printf("%d %d %d\n", i, a[i], b[i]); }
KISS
ふつー awk
awkは書かねぇ一行たりとも
470 :
449 :2005/12/19(月) 21:54:39
皆様、レス本当にありがとうございます。
説明足らずで皆様に混乱を招きました。(特に
>>465 さんすいません)
a000001.txt(a000001.txtも同様)を自作のプログラムで処理すると、数字が三列ある結果を出力します。
ここで問題となっているのが、私が作ったプログラムでは
while(fgets(str,500,stdin) != NULL){
sscanf (str,"%s %s %s %s %s %s",a,b,c,d,e,f,);
でファイルを読み込ませているので、./a.outした時に一つのファイルしか処理できません。
10万回もa.outは物理的に無理なので、一度に10万個のファイルを読み込んで各一ファイルごとに
処理した結果の2列目と3列目を足していきたいのです。
C言語では無理でしょうか?
471 :
449 :2005/12/19(月) 21:56:26
gccでコンパイルした後は user > ./a.out < a000000.txt > result.txt で実行しています。(result.txtに数字が3列ある結果が入っています)
fopen(3)しろ、ボケ
なぜ10万回もa.outは物理的に無理なんだろう
cat a*.txt | ./a.out でいいんじゃないのか?
476 :
449 :2005/12/20(火) 00:04:35
ご迷惑をおかけしている449です。
皆さんのおかげで無事解決出来ました。
スレ違いもいいとこですが、それにも関わらず丁寧にアドバイスを頂き
本当にありがとうございました。
>>475 さん
その方法は前に試していたのですが、Argument list too longと出て
実行できなかったんですよ。
一番中身の無い言葉だよな。「無事解決出来ました」ってのが。
自作のプログラムだってんだからa.outの方を改造せよっつーのが このスレ的な回答だと思うんだけど…
>>478 1.なんでもかんでもフィルタで解決する
というUNIX的プログラミング精神に反するからだろ
ソースの改造は2番目
小さく単純に
481 :
431 :2005/12/22(木) 13:55:24
>>431 でsched_setaffinity()の件を書き込みした者です。
早速使ってみたのですが動作しました。(プロセス単位で。)
ですが最終的にはスレッド単位でCPUの動作を割り振りしたいのです。
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man2/sched_setaffinity.2.html ↑のサイトの「注意」項目で、「各スレッド単位に独立して調整することが
できる。」とあるので、pthread_create()で作成されるスレッド内で、
setaffinity()を行ったのですがCPUの割り振りをしてくれません。
(設定してもいつも同じ方のCPUの負荷が上がってる。エラーは無し。)
またそれ以前の話かも知れませんが、プロセスIDは妥当な値を取得出来る
のですが、createの際のthreadIDが「-1215315313」等と言ったアドレス
っぽい値を取得します。pthread_tってINTの別名じゃないんでしょうか?
setaffinity()の第一引数のpidはスレッドIDでも良いみたいなので、
渡す事が出来れば動くのかな?と思っているのですが・・・。
素人なりにやっているのですが相当苦労してます。orz。
(viも超〜基本しか使えない程度です。)くだらない質問で
申し訳ありませんが、どなたか回答頂けるとうれしいです。
ちなみにOSはRedHatからFedora4に変えました(別に違いありませんよね?)
宜しくお願いしますm(__)m
482 :
431 :2005/12/22(木) 14:19:40
すいません。ageで。
> pthread_tってINTの別名じゃないんでしょうか? ちがいます。 つーか gettid(2) 使えって書いてあるじゃん。
484 :
デフォルトの名無しさん :2005/12/25(日) 00:27:31
すいません。標準出力とforkについてわからないので教えて下さい。 (m。_。)m オネガイシマスコンパイルと実行環境はcygwin+GCCです。 main() { printf("hoge1"); printf("hoge1\n"); if(fork()){/*親プロセス*/ printf("hoge2"); printf("hoge2\n"); } else{/*子プロセス*/ printf("hoge3");←出力されてない printf("hoge3\n"); } } 実行結果: hoge1hoge1 hoge2hoge2 hoge3 となってしまいます。 子プロセスで改行なしの標準出力がされません。なぜでしょうか? 調べてみると改行があると出力されるようなのですが・・・ また回避策もお願い致します。 (子プロセスの標準出力を親プロセスとのパイプにつなぐとか・・・) どうか御教授の方宜しくお願い致します。
>>484 微妙に親が早く死ぬんじゃね?
でも、うちだとちゃんと出力されたお。
486 :
デフォルトの名無しさん :2005/12/25(日) 00:37:25
487 :
デフォルトの名無しさん :2005/12/25(日) 00:41:59
>>484 printf("hoge")をすべてfprintf(stderr, "hoge")に変えてみるとか
子プロセスの終了をwaitで待つとか
いろいろやってみ
>>484 うちのlinuxだとちゃんと出力されるからわからんが、改行無しでprintfする場合、直後に
fflush(stdout);
を加えてみたら。
>>484 cygwin でやってみたけど、全部出た。
490 :
デフォルトの名無しさん :2005/12/25(日) 01:01:26
うちのcygwinでも全部出たけど、デフォルトのプロンプトだと 欠けることがあった。プロンプトにESCシーケンス使ってると、 変になるかもね。(つーか、waitしろよ) $ ./a.exe hoge1hoge1 hoge2hoge2 foo@bar ~/srcoge3hoge3
>つーか、waitしろよ 同意w
>改行無しでprintfする場合、直後に >fflush(stdout); >を加えてみたら。 同意w
すぐ後に改行出してんだからflushするしないは関係ないし、 waitするしないも関係ないだろ。
waitしないと確実なことはできないじゃない? この場合は親子そろって普通に終了してるのも問題かもね。 _exit()
順序を制御しようとしてるわけじゃないんだからどっちがいつ終わろうが関係ないんじゃね?
つーか、コードが悪すぎ
498 :
デフォルトの名無しさん :2005/12/25(日) 19:26:12
丁度forkとプロセスの話が出ているので便乗質問。
パイプを使って対話型のプログラムを親プロセスから
操作したいと思ってテストプログラムを作ったのですが
うまくいきません。
子供はfgetsでループして取ってきた文字列をstdoutに出力
するという単純なプログラムです。親はforkして以下の図の
ようになるようにpipe処理をした後、適当な文字列をwrite
して直後にreadしています。
+------+ +------+
|親 |---(stdin)-->|子 |
| |<--(stdout)--| |
+------+ +------+
最終的な理想は、親が子にさまざまなコマンドを発行して
操作し、結果を取得するということをアプリケーションが
終わるまで行うことです。
テストプログラムではreadした瞬間止まってしまっているようなの
ですが双方向パイプでコマンドと対話するのはなにかコツの
ようなものが必要なのでしょうか?。
テストで作った子(メッセージ欄に貼り付け)と親プログラム(添付txt)
のソースは以下のURIにあります。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=1344
499 :
デフォルトの名無しさん :2005/12/25(日) 19:52:33
超高速ソートを考えてついたのですが。すでにありますかね? その名もハッシュソート。 だいたいどんなのかわかりますよね? ありますか。
>>499 いわゆるBucket sortのことか?
501 :
デフォルトの名無しさん :2005/12/25(日) 20:01:18
ハッシュを使えば、メモリと計算量のトレードオフを調整できるな。
>>498 親が送る文字列、'\0'つけたらダメなんじゃね?
504 :
499 :2005/12/25(日) 20:09:13
データ数をnだとして 配列をその5倍くらいとっておいて データを数字1〜5nに分布させるような関数を 用意すれば6n位のオーダでソート出来ます。 あんまり配列が小さいと頻繁に衝突して効率が悪くなります。
データ特性によって、うまkハッシュ関数を切り替えていければ面白いかもしれない。
506 :
499 :2005/12/25(日) 20:24:57
5000万行以上のテキストを並び替えたいのですがソートを一日中やってても終わりません。 どなたかプログラム出来る方、ハッシュソートを作ってもらえませんでしょうか? これなら数十分だと思うのですが。
何ソートつかってんのよ。
509 :
499 :2005/12/25(日) 20:41:04
1万行ずつわけてソートして、あとでマージすればよくね?
>>509 なんで MS-DOS/Windows 用なんだよ
512 :
499 :2005/12/25(日) 20:47:51
>>511 いまWindows XPを使っています。
スレタイ良く見ろ
515 :
499 :2005/12/25(日) 20:55:45
C言語なら関係ないんじゃないんじゃないですか
>>498 子はstdinがパイプなので行バッファリングではなく完全バッファリングするためfgetsでブロック。
親は子から入力がこないのでreadでブロック。
というデッドロック。
そういうときは疑似端末を使うらしい。
518 :
499 :2005/12/25(日) 21:02:18
>>517 > 子はstdinがパイプなので行バッファリングではなく完全バッファリングするためfgetsでブロック。
ここがまちがい。
質問です。 あるプログラムで、mallocを数千回連続で実行すると mallocがセグメンテーションエラーになります。 これを回避する方法ってありますでしょうか? printf("before\n"); hoge = (struct hoge *)malloc(sizeof(struct hoge)); printf("after\n"); $ ./a.out before after before after before after before Segmentation fault
> fflush(NULL); これは何?何でfflush(stdout)じゃないの?
>>498 親の、
read(out[R], buf, BUFSIZ);
は、BUFSIZ書かれるまで帰ってこない
親もfgetsすればいいんじゃないの?
>>522 > read(out[R], buf, BUFSIZ);
> は、BUFSIZ書かれるまで帰ってこない
これもまちがい。
つか
>>503 に正解が書いてあるのに。
>>523 失礼しました。
環境は次の通りです。
ハード:P3-800MHz MEM:384MB
OS:Debian serge kernel 2.6 i686 GNU/Linux
コンパイラ:gcc-3.3.5
>>525 struct hogeの具体的なサイズと実行してるシェルの
ulimit -aの出力を書いてください
>>524 いやまぁ503も間違いだから全部まちがいだな
>>520 >>525 その環境なら書き込んだ瞬間に実際のメモリの確保が行なわれるので、
Segmentation fault が起きるなんてありえないと思うんだが。
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
struct hoge {
char s[INT_MAX];
};
int main()
{
int i;
struct hoge * tmp = NULL;
for (i = 0 ; i < 100000000 ; ++i) {
tmp = (struct hoge *)malloc(sizeof(struct hoge));
}
return 0;
}
まずこれは問題なし。tmp に書き込んでないから。
#include <stdio.h> #include <stdlib.h> #include <limits.h> struct hoge { char s[INT_MAX]; }; int main() { int i; struct hoge * tmp = NULL; for (i = 0 ; i < 100000000 ; ++i) { tmp = (struct hoge *)malloc(sizeof(struct hoge)); tmp->s[0] = '\0'; } return 0; } これは Segmentation fault。 メモリが確保出来なくなった時点で malloc が NULL を返すので、 そこに書き込んだ瞬間にアウト。
#include <stdio.h> #include <stdlib.h> #include <limits.h> struct hoge { char s[INT_MAX]; }; int main() { int i; struct hoge * tmp = NULL; for (i = 0 ; i < 100000000 ; ++i) { tmp = (struct hoge *)malloc(sizeof(struct hoge)); if (tmp) { tmp->s[0] = '\0'; } } return 0; } これは malloc が NULL を返すが、if で対応してるので問題ない。 結論から言うと、メモリが確保できなかった場合のエラー処理を 適切に行いなさいってこった。
532 :
497 :2005/12/26(月) 00:22:25
>> 503 ・・・ああ!確かにそのとおりです。 で、strlen(msg) + 1の+1を削除してみたところうまく行きました。 ただクライアントでfflushをしてやらないと止まってしまうようですが・・・。 もうちょっと調査をしてみます。 >> 517 アドバイスありがとうございます。擬似端末についても調べてみます。 >> 522 fdopenでFILE*に変換できるのでしたっけ。こちらも試してみます。 >> 519 >> 524 >> 527 すいません、知識不足でどこが問題なのかわかっていません。 もうちょっと勉強してみます。 # あまりパイプに関する資料が見つからなくて困っているのです…
すいません、間違って497さんを騙ってしまいました。 前の書き込みは498です…。
>>526 core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
>>528-530 場合分けによる提示ありがとうございます。
しかし、今回は、malloc自体がセグメンテーションエラーになっているようなのです。
こんな事ってあるのでしょうか?
struct hoge *hoge;
printf("before\n");
hoge = (struct hoge *)malloc(sizeof(struct hoge));
printf("after\n");
if (!hoge) exit(1);
$ ./a.out
before
after
before
Segmentation fault
535 :
525 :2005/12/26(月) 00:53:45
>>526 具体的なstruct hoge のサイズは次の通りです。
struct hoge {
struct hoge *next;
unsigned int fuga;
struct foo *foo;
}
struct foo {
struct foo *next;
unsigned int *bar;
}
mallocの中でSEGVするのはかなりの確率でヒープの管理 領域が既に壊れている場合。malloc以外の場所にバグが あってそれが偶然mallocの中で発言したってことが多い。 なんだかんだ言って、本当にmallocだけのプログラムでは 試してないでしょう? 再現する最小限のプログラムまで 落とし込むことを勧める。
よくあるのは -あんたのプログラムにバグがあってメモリを壊している -不正なポインタに対してfree()を呼んだ のどちらか
>>532 > # あまりパイプに関する資料が見つからなくて困っているのです…
あなたはバッファ付きI/O(stdio)を根本的に理解してない。
>>532 > # あまりパイプに関する資料が見つからなくて困っているのです…
Advanced Programming in the UNIX Environment 一冊あれば充分。
>>535 >>537 の言う通り、断片的なコードじゃなくて、再現する一番小さい
コードを貼れ。
あと Debian の sarge なら、libc は libc6 だと思うけど、それなら代わりに
libc6-dbg を入れて、こいつとリンクさせてgdb で見るのが一番手っ取り早い。
>>532 >ただクライアントでfflushをしてやらないと止まってしまうようですが・・・。
クライアントは stdio 使ってるから、
バッファがいっぱいになるか、改行するなり、fflushするまで実際には送信されないよ。
> クライアントは stdio 使ってるから、 > バッファがいっぱいになるか、改行するなり、fflushするまで実際には送信されないよ。 不正確な表記。
544 :
デフォルトの名無しさん :2005/12/26(月) 12:27:23
すいません。ちょっと教えて下さい。 forkを使って、親プロセスと子プロセスを作成した後、親と子をパイプで 結び、パイプで通信(子が書いて、親が読む)させたいのですが、その時ってパイプの端をselectを 使用して待てるのでしょうか? できれば使用例も御願い致します。
http://i-111.hp.infoseek.co.jp/sakuramochi/ すみません。ユニックスかわからないんですが、ここのカウンターが変になってしまい、困っています。
多分、最後の画像結合処理が上手くいってないと思うんですが、
print &gifcat::gifcat(@dat);#関数を実行して、カウンターの画像をひとつの画像にまとめる
exit; #処理終了
ここの、、、初心者なので全然わからないんですが、誰か教えてたも。
547 :
523 :2005/12/26(月) 13:15:23
>>525 環境がLinuxだとすると memory overcommit かもしれない
詳しくはぐぐってもらうとして、対処はあきらめるか
/proc/sys/vm/overcommit_memory を2にするらしい
>>544 UNIXならselectで待てるけど
Windowsの場合はselectはネットワークsocket専用なので待てない
550 :
デフォルトの名無しさん :2005/12/26(月) 14:26:04
552 :
デフォルトの名無しさん :2005/12/26(月) 15:43:32
>>551 #define READ 0
#define WRITE 1
int main()
{
fd_setfdset;
charstr[80],cmd[80];
intpipe[2];
if(pipe(pipe)){
printf("->pipe_error\n");
}
fd = pipe[0];
FD_ZERO(&fdset);
FD_SET(fd, &fdset);
if(fork()){
switch(select(fd, &fdset, NULL, NULL, NULL )){
case -1: break;
default:
if(FD_ISSET(fd, &fd_set)){
read(pipe[READ], cmd, sizeof(cmd))←ここに入ってこない
}
break;
}
}
else{
strcpy(str, "0987654321");
write(pipe[WRITE], str, sizeof(str));
}
}
readできないのです・・・
>>552 switch(select(fd+1, &fdset, NULL, NULL, NULL )){
554 :
デフォルトの名無しさん :2005/12/26(月) 16:17:40
>>553 あっ忘れてました。
fd+1に変更したけど結果は一緒でした。
>>548 もとネタはバッファはデフォルトのままだよ。
556 :
デフォルトの名無しさん :2005/12/26(月) 16:53:43
>>554 FD_SET(fd+1, &fdset);
ええ?
558 :
デフォルトの名無しさん :2005/12/26(月) 17:02:17
コンパイルできないソース貼られてもなあ
560 :
デフォルトの名無しさん :2005/12/26(月) 17:44:54
>>559 上記はすいません。これはコンパイルできると思います。
#include <sys/types.h>
#include <unistd.h>
#include <sys/ipc.h>
#define READ0 #define WRITE1
int main(void)
{
fd_set fdset;
char str[80],cmd[80];
int pe_pipe[2],fd,error;
error = pipe(pe_pipe);
if(error != 0)
printf("->pipe_error\n");
fd = pe_pipe[READ];
FD_ZERO(&fdset);
FD_SET(fd, &fdset);
if(fork()){
switch(select(fd, &fdset, NULL, NULL, NULL )){
case -1: break;
default:
if(FD_ISSET(fd, &fdset))
read(pe_pipe[READ], cmd, sizeof(cmd));
}
}
else{
strcpy(str, "0987654321");
write(pe_pipe[WRITE], str, sizeof(str));
}
}
sizeof(cmd) => strlen(cmd) sizeof(str) => strlen(str)
あー、いや strlen(cmd) はうそ。
563 :
デフォルトの名無しさん :2005/12/26(月) 18:05:02
>560のコードでselect(fd,...)をselect(fd+1,..).にしたら 通るようになったけど。
タイムアウト指定したら動いたけど? なんでかなー。
567 :
デフォルトの名無しさん :2005/12/26(月) 18:49:40
>>564 通るようになった?動いたって事?
select(fd+1,...)にしても動かないですけど・・・
568 :
564 :2005/12/26(月) 18:54:59
FreeBSD 6.0だが、動いて、きちんと終了した、ということ。
とりあえず、straceとか、ktraceとか動かしてみたら?
570 :
デフォルトの名無しさん :2005/12/26(月) 19:24:38
571 :
デフォルトの名無しさん :2005/12/28(水) 23:28:54
武器ら棒な質問ですいません。 MPIのメリットはなんでしょうか? そもそもMPIというものは なにをするものでなんでしょうか? MPIについての概要がわかるサイトがありましたら、ご教示ください。
分かってるんなら聞くなよ
SolarisのLWPとユーザスレッドについて何ですが、 Solaris10上でなにも考えずにスレッド作ると、 スレッドと同じ数だけLWPが生成されるんですが、 このLWPの数を意図的に減らすことってできるんでしょうか? なんか、SOLARISインターナルっう本を読む限りでは、 デフォルトでは「ユーザスレッド数>LWP数」な、 いい感じに調整されるって書いてあるんですが、 Solarisのバージョンがあがって仕様が変わったんでしょうか?
>>573 Solaris 8 からスレッドモデルが変わった。現在はユーザスレッドと LWP は 1:1 の関係。
thr_create() した分だけ LWP がバインドされる。
Solaris 8 より前 --> M:N thread model
Solaris 8 --> M:N と 1:1 が LD_LIBRARY_PATH で選択出来た
Solaris 9 --> 1:1 thread model のみ
Solaris 10 --> 1:1 のみ。libthread が libc に入った
Solaris Internals は古いリリースの Solaris を元に記述されているから、ここら辺は
カバーされていない。詳細は「代替スレッドライブラリ」でググってみ。
そもそも何で LWP の数を減らす必要が発生したのか考えた方が良いと思う。 それは何か間違いを犯している兆候だから。
576 :
573 :2006/01/03(火) 15:19:35
>>574 どうもありがとうございます。
>>575 深い理由は無いんですが、
いろいろと、スレッド周辺に関して調べたいもので。
どこで質問するのかわかんね ~# /lib/libc.so.6 GNU C Library stable release version 2.3.2, by Roland McGrath et al. Copyright (C) 2003 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Compiled by GNU CC version 3.3.5 (Debian 1:3.3.5-12). 何が起きてこうなるの?
何を質問したいの
>>577 ELFのバイナリにはインタプリタへのパスを埋め込むことができる。
Linuxの場合はコンパイル時に明示的に静的リンクを指定しない
限り/lib/ld-linux.so.2あたりが埋め込まれる。
% strings /lib/libc.so.6 | grep ld-linux
で埋め込まれているのがわかるだろう。
shスクリプトを実行すると/bin/shが呼ばれるのと同じように、
インタプリタへのパスが埋め込まれているELFオブジェクトが
"実行"されるとカーネルはインタプリタを呼ぶ。だから
% /lib/ld-linux.so.2 /lib/libc.so.6
でも同じ結果になる。詳しいことはman ld.soすること。
581 :
デフォルトの名無しさん :2006/01/06(金) 16:35:02
LinuxでSIGSEGVやSIGFPEを無視する(あるいはエラー処理をしてプログラムを続行する)にはどうすればよいのでしょうか? 普通に無視すると無限ループになってしまうので。。。
「無視」とはどう動くのを期待してるのか次第
>>581 setjmpしておいた所にlongjumpする。
584 :
デフォルトの名無しさん :2006/01/08(日) 13:40:16
UNIXネットワークプログラミングを読むと、バルク転送には TCPを使うべきだって書いてありますよね。いまだにファイル転送にFTPを 使う意味ってなんなんでしょうか?
F T P は ぁ 〜 、 T C P の ぉ 〜 上 位 プ ロ ト コ ル で 〜 す 。 H T T P も ぉ 〜 ( r y
いまどきはUUCPですよ
B-PLUSが最速ですよ
FTPってサーバからクライアントへの接続があるよね あれをなんとかしたのがPASV方式って認識であってる?
まあ、ぶっちゃけそう。
>>589 ありがとう
お礼にうちに来て妹とファックしてもいいよ
サーバーからクライアントはPORTの方だろ PASVはクライアントからサーバーへ繋ぎに逝く
>>592 PASVなモードではPORTコマンドを使わないような書き方だな…
みんな日本人語が通じないぽい(><
日本人語てなんやねん(><
負け犬必死だな
人少ないな もうこのスレにはUNIX使いはいないのか
人はいるけど書くことがないってところだろう
ここに書いてもノイズしか拾えないような……
sed '/^$/q' -> sed -e "/^$/q" に書き換えるとエラーになります
$ をエスケープすりゃいいんじゃねえの? ^ もか?
603 :
デフォルトの名無しさん :2006/01/13(金) 16:47:36
UNIXってWindowsのSendMessageみたいに同期処理される関数ってないの? mq_sendのmsg_prioの優先順位高くしても同期処理はもちろんされないよね。
WindowsのSendMessageと、UNIXのmq_sendは全然違うレイヤーのサービス。 Glib(のGObject)のsignalが、SendMessageに相当。 C++だとboostのsignalやQt(C++の独自拡張あり)のsignal/slotなど。
>>604 SendMessageに相当→SendMessageのメッセージモデルに相当
signalのばあいキューイングされないからそのまま置き換えたら何が起こるかわからないよ
607 :
デフォルトの名無しさん :2006/01/13(金) 17:25:32
拡張されたReadTimeSignalの場合はキューイングされるんじゃなかったっけ? でもこれって、LinuxとSolarisぐらいにしかない?
608 :
デフォルトの名無しさん :2006/01/13(金) 18:22:27
やっぱ20年近くも後にいい物だけを取り込んで設計されただけあって、 Windowsはよく出来てるわ。過去との互換性を無理やり維持し続けながら 新しい機能を盛り込んでいくUNIXのやり方がだめってわけじゃないけど。
w
windowsの方がライトプログラマには極めて優しいよな
hello world は unix の方が早く書けんじゃね?
>>604 とりあえずGlibの使い方を調べてみます。どうもでした。
マニュアルにはepoll_create(int size)のsizeはevent backing storeのサイズだと 書かれているけどevent backing storeって一体何のことなんでしょうか どんな値を入れればいいのかがさっぱりです >but just a hint to the kernel about how to dimension internal structures. とも書いてあるので適当な値でも困ることは無さそうですが・・・
>604 > Glib(のGObject)のsignalが、SendMessageに相当。 それは微妙に違う。 メッセージはメッセージでもGSignalはObjCやSmalltalkのアレみたいなもの。
617 :
デフォルトの名無しさん :2006/01/16(月) 01:12:58
GTKでテキストエントリを使用しようと思ってのですが、 テキストエントリの表示サイズを指定する方法がわかりません。 画面の横いっぱいにテキストエントリが表示されてしまいます。 固定化するメソッドとかは無いのでしょうか? 何か方法があれば教えてください。
619 :
617 :2006/01/16(月) 02:23:02
>>618 わかりやすいドキュメントありがとうございます。
gtk_table_atachの引数が問題だったみたいです。
こういう場合は、GTK_SHRINKを引数にとるんですね。
勉強になりました。
write って書き込みバイト数 0 で呼ぶと 何もしない?
ためせば。
またすぐそーゆーことゆー
>>622 Linuxだとmanに書いてあるよ
>ssize_t write(int fd, const void *buf, size_t count);
>If count is zero and the file descriptor refers to a regular file,
>0 will be returned without causing any other effect.
>>623 レギュラーなファイルって、ソケットも含まれるかな?
デバイスファイルならそれは挙動が決まってはいないだろうけど。
w
>>624 For a special file, the results are not portable.
>>624 regular file って、普通のファイルのことだぞ
socketは普通ファイルじゃないだろ
regular満タンで
↑ グロ
仕事でMotif2.1使う羽目になったから本を探そうとしたが、AmazonだとよくてMotif1.2、 下手すると「Motif1.2は発表されました」って時代の本ばかり。 つーか、紀伊国屋にはそのうちの1冊しかなかったよ_/ ̄|○ それ以外でもGtkがGnomeのおまけで1冊、Qtが2冊、なんてこったい。
>>633 差分は man 参照すれば解説本は 1.2 の奴で大丈夫だよ.
いまだに売ってるかどうかしらんが, 以下が日本語処理について
結構詳しかったりするのでわりとおすすめ.
ある程度 2 の方向性とかも書いてあるし...
OSF/Motif ルールキットプログラミング [I],[II]
著者: 林秀幸 日刊工業新聞社
ISBN4-526-03601-3
ISBN4-526-03739-7
openmotif/demos/programs/にたくさんサンプルがある。 i18ninputの下にXIM関係もある。
637 :
633 :2006/01/20(金) 16:35:57
ToolTalkがさっぱり判らないんですが、 判りやすい解説とかありませんか?
641 :
639 :2006/01/21(土) 19:51:03
済みません。それを読んでも理解できないので、 もっと低脳向けのゆるゆるな奴を捜しているんですが・・・
>>643 天下のHPの癖に文字化けか
エンコードきちんと設定しとけよアホかHP
645 :
デフォルトの名無しさん :2006/01/25(水) 23:23:06
\\\\\\\ i::::::::Windowsヾi ////////// \\\\\\ |:::::::| ,,,,,_ ,,,,,,| //////// \\\\\ |r-==( 。);( 。) ////// \\\ ( ヽ :::__)..:: } / ヽ ___ /// \ ,____/ヽ ー== ; ,-、 ( ィ j / UnI \ r'"ヽ t、 \___ ! (Y _)、 / / | ^ IX | / 、、i ヽ__,,/ \ / / (_,, )ヽ、. / | / ヽノ j , j |ヽ / /\ !ニ=- ノ _!_ |⌒`'、__ / / /r | / / \ \ ヽニ´/ ̄ `ヽ {  ̄''ー-、,,_,ヘ^ .| / / \ \ 〉/ } アホ de GOMEN NE ゝ-,,,_____)--、j / / \ \ / i,、_, , ,',;:',i / \__ / / / \ \ l l ,; / ,',l | "'ー‐‐---'' / / ヽ ン´ヽ ,';','i / l`、 / / / (;;/;;,',';; ゙i ,;';i ,〃 _l:::::`ー,=-'( / / /,',',';;" /i ,;',/ / ´ゞ._;;;:r';二二二´__ノ ,' 、 / / \ l ,.''" `'(:::)、:: ` 、 〈 < {//// ; ,'" `ー、__ `l i;,;、 ! ´´´ l ;' /::::::::::::::::ノ !,;; i | ._i' ヽ`''「 ̄ ̄ |,','、 i
任意の生年月日と今日の日付を入力すれば、 産まれてから今日まで生きてきた日数を出力するプログラムを作れ。 さらに、任意の整数nを入力して、産まれてからn日目が、 いつかを出力させるプログラムを作れ。 ちなみに、閏年は以下のようにして決められる。 1)基本的に西暦が4で割り切れたら閏年。 2)しかし、西暦が100で割り切れたら閏年ではない。 3)しかし、西暦が400で割り切れたら閏年とする。 レポート作成 予備的考察、プログラム、プログラムの説明、計算結果、考察 フォートラン使用・・・
じゃ、考察だけ。 「やはり宿題は自分でやってこそ身に付く物だと実感した」
誰か 助けてくれ・・・orz
はい質問、任意の生年月日、ということは、 神武天皇の誕生日など入れても算出する 必要がある、ということですか?
マルチってなんじゃー;; ごめんなさい いろんな板で質問して・・・ 身につかなくていい、つかなくていいんすよ先輩! お願いしますorz
そんな気持ちで社会に出て来られても困るな。
>>646 > 任意の生年月日と今日の日付を入力すれば、
同じ西暦でも現用のグレゴリオ歴とユリウス歴の切り替え点が
あるし, 切り替え点も国によっ違ったりするため, 出題の方に
問題がある.
ましてや, 国によっては元号問題その他がある云々のへりくつ
をこねくり倒して,
> 予備的考察
の部分で, 出題自体がナンセンスだと決めつけ, ゆえに,
> プログラム、プログラムの説明、計算結果、
は事実上不可能だとし,
> 考察
の部分で, 「こんな出題をするおまえは能無しか!!!」と罵倒し
て終わる.
ってなところでしょうかね?
たしかに・・・な んー・・・;; ごめんなさい 板汚しました。
ま、頑張れよ!
じゃあ重要なヒントをあげよう。
まずは、自分が生まれてから今日が何日目か、手で計算してみろ。
単に答だけ出すんじゃなくて、数学の問題を解くように思考過程を
きちんと押さえるんだぞ。
自分で筋道立てられないから大きな問題を出されるとどうしていいかわからず
にっちもさっちもいかなくなるんだろうな。頭の悪い奴。
>>653 工学的には、適当な仕様を定めて解を出すべき。理学的には知らんけど。
まあちゃんと計算すれば、今まで食べたパンの枚数も概算できるよな
660 :
デフォルトの名無しさん :2006/01/27(金) 02:17:32
Linux で malloc() がスレッドセーフかどうかを調べたいのですが、 man にはスレッドについての記述はありません。 実験を繰り返すほかに何か手は無いでしょうか?
glibcのmallocはptmalloc2ベースでMT-Safeです。 $(GLIBC)/malloc/malloc.cのコメント以外に詳しいドキュメントはありません。 /lib/tls/libc.so.6がlinkされていれば、MT-Safeです。
662 :
660 :2006/01/27(金) 10:39:51
>>661 ありがとうございます。ソースを漁って確認することにします。
signalてマルチスレッドなの?selectとか誰の領域でスタンバっててくれるの? いやもっと掘下げないと自分が理解できない、alarmとかは誰の仕事? もう質問の仕方がわけわかんないんで、猿でもわかるUNIXシステムコール入門本教えてください
>664 下のURL最高、そんなサンプルが見たかった。 しかも本の説明どんぴしゃ!注文する。本当ありがと! ヘッダ広げて片っ端から叩いてるのにわからなくて悔しいぜ 本たけー
UNIXでお勧めのBSDか商用のコンパイラを 教えたいただけないでしょうか?
(゚д゚)ハァ?
UNIXでお勧めのVAXか商用のEmacsを 教えといただけないでしょめか?
UNIXでお勧めのSystemVか商用のlsを 教えちいただけないでせうか?
「BSDか商用の」っていうのはライセンスの話じゃねえの? ようするにGPLじゃないやつみたいな感じ。 なんのコンパイラか知らんけどさ。
マヂレスすると、BSDL か商用って事ぢゃないかと。
う、被った…
コンパイラ自体で商売しようってんでない限り gccでかまわないと思うんだが、何が問題なんだろう。 x86系ならIntelの奴とか、 他の石でもプロセッサメーカーが出してるコンパイラがあるはず。 商用UNIXもgccでないコンパイラは載せてる。 お勧めかどうかは用途次第なのでなんともいえないが。
>>674 gccは顧客や上層部が信頼してないときがあるからな
いや、信頼というよりは責任をなすりつける先が無いことに対する不安か
Solaris なら Sun Studio がダウンロード出来る。
>>671-672 そうです、BSDLでした。orz
>>674 ,676
研究目的で配布予定とかは無いのですが念のためにGLP系以外で
作ろうかと思いました。
ありがとうございました。教えて頂いたのを参考にさせてもらいます。
すみません、シェルと同じワイルドカードのマッチング判定をしたいのですが そのまま使えるような関数ってありますか? (regcomp()は、そのまま使うと"*.txt"がコンパイル出来ないし)
glob(3C)
むー、なんかbashのソースをちらっと眺めた限りでは 自前で判定してるっぽいな・・・
あ、globというのがあるのか。 でも、「文字列の一致判定」じゃなくて「一致するパスの列挙」だな。 欲しいのとはちょっと違う。 自前でreaddir()するつもりだったけど 書き換えることも考えよっと。
682 :
679 :2006/02/06(月) 02:31:37
(;つД`)
あら、fnmatchという、そのものずばりもあるのか。
>>679 ごめん。もっとよく調べてから書き込めばよかった。
書き込んでからもリロードせず調べてたもんだから。
でもありがとう。
>>681 「ちょっと違う」←嘘じゃん? ズバリじゃん?
>>677 GLPか…プラットホーム(wくらい書いた方がいいと思う。
685 :
デフォルトの名無しさん :2006/02/08(水) 03:42:47
>>683 scandir() というのも Linux にあるぞ。UNIX にもあるんじゃないのか?
man 見ると BSD 4.3 から取り入れられたと書いてあるぞ。
686 :
デフォルトの名無しさん :2006/02/08(水) 03:43:54
あ、ちょっと違うな。scandir() は正に scan しかしないや。比較は自分で書くんだ。
シェルと同じ展開をさせたいならシェルを起動すればいいじゃない。 #popen()使うとか。 漏れはシェルワイルドカードを正規表現に変換したがな。
688 :
678 :2006/02/08(水) 14:15:26
みんないろいろアドバイスありがとう。 実はファイルやディレクトリの差分/日付チェック付コピーを作っていたのよ。 Windowsで動くように作ったものがあって それを(最小限の#ifdefで)少しでも多くの環境でも動くようにしようかなと。 (実際に自分で使うのはLinuxかせいぜいFreeBSDまでだとは思うけど) で、今回の件については、使っているのが2個所あって 一つはFindFirstにマスクを渡して一致するファイルの一覧を取得するところで ここはglobその他の方法が使えるんだけど もう一つ、あるファイルの扱いを決めるためにワイルドカードと一致するかの判定を 複数回やる部分があって、ここで単純な文字列比較が欲しかった。 こんな感じのテーブル(使う側で設定)がいくつかあって char *nosave_files[] = {"*.bak","*.obj","subject.txt", NULL,}; char *incremental_files[] = {"*.dat","*.gzi",NULL,}; あるファイル名filenameに対して if (isnosave(filename)) { ... } if (isincremental(filename)) { ... } みたいな判定をしたい。 で、その内部で呼び出すのが if (table) while (*table) { if (fnmatch(*table, file, 0)) return true; // 実際は#define PathMatchSpec() .. table++; } なので。 で、しばらくしたらまた何か聞くかも。 ファイル更新時刻の扱い方(特に秒以下の単位)とか。
そんなものはシェルスクリプトで書け。
はいはい
そうやって車輪の再発明が各地でなされ 貴重な時間が失われていくのであった。
httpdを作りたくても、apacheがあるから車輪の再発明ですか? ワープロもブラウザも、作っている人は皆再発明をしていると言いたいのですか? 何で、既にsolarisやAIX,HP-UX等があるのに、 わざわざOSなんてものを再発明する人が居るんですか?
楽しいから!
>>692 それらは、まったく同じ物を開発してるわけじゃ無いだろ
>>695 httpdを作りたくても、apacheがあるから車輪の再発明ですか?
ワープロもブラウザも、作っている人は皆再発明をしていると言いたいのですか?
何で、既にsolarisやAIX,HP-UX等があるのに、
わざわざOSなんてものを再発明する人が居るんですか?
あなたは692が691への揶揄だということすら気がつかない人間ですか?
揶揄って読めても書けないよな
揶揄
701 :
デフォルトの名無しさん :2006/02/10(金) 09:51:57
Linuxで、CPU使用率とメモリ使用率を取得する方法を探しています。 topコマンドがあるんだからなんか方法があるんだろうと探していましたが、たどり着けません。 FreeBSDのtopコマンドのソースは見つかったんですが、Linuxにはもっていけないようです。 どなたかご教授ください。 Linuxのtopコマンドのソースの在り処も教えていただけると助かります。
/proc使いなよ。 > Linuxのtopコマンドのソースの在り処も教えていただけると助かります。 自分の使っているディストリのスレ@Linux板で聞け 今時はコマンド一発で取得できる。
>>702 ども。
/procの下にあるファイルを直接参照するって事ですか?
もしかして最悪ディストリ毎に参照の仕方を変えないといけないかも知れない?
てことは/proc下のファイルの見方もディストリ毎のスレに行った方がいいって
事ですか・・・。
704 :
702 :2006/02/10(金) 10:46:09
ソースの在処を教えろ→ディストリのスレ それからLinuxカーネルとディストリの関係も調査しる!
>>701 getloadavg(3)
getrusage(2)
>>703 /procの下の見方はmanに載ってるよ
でも肝心なところはぼかして書いてあるから要注意
Linxuのドキュメントってバージョンアップ時の追随が
面倒なのか恐いのか そういうのが多いよな
707 :
デフォルトの名無しさん :2006/02/11(土) 00:59:44
load average って CPU 数で読み方変わるのな。 うっかりそっちも平均取ってるかと思い込んでたよ。トホホ。
>>703 Linux ならカーネルに付属してる Documentation/filesystems/proc.txt とか。
最新じゃないかもしれないが、man よりはメンテナンスされてるだろう(多分)。
すいません、プログラミング分からない初心者です。 何となく概念とか仕組みみたいなのが分かる程度です。 OSはsolaris9 処理系はSun studio 11と gcc-3.3.2を使っています。 今transcode-1.0.2をコンパイルしているんですけど、 transcode-1.0.2/libxio/libxio.cをコンパイルしていると libxio.c: In function `xio_open' ibxio.c:644: error: `errno' undeclared (first use in this function) libxio.c:644: error: (Each undeclared identifier is reported only once libxio.c:644: error: for each function it appears in.) と以下全てのerrorが未定義となっていてコンパイルできません。 ソースの先頭で#include <sys/errno.h>となっていて 一応export INCLUDE=/usr/includeとちゃんとパスも通っているんですけど・・・ ソースも errno = EINVAL;とか errno = EIO; となっていて、正しそうで正直どうすれば良いのかさっぱり分かりません。 どうすればコンパイルできるのでしょうか?
>>709 多分、何かが原因でerrnoが定義されて無いだけだよ
transcode-1.0.2/libxio/libxio.c の先頭あたりに
int errno;
と定義すれば、コンパイルは通るようになるよ
グッドラック!
>>710 おいおい……
>>709 #include <errno.h>
を追加してみてもダメか?
それでダメなら
extern int errno;
だな。
#詳しくはman -s 3 errno参照で。
712 :
709 :2006/02/12(日) 06:41:27
>>710 711
さん、本当にありがとうございました。
711さんの方法#include <errno.h>を追記で上手く行くことが出来ました!
その後もいくつかインクルードファイルでコンパイルできないところが出てきたんですけど、
今回の件を参考に何とか乗り切ることが出来ました。
インクルードファイルって""で括って絶対パスで直接指定出来たんですね!知らなかった!
でもまた一つ質問してもよろしいでしょうか?今度はマジで?です。
/tmp/transcode-1.0.2/import/pvnglobals.cなんですけれど、コンパイル中に
pvnglobals.c: In function `floatToBuf':
pvnglobals.c:658: error: `BIG_ENDIAN' undeclared (first use in this function)
pvnglobals.c:658: error: (Each undeclared identifier is reported only once
pvnglobals.c:658: error: for each function it appears in.)
pvnglobals.c:658: error: `LITTLE_ENDIAN' undeclared (first use in this function)
以下BIG_ENDIAN、LITTLE_ENDIANが未定義の繰り返しなんですけれど、
BIG_ENDIANとLITTLE_ENDIANってどうやって定義するんでしょうか?ちなみにSPARCなのでBigendianのハズなんですけれども・・・
713 :
709 :2006/02/12(日) 06:52:48
こんな事を直前でやっています gcc -DHAVE_CONFIG_H -I. -I. -I.. -D_REENTRANT -DMOD_PATH=\"/usr/local/lib/transcode\" -I.. -I../src -I../libtc -I../libac3 -I../avilib -I/usr/include -I../libvo -I../libxio -Wall -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -g -O2 -MT pvnglobals.lo -MD -MP -MF .deps/pvnglobals.Tpo -c pvnglobals.c -fPIC -DPIC -o .libs/pvnglobals.o で、ソースが /* take a single float and write it (w/big-endian) into the buffer there must be >= 4 bytes at *buf returns OK or ERROR */ int floatToBuf(float f, unsigned char *buf) { int i; unsigned char *p = (unsigned char *)&f; if (buf == NULL) return(ERROR); if(BYTE_ORDER == LITTLE_ENDIAN)
714 :
709 :2006/02/12(日) 07:00:24
ちゃんとpvnglobals.hには #ifndef BYTE_ORDER #ifdef WORDS_BIGENDIAN #define BYTE_ORDER BIG_ENDIAN #else #define BYTE_ORDER LITTLE_ENDIAN #endif #endif こう書いて有るんですけど
BYTE_ORDERがすでにどっかで定義されてるんでしょ? こういうイヤなエラーが出るのはあきらめるが吉 とりあえず gcc じゃなくて、Sun Studio 11 使ってみては? (cc は /opt/SUNWspro/bin/cc あたりだと思う)
>>715 > こういうイヤなエラーが出るのはあきらめるが吉
とりあえず
find /usr/include -name '*.h' | xargs grep BYTE_ORDER
するのが普通なのでは?
717 :
709 :2006/02/13(月) 02:43:31
>>715 716
ありがとうございます。
Sun Studio 11だとコンパイル以前に構文がおかしいと言われてコンパイルできないんです。
716さんのおっしゃる通りやってみて、似たような事書いてあるヘッダファイル取り込んだらコンパイルできました。
でも、最後のldでこんなエラーが出ます。
最後の最後なんですけど、なんとかならないものでしょうか?
gcc -Wall -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
-D_FILE_OFFSET_BITS=64 -g -O2 -o
tcdecode tcdecode-tcdecode.o tcdecode-decode_ac3.o tcdecode-decode_mpeg2.o
tcdecode-decode_yuv.o tcdecode-fileinfo.o tcdecode-ioaux.o tcdecode-decode_dv.o
tcdecode-decode_mp3.o tcdecode-mpg123.o tcdecode-decode_a52.o tcdecode-decode_af6.o
tcdecode-scan_dv.o tcdecode-decode_lavc.o tcdecode-decode_xvid.o
tcdecode-decode_ogg.o tcdecode-decode_mov.o tcdecode-decode_lzo.o
../libac3/.libs/libac3_tc.a ../libvo/.libs/libvout.a
../aclib/.libs/libac.a
../libtc/.libs/libtc.a /usr/local/lib/libiconv.so
-lm -lz -ldl -R/usr/local/lib -R/usr/local/lib
718 :
709 :2006/02/13(月) 02:45:59
Undefined first referenced symbol in file avcodec_register_all tcdecode-decode_lavc.o mpeg2_buffer tcdecode-decode_mpeg2.o avcodec_find_decoder tcdecode-decode_lavc.o avcodec_decode_video tcdecode-decode_lavc.o mpeg2convert_rgb24 tcdecode-decode_mpeg2.o mpeg2_parse tcdecode-decode_mpeg2.o mpeg2_accel tcdecode-decode_mpeg2.o mpeg2_close tcdecode-decode_mpeg2.o avcodec_alloc_context tcdecode-decode_lavc.o mpeg2_info tcdecode-decode_mpeg2.o mpeg2_init tcdecode-decode_mpeg2.o avcodec_init tcdecode-decode_lavc.o avcodec_open tcdecode-decode_lavc.o mpeg2_convert tcdecode-decode_mpeg2.o ld: fatal: Symbol referencing errors. No output written to tcdecode collect2: ld returned 1 exit status
719 :
デフォルトの名無しさん :2006/02/20(月) 07:28:02
現在の自分自身のメモリ使用量の取得方法を教えてください
自分自身って何だよ。プロセス? ユーザ? マシン全体? 質問する時は OS の名前を添えて、内容は具体的に。
$ cat /proc/$$/stat
現在の自分自身の実行パスの取得方法を教えてください
>>723 >>4 > □ 1.14 どうすればプロセスの実行ファイルを見つけられますか?
$ readlink /proc/$$/exe /bin/bash
% ls -l /proc/self/path/cwd
$ readlink /proc/curproc/file /bin/sh
char path[PATH_MAX + 1]; size_t len = sizeof(path); int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1 }; sysctl(mib, 4, &path, &len, NULL, 0);
FreeBSD 6? は何で /proc 使わないの?
>>725 そのUNIX、何ていうやつ?
参考までに教えて。
>>733 これLinuxでしょう。
>>727 が
/bin/readlink
にならないのはどのOS? というかなんで?
readlinkがbuilt-inなんじゃね?
>>734 ごめん、勘違いした
$ readlink /proc/curproc/file
/usr/bin/readlink
になったよ freebsd
>>731 どゆこと?
実行パス→実行ディレクトリかなと思ったんだけど、実行ファイルの
パスなら /proc/self/path/a.out だね。
メモリリークが発生しているかどうかを調べる方法を教えてください
>>739 メモリリークを検出するプログラムを使う。
おまいの言うメモリーリークがどんな現象か書くべし
メモリーがリークしている状態のことです。
僕の肛門の内容物もリークしそうです!
自分自身のIPアドレスを取得する方法を教えてください
ioctl, SIOCGIFADDRでググれ
メモリリークって 確保した領域外にアクセスすることなのか、 解放したはずのメモリが解放されないことなのか よおわからん。
確保した領域がどこだったか、自分でわかんなくなっちゃうこと。 どこだかかわからんので結果として解放もできない。
>>749 p = malloc(1024);
p = malloc(1024);
free(p);
最初のmallocが返した領域はリークするけど
「解放したはずのメモリが解放されないこと」ではないよね。
>>750 わかってて解放しないのはリークとは言わないんじゃないかな。
一回だけ走って終了するプログラムならぜんぜん解放しないのもありでしょう。
まあ、回りくどくなく言えば、解放のし忘れだわね。
753 :
デフォルトの名無しさん :2006/02/25(土) 06:05:58
>>751 いやいや。プログラマーが忘れているの。でもコンピュータは忘れないからね。
解放のし忘れじゃなくて、(ポインタの)保存のし忘れだってリークだよ。
「解放したはずのメモリが解放されない」ってのは、 char *p = malloc(1024); free(p); とやっても、pが指すメモリが解放されないって意味にならないか?
ルートから到達不可能なヒープ領域があったら メモリリーク
>>749 がFOLDOC示してるんだからそれで終了だろ。
英語読めないヤツは翻訳して読め。
An error in a program's dynamic store allocation logic that causes it
to fail to reclaim discarded memory, leading to eventual collapse due
to running out of memory.
利用しなくなったメモリの回収失敗を引き起こすような
プログラムの動的領域確保ロジックの失敗。
これによりいつかメモリ枯渇による破綻を生みかねない。
非 GC 場合のルートって何さ? free しても system に返されない分は到達不可能な訳だが。
>非 GC 場合のルートって何さ? プログラム内の変数が押さえてるところ。 >free しても system に返されない分は到達不可能な訳だが。 malloc/free のライブラリが押さえてる。
>>760 > プログラム内の変数が押さえてるところ。
変数に「到達可能な」と限定をつけないと駄目だよね。
UNIXプログラミングに関係ないからそろそろやめないか。
存在する変数はすべて到達可能だろ。 じゃあ、おしまい。
頭悪
>>760 違和感ありまくりなんだが...
まぁ、どうでも良いけど。
>>762 extern char *p;
〜
p = (char *) malloc(size);
// 以下pもpのアドレスもプログラム内に一切登場せず
でメモリリークだろ。
これから実行されるプログラムから到達可能じゃないといけない。
変数かどうかは関係ない。(たとえばreturn malloc(〜);など)
それはリークしてない
ジエーンど
彼女の中でリークした
今晩もおリークだ。
やあ、漏れはリークだ
おれこのプロセスでどんだけmallocしてたっけ? ってのを参照するAPIがあればいいんだがにゃー
そんなmallocライブラリは山ほどありますよん。 malloc debugでググってね
>>774 見つけたとして、それを解放しちゃっていいかまでは判断できないんじゃ。
デバッグに使えるくらいだ。
ほんならBoehmでも使えばええやないの。
Boehmも万能じゃないっしょ
万能キター!
ほんなら欲しいもの自分でつくれや
(・∀・)ニヤニヤ <万能じゃないっしょ
↑
>>778
メモリリークで盛り上がれる幸せなスレがあると聞いてすっとんできますた。
Boehmコワイ
mallocした領域をfreeせずにexitするのは危険でしょうか? ニヤニヤ
exitするなら。ニヤニヤ
妖怪人間Boehme
787 :
デフォルトの名無しさん :2006/02/25(土) 23:26:35
メールをリークしたのは誰ですか?
どうも UNIX 系のスレは下らない脱線するな。
Windows系はオコサマがマジ切れして荒れるけどな。 Macは・・・人いるのか?
OS 絡みのスレはどこもそんなんナノか。
791 :
デフォルトの名無しさん :2006/02/25(土) 23:57:58
OSは宗教だからな。
フォースを使え、リーク
>>792 おしいな。forkを使えならよかったのに。
794 :
デフォルトの名無しさん :2006/02/26(日) 02:45:45
fork be with you
we love fork.
プロセスのアドレス空間内で、あるアドレスを指し示す変数の型は何にするのが 一番良いでしょうか? caddr_t を使っているのをよく見ますが、types.h には caddr_t は "core address" と書いてありました。core address ってどういう 意味でしょうか? こういった、型の意味を探すのに皆さんどうされてますか? POSIX や ANSI の規格表は必携?
C99にもPOSIXにもcaddr_tなんて型は無い
>>796 POSIX/SUS的には、そういうのは void *
>>799 納得するなよw
> core address
には, 答えてもらってねぇぞ...
coreってメモリのことでしょ普通
コアメモリでググれ。
はじまった、はじまったw
プロセスIDっていつリサイクルはじまるの?
うちの地域は火曜日
>>805 pid_t find_pid() {
do {
++pid;
if (pid >= MAX_PID) pid = 0;
} while (空いてるのが見つかるまで)
}
>>807 新しいPIDを作るところはカーネル内で一箇所だけなんで、
それだけ別関数になってたりはあまりしない。
おまけにナイーブすぎで、いまどきそんなカーネルは存在しない。
809の情報の定義は特異だな。
むしろマイナスと言うべきだわな。
1個の関数になってるかどうかはともかく、
ぶっちゃけ
>>807 みたいな感じなんじゃないの?
OSによっては連続したidを使わずにスクランブルするのもあるけど。
うちのOSだと使ってるpidはハッシュ表に登録されてて、
それで空いてるかどうか判断してるようでつ。
>>811 煽るのを止めはせんが
情報量自体に真偽は関係なく、情報量にマイナスというものは無い
>>813 あるよ(w
減ればマイナスだから、見掛け情報量として扱う。
あ、もしかして負の数なんてものはない、-3匹の羊ってなんだよ、って人?
はじまった、はじまったw
>>815 徹夜明けの眠気覚ましにとしてつきあっちゃる
情報量と真偽は無関係なんだよ
つまり、偽のbitが >0 存在することになる。
問題は真のbitと偽のbitを相殺させるという
ポンコツな処理にある
( ゚д゚)ポカン
情報量の定義を見れば一発でわかるんだけどな 事象 E が確率 P(E) で起こるとき、E が起こったときに受け取る情報量は I(E) = - log P(E) これはどうやっても負にならん
スク水着て脱糞でもしとけ
何この流れww
懐かしいなシャノン
よお、ノイマン
824 :
デフォルトの名無しさん :2006/03/09(木) 19:03:05
stat関数で取得したuidとgidからユーザ名とグループ名を取得するにはどうしたらいいですか?
getpwuid, getgrgid あたりかな
826 :
デフォルトの名無しさん :2006/03/09(木) 19:18:31
ブロックデバイスってどうやって読み書きするんですか?
readとwriteで
>>827 File system介さずってこと?
一般的には関連づけられたraw character deviceを読み書き。
UNIXenによって違うので、環境書くか、適当な板で。
Suse Linux 10でgccを使ってプログラムを作っています。 もっとも確実なファイルのロックの方法を教えてください。
UNIXに確実なファイルロックは存在しません
833 :
デフォルトの名無しさん :2006/03/12(日) 23:19:28
fcntl() がとりあえず最良の方法なのでは? 一応NFS越しでも掛かるし。
30秒ごとに実行してほしい関数と、7秒ごとに実行してほしい関数が あるんですけれど、どうやってタイマー関連の設定をすればいいのか 教えてもらえませんか?
int i; while(i++){ sleep(1); if( i % 7 == 0 ) func7sec(); if( i % 30 == 0 ) func30sec(); }
837 :
デフォルトの名無しさん :2006/03/13(月) 00:30:22
>>835 setitimer() 使うといいと思う。
>>838 基本的な考え方を書いただけだろ?
while(i++){sleep(1);
のところを適当に工夫すりゃいいんじゃね?
iがたまたま初期値0だったら動かないな。
どうでもいいけど。
>836,837 やはり1秒ごとに発生させて、経過秒数を自分でカウントして あげないといけないのですか?
pthreadを二つ動かして、それぞれselect(2)でタイムアウト待ちとか。
Windowsでいうところの、SetWaitableTimerみたいなシステムコールは無いようですので、 自分であと何秒待つべきかを管理して、一番小さいものをSleepに渡すことにします。
>>840 ああそうか。ふたつか。そうだなあ。そうするしかないかなあやっぱ。
このスレってレベル低いな
ゃぁ
この板でそこそこレベルのあるスレの方が珍しいんだからまあいいじゃないか
847 :
デフォルトの名無しさん :2006/03/13(月) 10:57:44
ちんぽ
質問です。 linux上、c言語で文字列からFILE*を作ることは出来るのでしょうか。 c++のstringstreamのようなイメージです。 具体的には以下のような操作を考えています。 char str = "hoge"; FILE* f = unknown_func(str, "r"); int i = fgetc(f); よろしくお願いします。
linux(glibc)にはfmemopen()という関数があります ただしポータブルではありませんのでlinux以外の環境では使えません
850 :
848 :2006/03/15(水) 22:52:57
有り難うございます、期待通りの挙動を示してくれました。 ごく私的な用で使う予定なので、移植性に関して当面は問題無さそうです。
>>849 へぇ〜、最近のglibcはそんな関数を提供してるのか。参考になったよ。
知らないで似たようなもん自分で作っちゃったよ。とほほ。
TextSS のWindowsXP(Professional)64bit化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか? そういや64bitにネイティブ対応している2chブラウザてありましたっけ?
最近はレスを通知してくれる2chブラウザがあるのか
すごいな 見るスレ全部にこのマルチコピペがあるぞ
ほんとだ。SPAMだなこりゃ。
ていうか、書き込んだバカは 返答があるかどうか、全てのスレをチェックしているのだろうか?
858 :
デフォルトの名無しさん :2006/03/22(水) 12:40:28
プログラミング知識ゼロです。 質問なんですが、UNIXで開発されたCshの拡張子がついたファイルを windowsで実行させるにはどうしたらよいのですか?
861 :
デフォルトの名無しさん :2006/03/22(水) 12:56:12
ありがとうございます。
ここの連中はしつこいなw
865 :
デフォルトの名無しさん :2006/03/25(土) 17:28:59
ここのスレに誘導されて来ました.ライブラリ関数の質問です. スレッドが費やした CPU 時間を得るにはどうすればよいですか? sys/times.h の times() だとプロセス時間になるので困ってます.
OSとスレッドライブラリの名称とバージョン
867 :
865 :2006/03/25(土) 17:50:53
linux 上の posix thread でプログラミングしています. できるだけバージョンやベンダーに依存しない方法があれば良いのですが...
RedHatでpopt.hを使いたいのですが、 poptSetOtherOptionHelp(optCon, "[OPTION...] <bar>"); のようにすると --helpでUsage: foo [OPTION...] <bar> と表示されるものの、 --usageでUsage: foo [-a A] [-b B] [OPTION...] <bar> のようになってしまいます。 --usageの時にだけ[OPTION...]を外す方法はないですか?
ありません
870 :
868 :2006/03/25(土) 19:41:46
>>869 そこを何とか。
最後に入力ファイル名を渡すようなプログラムって、
poptは使ったりしないもの?
pthread_getcpuclockid
>>870 何とかって無いものは無い
poptを改造して開発元にパッチ送ればいいんじゃないの
パッチを送ると拍手喝采だよな パッチパッチ
874 :
865 :2006/03/26(日) 01:12:54
ディレクトリ内のファイルの一覧の取得方法を教えてください。 opendirなどで検索するとphpのページはヒットするのですが、Cでの取得方法がわかりません。
>>875 PHPでのサンプルを見ればそのままCにも応用できない?
うちのOSでは「man opendir」すると、そのものズバリのサンプルが書
かれてる。
プロセスの一覧の取得と各プロセスの所有者を取得する方法を教えてください
1秒以下でスリープするさせる方法はありませんか?
man usleep
sleep(0);
今どきは nanosleep じゃねえかな これは POSIX だし
対話的に実行するコンソールプログラムの出力をファイルに取り込むことは出来るでしょうか? ./cmd | tee cmd.log だと表示もおかしくログもうまく取れません。
ま、お望みの物は script だろうけど、ttyrec というのもある。
CPUの数を取得する方法を教えてください
OSによる
>>890 printf ("CPUの数は?\n");
int cpu_num;
scanf ("%d", &cpu_num);
int mib[2], ncpu; size_t len; mib[0] = CTL_HW; mib[1] = HW_NCPU; len = sizeof(ncpu); sysctl(mib, 2, &ncpu, &len, NULL, 0); printf("CPUは%d個\n", ncpu); どのOSの例かは教えてあげないんだからっ
mib つーのが、いつ見ても変な感じ。
Men In Black?w
896 :
デフォルトの名無しさん :2006/04/13(木) 15:51:24
学校でUNIX起動するとX window が起動してコンソールだけ出るんですが、 マウスでKtermを出そうとして透明の枠をクリックすると消えてしまい ウインドウが出てくれません。 どうすればいいでしょうか
学校できけ
>>896 >透明の枠
これが分からん。透明の枠って何の事?
コマンドラインで kterm と打つのじゃダメなんかいな。
え、俺?! そっか、すまん。
すんません学校で誰も教えてくれないもんで・・・
man 透明の枠
>>898 kterm & と打つと、田 (←実際には3x3)のような中が透明な枠が出て
ウィンドウの位置を指定するらしい状態にはなるんですが、
そこでボタンを押すと枠が消えるだけでKtermのウィンドウは出ないんです。
>>903 プログラミングの話じゃないし、おまいの使ってる環境依存の話だから、
管理者か、周囲の詳しいやつに聞かないと解決しないよ。
>>900 =898?
喪前が相手にするから居座ってるジャマイカ。
嫌なら読まなきゃ良いんジャマイカ?
低能キタ-
こんにちわ。2点、よろしければ教えてください。 HP-UX & aCC で作業をしてます。 1) 以下のようなことは出来ないのでしょうか。new の箇所がコンパイル時にエラーになります。 MyClass** a; a = new (MyClass*)[ 8 ]; 2) コンパイル時に以下のような箇所でエスケープシーケンスがどうとか怒られます。 どうやら「ソ」に反応しているようなのですが、回避の方法はあるでしょうか。 printf( "[%08d] ソケットがどうとか\n", code ); これまでほぼ Win 上での作業ばかりでしたが特に問題なかったような... ボケをかましているだけなら良いのですが、何か勘違いをしているでしょうか。 ご教示頂ければ幸いです。
>>908 手元に環境ないから適当だけど・・・
typedef MyClass* MyClassPtr;
とかしておいて、
a = new MyClassPtr[8];
とかやったらどうだろうね。
HP-UXはShift-JISじゃないっけ?
「ソ」の2バイト目がバックスラッシュじゃね?
>>908 (1) カッコいらない
(2) Shift_JIS だと「ソ」の2バイト目が \
911 :
デフォルトの名無しさん :2006/04/15(土) 12:36:31
質問させてください、 HP全取得ツールみたいのを作りたいんですけど・・・ cURL で、ディレクトリの内容を再帰的に取得する方法ってありますか? こういうのは、やっぱり wget なんでしょうか? もしこういうことを実現するのに「〜使えば楽勝だろ」みたいなのが あれば教えてください。
913 :
908 :2006/04/15(土) 17:58:31
こんにちわ。 ご返答ありがとうございました。 1) typedef と () 外し、試してみます。 ただ、() はなくてもエラーになってたような... 2) ということは「そケット」などと書かないとダメなのですね。 Solaris で問題なかったのは EUC だったからか。 UNIX って奥が深いです。 これまでの経験からは予想の出来ない問題がたくさんあって刺激的でおもしろいですね。 まあただの経験不足なのですが。(汗
915 :
908 :2006/04/15(土) 19:14:26
こんにちわ。 >ソ\ケット ぽん。なんで思いつかなかったのだろう。 ありがとうございました。
つ ンケット
商用コンパイラで文字列リテラルがlocale対応してないの? 恐ろしい…
それって同じソースコードでもコンパイル時のlocaleで動きを変えろってこと?
日付フォーマットとか地域毎に認識変えろってことじゃ
文字列リテラルって意味わかる?
922 :
908 :2006/04/17(月) 23:12:13
こんにちわ。 結果です。 1) () 外しで OK 2) 「ソ\ケット」で OK () は境界が分かりづらいところに無意識につける癖が災いしてました。 ポインタのポインタのポインタなんて初めて使って余計混乱しちゃってましたし、 しゅぎょーしてきます... >つ ンケット 今度やってみます。w
>>921 configure時に--enable-c-mbcharかなんかつけてビルドしないとダメなんでしょ?
ちゃんと動くのかどうか知らないけど。
>>923 gcc 3.4 からは -finput-charset で実行時に指定できる。
localeと関係ないじゃんw
このオプションで指定できるエンコーディングのデフォルトが UTF-8 で、 locale でも上書きできるとなっている。
なんか微妙にかみあってないような。 gcc 3.3 以前だとデフォルトではマルチバイト文字を認識せず、configure 時 に --enable-c-mbchar を指定して gcc を作成する必要がある。ソースコード と locale の文字セットが違う場合、env LANG=... gcc ... のようにする。 gcc 3.4 以降だと iconv が使える場合デフォルトで locale に応じたマルチバ イト文字を認識する。ソースコードと locale の文字セットが違う場合、 -finput-charset でオーバーライドできる。
昔のは日本語オンリーね。
C-SJIS とかのこと言ってる?
日本語以外もサポートしてるじゃん
if (literal_codeset == NULL || strlen (literal_codeset) <= 1) { /* This must be the "C" locale or unknown locale -- fall thru */ } … /* This must be the "C" locale or unknown locale. */ return mbtowc (pwc, s, n); mbtowc()任せでlocale次第ってことですわね。
localeなんて欠陥システムは無視無視
935 :
デフォルトの名無しさん :2006/04/19(水) 04:13:27
C言語、GNU readline の質問です。 デフォルトで有効になっているカレントディレクトリのファイル名補完機能を無効にし、 コマンドラインからの入力なしの状態でTabキーを押したらa_func b_func c_func と表示させ、 aを入力した状態でTabキーを押したらa_funcと補完させるプログラムを作りたいです。 サンプルが欲しいです
Readlineのソースに入っているexamples/rl-fgets.cを読め。 FGETS_COMMAND_FILEから候補を読むところを、 a_func b_func c_funcで候補リストを作成。
937 :
935(GNU readline の質問) :2006/04/19(水) 10:50:05
>>936 ありがとうございます。
さっそくやってみます。
938 :
デフォルトの名無しさん :2006/04/22(土) 19:24:09
こんど仕事でhp-uxのプログラム作らなきゃいけないのですが、 どこかシステムコールとかを詳しく解説してるとこってないでしょうか? WindowsのAPI関数みたいなライブラリってあるのでしょうか?
>>938 UnixのシステムコールはLinux関係のサイトに詳しい。
但し、HP-UXは独特なので、それらはHPのHP・・・じゃなくてサイトでしか入手できないかもしれない。
尚、WindowsAPIほど潤沢にAPIが用意されているわけではないので、(特にグラフィックは)何を使うか
事前に充分検討しておくことをお勧めしておく。
HPのHPに泣いた
942 :
939 :2006/04/23(日) 00:51:57
API云々のとこは変でしょ あと「潤沢」てのは適切でないな
>>554 それも含めて子供を生んだ後の問題なんじゃね?
そうなの?
POSIX共有メモリで4層ぐらいネストした構造体扱おうと思っているのですが、 この時、可変長な値は予め最大サイズを決めて確保するべきなのでしょうか。
ばこっと確保した共有メモリの中をヒープとして自前で管理すりゃいんじゃね?
948 :
デフォルトの名無しさん :2006/04/28(金) 01:07:34
freebsd4.11をつかっているんですが、 Cでcpu使用率を取得するプログラムを書く場合 どの関数が必要になるんでしょうか vmstatのソースをみていましたが、いまいちわかりません。 どうもcur構造体のcp_time要素に値が格納されているようなのですが・・・ ソースでいうと 1.このあたりとか mysysctl("kern.cp_time", &cur.cp_time, &size, NULL, 0); if (size != sizeof(cur.cp_time)) errx(1, "cp_time size mismatch"); 2.ひょっとするとこのあたりではないかとにらんでいますが static kvm_t *kd; ヒントだけでもいいので、何かご存知の方・・・
949 :
デフォルトの名無しさん :2006/04/28(金) 01:08:38
951 :
デフォルトの名無しさん :2006/04/28(金) 04:51:02
なんでこのスレは質問を強要しているのですか?
>>948 % sysctl kern.cp_time; sleep 5; sysctl kern.cp_time
kern.cp_time: 51464 1204 77516 4733 1238731
kern.cp_time: 51502 1204 77531 4733 1238743
この増分は 38 0 15 0 12 となり、合計 65 のうち CP_IDLE (sys/resource.h)
は 12 だから 1 - (12 / 65) = 0.815... で CPU 利用率は 82% になる。
954 :
デフォルトの名無しさん :2006/04/28(金) 22:46:49
それだと質問あるかないか、YES,NOのレスが続くだけのスレになるだろーが
無駄な「だろーが」入りました!
956 :
948 :2006/04/29(土) 01:18:09
>>952 返信ありがとうございます。
ヒント、というか、そのものズバリを教えていただけるとは思いませんでした。
うーむ、mysysctlはsysctlを使うのと同じものだったとわ・・
ありがとうございました^!
957 :
デフォルトの名無しさん :2006/05/01(月) 20:37:06
UNIX系の人って、IDE何使ってるの?
emacs
azumacs
カイヤ
POSIX共有メモリで構造体そのまんまで扱う時って定数構造体宣言して mmapでよかったっけ? あと、ファイルからデータ読み込む時 mmapでアタッチするのとopenのオプションにO_DIRECT付与するの どっちが速いのでしょうか
どっちが速いかなどということは決まっていない 実測しろ
POSIX共有メモリって普通IPCのshm*(2)のことだけどな。 旧称System V共有メモリ
O_DIRECTって意味分かってないだろ。
>>961 ちゃんとマニュアル読めよ。
965 :
デフォルトの名無しさん :2006/05/15(月) 02:46:37
mmapされたシェアードメモリを複数プロセスで read/writeする必要があるんですが,ロックに関しては どうするのが安全/高速ですか? ロックに関してはアドバイザリーロックで問題ありません. OSはFreeBSDもしくはLinuxです.
mlockは排他制御には使えないとおもうがどうか
無理すぎ
970 :
965 :2006/05/15(月) 23:22:39
>>966 ありがとうございます.調べてみたところ,
名前付きセマフォ: カーネル内にロック情報を保持
メモリベースセマフォ: プロセス共通のSharedMemory内にロック情報を保持
SysVセマフォ: カーネル内にロック情報を保持
pthread_mutex: プロセス共通のSharedMemory内にロック情報を保持
pthread_rwlock: プロセス共通のSharedMemory内にロック情報を保持
って感じでになってて,プロセスの異常終了時のロックの
解放に関してはそれぞれ特徴があるみたいですね.
ロック期間中に変更したデータの整合性に関しては
プログラマ側に任されているみたいで,安全性に関しては
等価な印象です(間違ってたら指摘お願いします).
追加質問なのですが,FreeBSDもLinuxもセマフォに関しては
扱える上限数がカーネル設定で固定されているようです.
これを考えるとメモリアル限り自由にロックの粒度を
細かくできるmutexの方が使いやすいと思うんですが,
どうなんでしょう?
971 :
965 :2006/05/15(月) 23:30:12
>>967 今回の目的は確保したSharedMemoryを破壊しないように
同期のLockを行いたいというものでした.
mlock()は確保したメモリをswapさせないようにする関数なので,
今回の用途とは少し違うかと思います.
すいません.質問の仕方が悪かったみたいです
972 :
デフォルトの名無しさん :2006/05/15(月) 23:40:16
ディレクトリ一覧を再帰的に取得する方法について質問です。 manのftsを見ながら即興で組んでみたのですが、 (変数名適当です・・・) 以下のプログラムだと、/usr/以下の全ディレクトリ以外に ファイル名も出力してしまいます。 ディレクトリ名のみを出力する方法はないでしょうか・・・ #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fts.h> main(){ FTS *dir; FTSENT *fts; char *path[2]={"/usr", NULL}; if((dir=fts_open(path,FTS_PHYSICAL|FTS_NOCHDIR,NULL))==NULL){ perror("opendir error"); exit(-1); } for(fts=fts_read(dir);fts!=NULL;fts=fts_read(dir)){ printf("%s\n",fts->fts_path); } close(dir); return 0; }
FTS_Fでも抑制したら。
>>972 if (fts->fts_info == FTS_D)
printf("%s\n",fts->fts_path);
976 :
デフォルトの名無しさん :2006/05/17(水) 00:34:59
>>972 >>973 >>974 なるほど、ヘッダファイルでFTS_Dを1としてdefineしていたんですね・・・
今までそれがわからずにcoreを吐かせまくってましたが、
おかげさまで狙い通りの値がとれるようになりました。
ttp://mirror.sg.depaul.edu/pub/OpenBSD/src/include/fts.h ありがとうございました!
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fts.h>
main(){
FTS *dir;
FTSENT *fts;
char *path[2]={"/usr", NULL};
if((dir=fts_open(path,FTS_PHYSICAL,NULL))==NULL){
perror("opendir error");
exit(-1);
}
for(fts=fts_read(dir);fts!=NULL;fts=fts_read(dir)){
/* FTS_D is defined as 1 in fts.h */
if(fts->fts_info==FTS_D){
printf("%s\n",fts->fts_path);
}
}
fts_close(dir);
return 0;
}
>>976 1 だとか 2 だとかコメントに書かないほうが良いよ。
別の OS で FTS_D が 2 だったら、コメントも変えるの?
>>970 Linux なら /proc/sys/kernel/sem で拡張できるよ
979 :
970 :2006/05/17(水) 17:06:40
>>978 >Linux なら /proc/sys/kernel/sem で拡張できるよ
情報ありがとうございます.FreeBSDならkern.ipc.semm*
あたりで変更できますね.
FreeBSDもLinuxも内部機構を知らないのでなんなのですが,
OS側で数を制限しているからには数を増やすとそれなりに
パフォーマンスが落ちると思うんですね.
mutexの場合はロックの粒度に応じてthread_mutex_tの変数を
プロセス共通のシェアードメモリに必要なだけ確保すればいい
だけなので,セマフォより使いやすいのかなと思ったんです.
980 :
970 :2006/05/17(水) 17:31:46
ところで次のスレはこの板に作っちゃっていいんでしょうか? Unix板でやれという意見もあるようですが.
UNIXのプログラムの質問をするスレなんだからプログラム板だろ
>>979 pthread_mutexがprocessを越えても有効かどうかは環境依存。
983 :
970 :2006/05/17(水) 21:05:15
>>981 UNIXのプログラムの質問をするスレなんだからUNIX板だろ
>>984 どっちでもいいから、次スレは同じ板に立てるのがデフォルトってことで、プログラム板だろ。
UNIXを目の仇にしてるごく一部のおかしな人が暴れてただけだからなあ。 この板で全然いいでしょう。
>>984 WIN32APIのスレで同じこと言えよ。
両方にあってもいいわけだし。
990 :
970 :2006/05/18(木) 19:01:55
a
b
c
d
e
f
g
h
i
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。