1 :
デフォルトの名無しさん :
04/09/22 17:59:44
2 :
デフォルトの名無しさん :04/09/22 18:01:09
3 :
デフォルトの名無しさん :04/09/22 18:02:37
前スレの1000 >1000 名前:デフォルトの名無しさん 投稿日:04/09/22 17:50:58 >まずは自分の脳味噌をどうにかしろよ馬鹿が それ以前にお前の脳味噌がどうかしてる 氏ね!
4 :
デフォルトの名無しさん :04/09/22 18:04:47
前スレ997 >997 名前:デフォルトの名無しさん 投稿日:04/09/22 17:45:48 >unameもそうだけど、 >UNIXって意味不明な名前のコマンドだらけで嫌気が差した >いいからメニューから全機能選べるようにしろよ >イミフメコマンド文化なんか続けてるから一向に普及しないんだよ はgふぇしくどうい! つーかカテゴリ分けして機能から辿れるようにして欲しいよね!
kill(getpid(), 9);
pthread_kill(pthread_self(), 9);
kill -f 9
たぶん前スレ1000の脳味噌あぼーんの人だろ
単にUNIXに挫折した池沼が一匹粘着してるだけ。放っておけばよろし。
13 :
デフォルトの名無しさん :04/09/22 23:05:59
もういいだろこのスレは
14 :
デフォルトの名無しさん :04/09/22 23:19:02
いやでも、 UNIXで挫折って、わかる気がするなあ。 ずっと意味不明なコマンドの文字列打ってたら頭おかしくなりそうだし、 ずっと真っ暗なコンソール眺めてると鬱になりそうじゃん? かといって思想のまるでないXは、オタ絵とただ沢山コンソール開くしか脳ないし、 こんなの与えても娯楽を常に要求する一般人は見向きもしない。 そもそもWebでしか見掛けない、哀れなOS、というのが一般人の見解だし。 そうそう、最近LindowsがUNIXの印象かなり悪くしたよね。 この事件でUNIXはビジネスで成功できないことがまた証明されてしまったわけだ。 昔からUNIXは関係者同士で常に足を引っ張って成長しない。 お金の匂いしないよね。全然。 そんなOSだから、挫折が常態であるのは必然なんだと思う。
OS板にカエレ
コピペ秋田
釣られすぎ
誰か、UNIXが生み出したバッド・ノウハウをリストしてくれ・・・
20 :
デフォルトの名無しさん :04/09/22 23:30:33
Ruby
21 :
デフォルトの名無しさん :04/09/22 23:37:38
system("nslookup -type=MX hoge.com"); としてそこから得られたmail exchangeを自分のプログラムの中で使用したいのですが, どうすればいいでしょうか?
popen
24 :
デフォルトの名無しさん :04/09/22 23:48:36
ほらきた。 UNIX使いって貶されると、 すぐ言葉少なになるよね。 もう貶されるのに慣れちゃった? ちょっと、心をおちつけて。 UNIXを知らなかったあの頃を思い出してごらん。 あの頃の君達は希望に満ち溢れていたよね。 そう、今まで君達は、とっても悪い夢を見ていたんだ。 UNIXなんか捨てて、あの頃見ていた希望を取り戻そうよ!
25 :
デフォルトの名無しさん :04/09/22 23:55:51
adg
このスレは汎用機の素晴らしさを語るスレになりました どうぞ↓
malloc/free論争から今までの流れにワロタ
29 :
デフォルトの名無しさん :04/09/23 18:16:03
posix_trace_xxxという関数がGlibcにはないんですが、 他のUNIXにはありますか?
やっぱりUNIXといえばSolarisですね
31 :
デフォルトの名無しさん :04/09/23 20:13:07
SystemVを触ってみたい
やっぱ森で胡桃を食べているって言われて思いつくのはあの動物だよな。
33 :
デフォルトの名無しさん :04/09/26 02:30:54
自分で実行ファイルをプログラムで作成したいのですが、 elfフォーマットとかの情報ってどっかに日本語で解説ないですか? ターゲットはLinuxやFreeBSDです。とりあえず。
35 :
デフォルトの名無しさん :04/09/26 04:29:51
Linkers&Loadersに載ってた気がするけど、今手元に無いんで確認できない。
ウィルスでも作るんですかね
バイナリエディタで全部手打ちなんてカコイイ
>>34 libbfdで作るとか。
いまひとつ使いにくいのが難ですが。
41 :
デフォルトの名無しさん :04/09/27 15:08:31
alloca()とmalloc()の違いを述べよ。
man alloca
44 :
デフォルトの名無しさん :04/09/27 23:53:15
質問です。 void main() { char buf[100]; while(gets(buf)){;} /* 1 つ目 */ gets(buf); /* 2 つ目 */ } で、% echo 1 | a.out したとき、2 つ目の gets() したいのですが、 何か良い方法ありませんか? お手間かけます、よろしくです。
Cの宿題スレへGO
「gets使うなヴォケ」って言われそうだな
>>44 何やってるのかわからん。。
1つ目でEOF拾ってるのに2つ目がいるのか?
どーでもいいが、mainの返り値はint、getsはバグがあるからfgetsあたりを
使うべきじゃなかったっけ。
getsのあれはバグではなく仕様です。
warning: the `gets' function is dangerous and should not be used.
>>44 a.outで2回目のfgets(gets)をすればいいじゃねーか。
51 :
デフォルトの名無しさん :04/09/28 00:27:04
あららん、getsやmainの戻り値なんて質問外なのでどうでもよくって、 stdinがEOFのとき、rewind()なんて効かないし、どうしよっかなーって ことだけなの。
なにがやりたいんだかさっぱりわからん。 二つ目の gets で何を取得したいのよ。
53 :
デフォルトの名無しさん :04/09/28 01:02:53
>>52 キーボードからの文字。
ちなみに、最初に fd = fcntl(STDIN_FILENO, F_DUPFD, 0);とか、
後から stream = fdopen(open("/dev/stdin", O_RDONLY, 0), "r");も
無理そですね。
54 :
デフォルトの名無しさん :04/09/28 01:07:04
と、とりあえず、ねます、すみません。
わざわざ shell の自作なんかしなくても。
考え方が、(゚д゚)ハァ? なんだよ。
58 :
◆cReQ1pJtI. :04/09/30 18:03:58
Windowsで作ってますが、こっちの方が知ってる人が多そうなので 質問させてください。 FTPクライアントのサブセットを作成していますが、 コマンドに対する応答の終了をどのように判断したらいいのか 悩んでいます。 多くのコマンドは1行の応答のようなので、その場合は改行を 見ればいいと思いますが、なかには複数行返ってくるものも あるし、RFCにも複数行処理しろと書いてあります。 コマンドを送って、応答を待って、次のコマンドを送って、、 ってやれれば簡単でいいなと思ってるんですが、そのためには 応答の終了を知る必要があると思います。 回線状況が悪い場合も想定したいので、タイミングでの処理は 避けたいと思っています。 よろしくお願いします。
っていうかスレ違いでしょ。ネットワークの専門スレもあるんだし
61 :
◆cReQ1pJtI. :04/09/30 18:40:42
62 :
◆cReQ1pJtI. :04/09/30 18:55:29
63 :
デフォルトの名無しさん :04/10/02 01:37:49
ある処理の間はシグナルをブロックしたいので以下のようにしています。 struct sigaction sa; sigset_t oldset; sigempty(&sa.sa_mask); sigaddset(&sa, SIGINT); sigprocmask(SIG_BLOCK, &sa.sa_mask, oldset); // ブロックさせたい処理 sigprocmask(SIG_UNBLOCK, oldset, (struct sigaction *)NULL); しかしこれだと最後のsigprocmask()で失敗した場合、その後SIGINTを ブロックしたままになってしまうと思うのですが、確実にSIGINTのブロックを 解除するにはどうすればよいでしょうか?
>>63 所々書き込みミスしてました。
×sigaddset(&sa, SIGINT); → ○sigaddset(&sa.sa_mask, SIGINT);
sigprocmask()のoldsetは&oldsetです。
全てのシグナルをアンブロックするとか つうか普通失敗しないだろ
失敗するとしたら引数に変なの渡したときくらいだね。
失敗したらログ吐いてabortでいいだろ
68 :
デフォルトの名無しさん :04/10/02 02:55:58
たしかに不正な引数を渡したりすると-1でエラーになるようですが(AIX,HP,Solaris,Linuxで確認)、 本当にエラーにならないという確証がmanを見ても得られなかったため 質問するに至りました。sigprocmask()でエラーがほとんどないとしたら たとえばsigaction()について以下のようなコーディングは冗長と言えるでしょうか? struct sigaction sa; int rc; sa.sa_handler = SignalHandler; rc = sigaction(SIGINT, NULL, old_sa); if(rc == SIG_ERR){ // error log; }else if(old_sa.sa_handler == SIG_DFL){ rc = sigaction(SIGINT, &sa, NULL); if(rc == SIG_ERR){ // error log; } }
前の状態調べる必要あるのか? processが動き始めた時、SIG_DFLであるとは限らないのだが…
sigactionの戻り値はintで普通に0かそれ以外かなので SIG_ERRと比較するのも変だと思うのだが。 どうも筋が悪いというか、へんな理解の仕方をしているような気がするね。
71 :
デフォルトの名無しさん :04/10/02 12:30:41
>>69 以前に既にシグナルハンドラを設定していた場合は、新たにそこで設定しない
ために前の状態を調べています。動作確認した限りではSIG_DFLだったので
この値を使ってしまいました。
プロセス起動時のシグナル動作=OSのデフォルト動作=SIG_DFL
とは限らないということでしょうか?
>>70 manには0かSIG_ERR(-1)となっていたので普通にSIG_ERRを使ってしまいました。
でもsignal.hを見るとSIG_ERRはint型ではなかったため、(int)でキャストして比較しています。
自分でも変な実装していると思うのですが、
>>68 の例を改善するとしたら
どのような実装になるでしょうか?
72 :
デフォルトの名無しさん :04/10/02 12:52:07
>>71 > プロセス起動時のシグナル動作=OSのデフォルト動作=SIG_DFL
> とは限らないということでしょうか?
はい。nohup(1)の実装を見てみてください。
>>71 >>70 のいう通りに非0と比較すればいいんじゃないの?
if(!rc){
//success
}
とかで
>>71 それ、どのOSのman?
日本語manだったら多分訳者のところでトチ狂ってる。
76 :
デフォルトの名無しさん :04/10/03 01:45:05
>>72 ,74
戻り値が2値しかないので、そのコーディングの方が素直だし見やすい
かもしれません。使うとしたら if(rc) でエラーだけ見るようにします。
>>73 nohupコマンドで実行された場合、プロセス起動時には既にSIGHUPを
無視するようになっているから、SIGHUPに関してはSIG_DFLとは限らない
ということでしょうか?
>>75 例えばAIXのDocumentation Library(英文)です。-1とは書かれていませんが、
ヘッダを見るとそうなっています。たしかこんなだったかと。
#define SIG_ERR (void (*)())-1
Linux(英訳文)だと0か-1となっており、ヘッダはこうなっています。
typedef void (*__sighandler_t) (int)
#define SIG_ERR ((__sighandler_t) -1)
POSIX仕様はどうだったか覚えてないのですが、たしか0か-1だったと思います。
素直に0が成功、それ以外は失敗だとすればいいかもしれません。
manみたいないい加減な情報しかないからこんなことでもめるんだ UNIXなんて信者絵!
>>76 おおう、マジだ。AIXって変態!
というかSIG_ERRの定義は正しいみたいだから多分ドキュメントバグだろうね。
sigprocmaskなんかはちゃんと-1という表現だし。
悪いこと言わんから、
if (rc == 0) { /* OK */ }
のようにコーディングしとき。それがシステムコール共通の使い方だし。
ちなみにAIXと縁のない人向けにAIXのmanより:
Return Values
Upon successful completion, the sigaction subroutine returns a value of 0. Otherwise, a value of SIG_ERR is returned and the errno global variable is set to indicate the error.
今度から
>>71 の時点で引用してくれると議論が楽。
79 :
デフォルトの名無しさん :04/10/03 08:17:13
IBMいってよし
>>77 UNIXは慢性のドキュメント化軽視アンチパターンですから
修正できないのは組織硬直アンチパターン
バカはスルー
昔は良かった系アンチパターン 今がひどすぎて昔はさも良かったかの様に錯覚する事
>>78 何がおかしいのかわからん
manを見て素直に
if(sigaction() == SIG_ERR){
/* ERROR */
}
とかすればいいのでは?
つーかOKのとき0が返るとは限らんと思うが・・open(2)とか。
>>85 > 何がおかしいのかわからん
rc == 0 の代わりに rc == NULL とするくらい変なのだが。
> つーかOKのとき0が返るとは限らんと思うが・・open(2)とか。
そりゃ当たり前だろ。
値を返すんじゃなくて成功不成功のステータスを返すので成功時に0以外を
返すものはないと思うが。
87 :
デフォルトの名無しさん :04/10/03 22:19:23
少し変更しましたが、こんな感じでしょうか?とりあえずブロック設定、 ブロック解除を試みますが、失敗したらエラー出力してごめんなさい。 でも処理は続けます。次にこのパスを通ったときに解除されるといいですね。 という実装になってしまいましたが、どうでしょうか? int rc; sigset_t set, oldset; sigempty(&set); sigaddset(&set, SIGINT); rc = sigprocmask(SIG_BLOCK, &set, &oldset); if( rc ){ // error log } // ブロックさせたい処理 rc = sigprocmask(SIG_UNBLOCK, &oldset, NULL); if( rc ){ // error log }
88 :
デフォルトの名無しさん :04/10/04 14:04:10
__asm { mov dx3,fah mov al,10000000b out dx,al } 上記のようなアセンブルプログラムをGCCに移植したいのですが エラーが出て困っています。GCC版のプロラムは asm("movb %%dx,$0x3fah"); asm("movb %%al,$10000000b"); asm("out %%dx,%%al"); エラーメッセージは「bad register name '%%dx'」「bad register name '%%al'」 です。GCC版のプログラムに誤りがあると思うのですがどこが間違っているのでしょうか?
すいません、訂正です __asm { mov dx,3fah mov al,10000000b out dx,al }
それはね、 例えば以下の場合は、 asm("movb %%dx,$0x3fah"); ↓ asm("movb %dx,$0x3fah"); にしなきゃいけない。 レジスタに'%%'のように2重に指定するのは、 引数をとるような拡張gasを書いた場合なのさ。 引数がいらないような場合は、%は1つでいい。
>>91 レス有難う御座いました。早速%を一つ減らしてコンパイルしたのですが
別のエラーが出てしまいました。
suffix or operands invalid for 'mov'
suffix or operands invalid for 'out'
backward ref to unknown label "10000000"
なにかコンパイルオプションが必要なのでしょうか?
93 :
デフォルトの名無しさん :04/10/04 15:58:47
gccのasmでは、オペランドの destinationとsourceの指定順が 通常の逆になってたと思うけど。
>>93 有難う御座います。10000000bは0x80としてオペランドの順番を逆にすると
警告が出ましたが一応コンパイルは通りました。
コンパイラは通りましたが実行するとSegmentation faultとなってしまいました。 やはりコンパイル時になにかオプションパラメータを指定する必要があるのでしょうか?
gdbで自分で調べろ
>>94 >警告が出ましたが一応コンパイルは通りました。
一応、その警告を貼ってみれ。
>コンパイラは通りましたが実行するとSegmentation faultとなってしまいました。
>やはりコンパイル時になにかオプションパラメータを指定する必要があるのでしょうか?
むしろ、逆に聞きたいのですけど
そのアプリはgccでコンパイルすれば動くはずのものなのでしょうか?
ちなみに、オプションパラメータうんぬんでSegfalするかどうかは、
まったくありえなくは無いけどまれだと思う。
よほど最適化オプションをキツクしたり、イリーガルなオプションを指定しないかぎり。
とりあえず、"-O0 -Wall -g"オプション(最適化無、警告を表示、デバッグ情報追加)をオプション指定して、
さらに、できるかぎりコンパイル時に出る全ての警告を消すようにしてコンパイルして、
実行したら再度、Segfalしたらgdbでデバッグをすると。
>>96 そんなこと言わないでもうちょっと付き合ってください。
ソース全部貼り付けろ
100 :
88 :04/10/04 17:50:36
>>98 他人の振りして面白いですか?
>>97 その後いろいろ試してソースを書き換えた結果、エラーは出なくなりました。
しかし実行するとSegmentation Errorが出るのでgdbで追ったところoutの部分で
エラーになっているようです。ちなみにこのコードを加える前は正常にコンパイル
が通り動作していたので他の部分は問題ないと思います。
101 :
88 :04/10/04 17:54:17
現在のソースはこんな感じです asm("mov $0x3fah,%dx"); asm("mov $0x80,%al"); asm("out %al,%dx"); ← Segmentaiton Fault Errが出る
serial通信?
権限は関係無いのか?
88はgccとか以前にとんでもない間違いを犯してる ここのスレの住人はアホばっかだな
>>101 ちょっと待ってくれよ、そのソース、本当にコンパイル通ったのか?
以下のように修正する必要ある思われ。
asm("mov $0x3fah,%dx");
↓
asm("mov $0x3fa,%dx");
"h"はいらん。
>>105 すみません、0x3fahじゃなくて0x03f8でした。
>>102 そうです。
>>104 そのとんでもない間違いを教えて貰えると助かるんですが。
つーかまず環境を書け
ぐだぐだになってまいりました
掲示板ではらちがあきません。 telnetポート開いて、IPを教えてください。 接続して調べます。
110 :
88 :04/10/04 19:01:19
192.168.1.3です ユーザ名はguestでお願いします
バザール方式、万歳。
>>110 接続してみた。
ずいぶんcoreファイルあるね〜。整理しろよ!
っておい!俺のマシンじゃねーか!
88氏は、バグが見つかったので修正したあと「お先に」と言って、 今日はもう帰りました。
こういう操作ってioctl使えば出来ると思われ。 やり方知らんけど。
115 :
デフォルトの名無しさん :04/10/04 21:59:53
つか、ユーザランドから outできるの?
>>114 ioctlはopen/close/read/write以外の操作をデバイスに対して
持たせたいときに使う、「その他いろいろ」インタフェース。
何ができるかは完全にデバイス依存。第2引数に整数でコマンドを渡す。
CDのイジェクトもサウンドのミキサ設定もみんなこれ。
>>115 OSによるが、例えばFreeBSDだとroot権限を持たせれば/dev/ioを開けて、
そのユーザプロセスがI/O操作することを可能にできる。
117 :
デフォルトの名無しさん :04/10/04 22:46:34
つーかgccって__asmの構文のままじゃ通らないの?
>>112 すみません。
127.0.0.1
でした。
よろしくおねがいします。
どうでもいいネタを引っ張るな つまんねーんだよ
他の掲示板で良いとこ知らない?
>>121 逝ってみたけどここよりレベル低そうだぞ
ところで、88は聞くだけ聞いておいて 直ったとたんおさらばですか。そうですか。
しんなのんだろ
レベル低いヤシが寄って来たから愛想尽かしたんだろ。
>>120 掲示板じゃなくてネットニュースとか見てみたら?
ぎゃふん
現在、レベルの低い奴らがこのスレを監視中...
131 :
デフォルトの名無しさん :04/10/05 23:07:31
88は教えて君の鑑ですな
>>131 お前って他の質問スレでも下らないレス繰り返してスレ荒らしてるよな。
質問に答える知識がないなら引っ込んでろ。
お怒りくん登場!
そうだそうだ!ひっこんでろ!
質問スレまで荒らす馬鹿がいるとはさすが2ちゃんですな。
>>132 見ているのなら答えてくれた人に礼くらいしろ。
138 :
デフォルトの名無しさん :04/10/06 13:03:38
>>137 礼はそのつどしてるようだが。全然関係ない馬鹿が横槍入れてきた
せいで話がぐだぐだになったんだろ。文句いうなら
>>98 みたいに
幼稚な真似する馬鹿に言えば?
107以降書き込みをしていないということは解決したんだろうが、 解決したならなにか一言書くべきだろ。 そんなんだから教えて君と(ry
環境を書けと言われて逃げる奴は大抵ネタ
>>143 >>107 以降は荒らし君のおかげでレスしようがない状態になってるだろ。
とても解決に結びつくようなレスがあるようには見えないし。そもそも
君は何か解決に結びつくようなレスをしたの?
これに懲りてもうネタにレスをしないことが閣議決定されました。
> レスしようがない状態 そのわりには煽りだけは入れているようだけどね
>>143 は解決するようなレスしたのに礼が無かったから怒ってるんだろうね。
解決したんじゃなくてネタだということがばれそうになってので逃げただけ。
152 :
デフォルトの名無しさん :04/10/06 16:19:17
まともな回答が欲しいならLinuxメーリングリストに登録しる。 ここはちょっと小難しい事聞くと荒らししかレスして来なくなるし。
ノイズはたしかに否めないが、まともな質問にはまともな解答は来る
>>153 まともな質問じゃなくて誰でも答えれるような質問ね。
out のオペランドの順序は大丈夫?
156 :
デフォルトの名無しさん :04/10/06 18:33:48
何が気に入らないんだろう?
現実社会でも無視されてる荒らし君だからせめてネットでは相手して欲しかったんだろ。
159 :
デフォルトの名無しさん :04/10/06 20:30:13
粘着してレベルが低いと訴えるくらいなら、自分が回答すればいいのに。 それとも、回答もらえなかったから逆切れしてるのか。
そんなの誰も分かるはずないので終了
このスレのnice値が一気に下げられました。
逃げたのならおとなしくしていればいいものを、なんで荒らすかねぇ。88は。
最初から下がるほどはないっす
>>161 nice値が下がるとプライオリティはどうなるんだったっけ?
いつまでたっても覚えられん。
>>164 低いほど高プライオリティ
>>145 荒れてても発端の本人が出てきて、
低姿勢にやれば、大抵収拾はつくけどね。
まあ別にたまにあれるくらいええやろ。
ちょっと、心をおちつけて。 UNIXを知らなかったあの頃を思い出してごらん。 あの頃の君達は希望に満ち溢れていたよね。 そう、今まで君達は、とっても悪い夢を見ていたんだ。 UNIXなんか捨てて、あの頃見ていた希望を取り戻そうよ!
そこでTronですよ
プライオリティーのポイントが高いということは それだけシステムに優しいということ
よく言われてる事だけどUNIX関連の掲示板って 妙に偉そうなのが多いいのは何故?
それは君の心です。
全部GNUが悪い。 RMSが悪い。 オプソが悪い。 もしUNIXにEmacsが無かったとしたら、 もっと良いOSになってたかもしんない。 もしXなんてものができなかったら、 もっと良いGUIになってたかもしんない。 もしRMSが、GNUが、なかったとしたら・・・ それはきっと、素晴らしい世界。
Ruby >>>>>>>>>>>>>>>>>>>>>>>UNIOX
Lindowsが最強ってことで
あっ!なるほど。
今、
>>169 がうまいこと言った。
のに、誰も気づかないのは、うにくすを使う者としてもぐり。
>>176 なるほど。
おれ、niceの値はOSがそのプロセスに制御を渡すまでの
待ち時間みたいなものだ、と覚えた。
マイナスがわけわからんけど、覚え方ということでね。
大きければ待ち時間が長くなる=優先度低い、ってイメージ。
emacs便利だと思うんだけど…
EmacsはUNIXの上に全く別の環境を作ろうとした寄生ウェア。 その罪は重い。
UNIXとしては真っ先に排除しなくてはならなかったのに、 便利だ、便利だといってそのまま放置、RMSはこれを機に増長し、 UNIXにGNUという悪性ウィルスを感染させる。 このウィルスはオープンソースという馬鹿げた思想を掲げ続け、 この影響でUNIXの発展は停滞し、思想の1つが崩れ去った。
UNIXから去っていく企業、規模を縮小する企業が続出し、ソフトウェアの 価値が著しく低下した。ただでさえ保護が難しいソフトウェアにGNUは オープンソースという暴力の強制で業界全体にトドメを刺した。 今やUNIXは自分の首を絞める行為だと理解しない・理解しようとしない、 ソース原理主義者どもの巣窟、隔離施設なのである。
コピペか
自慢してら。 事実誤認だらけなのに
>>182 非公開にすることで付与されるソースコードの価値で
維持してるような会社は今後縮小せざるを得ないだろうね。
適正な規模に戻れってこった。
関係ないはなししはよそでおねがいします。
質問スレとしての機能を果たせないんだから関係ない話でスレ消化するしかないだろ。
粘着もここまでくると可哀想だな
>>190 ほら、下らんレスにはすぐ食いついてくるw
192 :
デフォルトの名無しさん :04/10/07 21:41:08
88はまだ粘着しているのか(笑)
>>192 そんなに88に相手してもらいたいの?粘着君 プ
>>193 ほら、下らんレスにはすぐ食いついてくるw
>>194 レス早っ!ずっと監視してんのか。キモ過ぎ・・・
3分足らずでレスする195=88も同じだよw
>>195 別にずっと監視しなくても他のスレのレスとか見ながらスレ一覧を更新していれば
このスレが更新されたかどうかなんてすぐにわかるし、べつに変じゃないよ。
あと、「キモ」いという言葉はあまり好きじゃないな。
たとえ自分に当てられた言葉でないとしても良い気分はしないし、私以外にも
そう思っている人がいるだろうね。
88大好きキモオタが粘着してるようだけどこのスレって質問すると ずっと煽られ続けるのか?
関係ないはなしししはよそでおねがいします。
質問も他スレでした方がいい?
もういいだろこのスレは
やれやれ。スレ立てしてくるわ。
>>202 どうせ同じ事になるから無駄だと思うけど。UNIXやLinux使ってる人って
自力で学習してる人が多いから他のOS使ってる人に比べて質問する人
を毛嫌いする傾向があるね。
>>205 あんまり突っ込まれるとわかんないからだよ
なんせUNIXにはグルいないから
UNIX自体どマイナーなのに実際に使うマシンは
さらにその枝の奥の葉だからね
わかんないことあったらまずサポートに投げる 自分以外は全て敵と思え これがUNIXの正しい運用方法
まずはStevens本を読め。
自助努力の跡が見える質問だったら歓迎なんだけどな。 伝説のM女史みたいな臭いが少しでもしたら激しく嫌われる。 んでM女史傾向のあるやつが質問したら叩かれて、 逆ギレの構図かなw 頭悪いからそのへん自覚も区別もできんのだろうな。 「なんでおれが」って。それ、お前だからだってw
>>211 オタク臭い文章・・・。やはりUNIXユーザーってちょっとアレだな
つまりUNIX関連の質問スレは不要って事で
>>213 オタクですがなにか?w
ま、馴れ合いたいならそういうところを探すこった。
>>215 どっちかというと君が場違い。質問スレで質問したやつ叩いてどうする。
>>215 ふ〜ん、ここって馴れ合い禁止なんだ。そんな高尚なスレだとは知らなかったよ。
218 :
デフォルトの名無しさん :04/10/07 23:25:50
馴れ合いかどうかと、高尚かどうかは関係ないだろう。
つまりオタク専用スレって事だね。
220 :
デフォルトの名無しさん :04/10/07 23:31:04
UNIX プログラミング 2ちゃんねる どれをとってもオタクそのものでは?
>>215 意味分からん。馴れ合うなって気軽に質問すんなって事か?
>>220 2ちゃんねるを除いて、それらがどうしてオタクなの?
プロだとそういうのは当り前のことじゃないか。
そもそもオタクってどういう意味だ?
だいたいM女史って誰だよ しらねぇよ
検索くらいしろよ
>>222 アニメだって、プロならそういうのは当たり前のことだ。
ま、馴れ合いたいならそういうところを探すこった。
2ちゃんねるって馴れ合う掲示板だと思ってたんだけどUNIX関連スレだけは別格なんだね プ
このスレってUNIX使いの生態が分かって面白い。
UNIXを使っている自分に酔ってます
>>229 もうUNIX使うのやめます!
UNIXに使われます!
pkill -231
talk 231 You gata me-ru.
halt
なんかネットワークプログラミング相談室とフンイキが似てる。
中のひとが同じだからな
cursesライブラリに関する本とかwebページを教えてください。
238 :
デフォルトの名無しさん :04/10/09 20:49:39
あまりないよね
4BSDのドキュメントの ps1/18.curses ってのを読みましたよ、大昔ですが。 4BSDの/usr/doc下のドキュメントはAT&T由来のものも含めて、 簡潔で優れたものが多かったです。
そういやRMSが事故ったらしい GPLとともに天に召されてくれ
事故った時には既に降りた後じゃなかったっけ?
RMS怪しいな
今のRMSは偽者です。かげ武者です。 ただ、これ以上話すとFSFに暗殺されてしまうので 話せません。
>>243 もう、遅いよ。
そっちに刺客を送った。
ヤバイ。月詠ヤバイ。まじでヤバイよ、マジヤバイ。 月詠ヤバイ。 まずOPがデンパ。もうデンパなんてもんじゃない。超デンパ。 デンパとかっても 「ドクロちゃん20冊ぶんくらい?」 とか、もう、そういうレベルじゃない。 何しろネコミミ。スゲェ!なんか単位とか無いの。何坪とか何?fとかを超越してる。ふさふさしてるし超白い。 しかも着脱可能らしい。ヤバイよ、着脱可能だよ。 だって普通は耳とか取れないじゃん。だって自分のペットの耳がだんだん取れていったら困るじゃん。犬の耳が部屋にごろごろとか困るっしょ。 取ったり外したりして、去年の冬はピンと尖った柴犬の耳だったのに、今年の夏はブルドッグのたれ耳とかだったら泣くっしょ。 だから犬耳とか取り外ししない。話のわかるヤツだ。 けどネコミミはヤバイ。そんなの気にしない。着脱しまくり。ネコミミを付けた有用性を検証してもよくわかんないくらい飾りそのもの。ヤバすぎ。 飾りっていたけど、もしかしたらなんか意味あるのかもしんない。でも有意義って事にすると 「じゃあ、見た目の変化以外でネコミミ付けるメリットってナニよ?」 って事になるし、それは誰もわからない。ヤバイ。誰にも分からないなんて凄すぎる。 あと歌詞が超単調。約9水戸黄門。ライトノベルで言うと869馬鹿一。ヤバイ。リピート。銃弾をペンダントが防ぐ間もなく死ぬ。怖い。 それに超意味が無い。超無意味。それに超意味不明。モードとか平気で出てくる。モードて。荒木飛呂彦でも言わねぇよ、最近。 なんつっても月詠はヒロインが凄い。吸血鬼でネコミミ幼女のご主人様とか平気だし。 うちらなんて吸血鬼とかたかだか強キャラとして出てきただけで上手く扱えないからハーフにしたり、意外な弱点を作ったり、夜の街で戦ったりするのに、 月詠は全然平気。吸血鬼をネコミミ幼女として扱ってる。凄い。ヤバイ。 とにかく貴様ら、月詠のヤバさをもっと知るべきだと思います。 そんなヤバイ月詠を描いた有馬啓太郎とか超偉い。もっとがんばれ。超がんばれ。
246 :
デフォルトの名無しさん :04/10/11 18:21:12
_open とopen なぜ2つのシンボルが定義されてるんですか?
これは、低水準なのでなるべく別の関数(高水準の)を使って下さいという意味です。 でも気にせず使ってしまいましょう。 また、_open()とせずに open()としても、エラーにはなりません。 似たようなものにgetch()があります。 これもアンダスコア付き関数ですがgetch()のまま使っても問題ありません。 O_APPENDなどの定数類もアンダスコアがついています。 取ってしまっても差し支えありません。
248 :
デフォルトの名無しさん :04/10/11 23:48:41
247はネタ?
ネタじゃなければ何なんだよ… exit(3)と_exit(2)の違いでも調べてくれ。 これはちゃんと明文化されているから。 POSIXやX/Openに含まれてるからね。
250 :
デフォルトの名無しさん :04/10/12 01:12:44
>>249 > ネタじゃなければ何なんだよ…
つまりネタということですか。
1行めは本当。後はネタ。
ういんどーず、ういんどーず、ごー、ごー、ういんどーず!
ネコミミモード
嘘をつくと地獄に落ちますっ!
>>254 こりゃ駄目だ…
このページ書いた人アホ?
257 :
デフォルトの名無しさん :04/10/12 21:15:53
>>249 >exit(3)と_exit(2)の違いでも調べてくれ。
>これはちゃんと明文化されているから。
サンクス
258 :
デフォルトの名無しさん :04/10/15 23:00:10
/bin/hosh
>>256 つか、そのページ、Windowsの話のページだし
260 :
デフォルトの名無しさん :04/10/21 00:42:17
/bin/hosh
[localhost:~] %
C++でUNIXのシステムコールを使う場合の例を探してます C++版のUNIXシステムコール(signal()など)ってあるんでしょうか それとのC版システムコールをextern宣言して使っとけば問題ないのかな
言語関係無いし。
というか、システムコールとはなにかを勉強する方が先かもしれん。
>>263 詳解UNIXプログラミング
を推します。
こう何度も出てくるんじゃ、やっぱテンプレにAPUE買えって入れるべきじゃね?
268 :
デフォルトの名無しさん :04/10/21 23:23:03
Advanced Programming in UNIX Environment と脳内変換出来なかったヲレはもう一度読み直します.
Unix Beginner *have to* read a APUE.
それ何かいいこと書いてあるんか。Hな写真とか載ってるんか。
271 :
デフォルトの名無しさん :04/10/21 23:31:32
明日本屋へいって見てこい。
プププ
初心者なもので的外れな質問でしたら失礼しました。 とりあえずお勧めされた本(詳解UNIXプログラミング)を 探して読んでみます。ありがとうございます。
原本いらね リファレンスとサンプルコードがあれば十分。 自然言語での適当な解釈は有益なオプションだね。 そもそもシステムコールというのは思想とは違うから原本の厳密な意味理解 は必要ない。 理解すべきはシステムコールの振舞いだよ。
おまいが理解すべきは日本語の書き方だ
280 :
デフォルトの名無しさん :04/10/22 12:06:36
要は関数だろ
あれよりまともなUNIX入門書もない希ガス
まちがってるの? > かなめはかんすうだろ
278の間違いだ
286 :
デフォルトの名無しさん :04/10/23 07:47:03
GIMPの画像処理部のソースが読みたいのですが、 どこから手をつけていいかわかりません。 いいスレがあったら教えてください。
コマンド名とlibcの関数名やシステムコール名がダブってるけど、 あれらはどっちが先に出来上がったんでしょうか?
>>288 両方(ほぼ)同時に成立したものと、一方が先に成立したものがある。
290 :
デフォルトの名無しさん :04/10/23 14:39:30
cもしくはc++で特定のディレクトリのファイルの一覧を取得する方法を教えてください
readdir()
writedir()
294 :
290 :04/10/23 16:02:09
>>291-293 バーカ。
"CもしくはC++で"
というのが見えないのか?
日本語が分からないなら黙ってろ。
opendir readdirってCだろ
CまたはC++の標準ライブラリでって言いたかったんだろうな。 ちゃんとした日本語で質問しないからこんなことに・・・
>>297 ライブラリ関数のセクションにあるから
違うんじゃないの?
ほんとだ
system("/bin/ls");
307 :
デフォルトの名無しさん :04/10/23 18:53:26
308 :
デフォルトの名無しさん :04/10/23 19:43:21
UNIX に Windows の COM みたいな仕組みってないの?
CORBAしかない
gnomeがCORBAを使ってるね。 でも重すぎ。理想はわかるんだけどね…
>>311 広く標準化された規格って、肥大化して重いのが多いよね。
一個人や企業が独自に策定した規格のほうが使えるやつが多いって感じる。
>310 これって COM を移植するための方法であって、 UNIX に COM システムを導入しているわけではありませんよね。 COM の移植って、そんなに難しいものではないと思うんだけど、 誰も開発しないのかな。。。
そこでRuby!!!!!!!!!!!!!!!!!!!!!!!!
>314 Ruby だと UNIX でも COM 使えるの?
dcopだっけ?
なんにしても普く使われている軽量で現実的な仕組みはないってこった
>>315 そいつに聞いてもなにもわかりませんよ。
>>319 じゃああなたが答えてくれるというのですか?
321 :
デフォルトの名無しさん :04/10/23 23:59:39
あるオブジェクトファイル内に、 ssize_t read (int fd, void * buf, size_t size) { /* 何か処理 */ } と定義して、関数mainからこの関数を呼ぶと、 libc内で定義されている関数readではなく、 上記の独自に定義した関数readが呼ばれてしまうのですが、 これってOKなんですか? システムコール関数を再定義するのって有りなんでしょうか?
>>321 それで問題が起きないのなら、別に構わない。
>>322 最悪のバグはいつもユーザの手元で起こるものだ
>>321 そういうことを可能にするためにシステムコールはわざわざweak symbolになってたりする
>>321 インターポジショニングっていうんだっけ?
326 :
デフォルトの名無しさん :04/10/24 02:02:32
>>322 まあ・・そう言われればそうなんですが、この場合に自分が
知りたいと考えているのが、
「なぜライブラリ関数なんていう重要な定義が
ユーザ側で再定義可能になっているのか?」
という事でして、出来ればもう少しその地点から進みたいと
思っています。
>>323 おっしゃるとおりです。
>>324 今自分の環境(FreeBSD5.2)で調べてみたのですが、
W read
T _read
となっていました。(libc内で)
>>325 ありがとうございます。愚具ってみます。
システム標準のライブラリなんて別に特別なもんじゃないよ。 これがUNIXとCの考え方。 70年代前半に現在のシステムの潮流を作った。以前は(ry
>>321 Cとかの単一の名前空間しかもてない言語では激しく厳禁。
名前空間が分かれてても同じだろ。
というか、Cとかのプログラミング言語に依存した話じゃなくて、 ELFとかダイナミックリンクとかのレイヤの話だな。 それに、>324も書いているように、そういうことが禁止されているわけじゃない。 「素人が手を出すな」という意味なら激しく同意だが。
socket()を乗っ取ってウマー
>>331 他プロセスのAPIをのっとれる訳ではないと思うのだが……。
>>332 こっそりLD_PRELOADを仕込んでおいて…
>>326 例えば libc_r.so (ユーザレベルのスレッドライブラリ)では、
read()をnon-blocking I/Oとpollシステムコールを使ったルーチンに
置き換えている。
こうすることでユーザレベルでのマルチスレッドを実現しているわけだ。
さらに ports/www/linuxpluginwrapper とかでは
同様なシステムコール等の上書きにより、Linux用の*.soファイルを
FreeBSDネイティブなプロセスにダイナミックリンクして使えるようにするという
芸当をやってたりする。
>>334 > 例えば libc_r.so (ユーザレベルのスレッドライブラリ)では、
これはライブラリ全体の置き換えなんでちょっと話がずれたね。
pthあたりを例にするのがいいのでは。
>>335 4系ではそうだけど、5,6系統は必要なものだけの置き換えになってますよ。
ライブラリのサイズを比べれば一目瞭然。
Cの言語仕様と同じぐらい重要なのがELFの知識、と ある人はいっておりました。
たぶんqsort(3)を実装する時…
なんで?
Hello, World!に必須
343 :
321 :04/10/25 22:33:26
皆様アドバイスをありがとうございます。
あれから色々と調べてみようと思い、
結局 /usr/src/lib/libc/ 以下のMakefile を読んでみて、
どのようにライブラリが作られてるのかを調べていました。
・・・結局分かった事は、read.oオブジェクトファイル内で
まず関数_readを定義し、その後
.weak open
.set open, _open
としてシンボル_readの弱いシンボルreadを作っている
という事だけでした。
・・なんか自ら本質から遠ざかってるような気がするんですが。
>>334 >これはライブラリ全体の置き換えなんでちょっと話がずれたね。
いえとんでもないです。ソース眺めている時に、
「libcの隣にlibc_r?しかも同じシンボル(openやread)がある!?」
と思っていたところでした。334さんのおかげで少し理解が出来ました。
おそらくこれが、「インターポジショニング」の効果で、
(Expert C programmingによると)素人が手を出すなという箇所ですよね?
>>336 >pthあたりを例にするのがいいのでは。
すいません。今はそこまで手が回りません・・がいつかは。
>>338 >Cの言語仕様と同じぐらい重要なのがELFの知識
file /usr/lib/lib* とすると "ELF 32-bit 〜" がずらずらと。
ELFの仕様書も読んでみます。
readは引数書くのが面倒なんで(w void __f () { ああだこうだ; } void f () __attribute__ ((weak, alias ("__f")));
346 :
デフォルトの名無しさん :04/10/26 21:36:08
age
ふと思ったのですが、「アボート」と「セグメンテーションフォールト」はどう違うのですか?
じしょひくとわかるよってとなりのひとがいってる
349 :
デフォルトの名無しさん :04/10/26 22:46:33
どうと言われても全然違う。 発生したときのデフォルトの挙動は似ているけど。
アボートはsegvのような意味で発生するもんじゃないだろ
セグメンテーションフォールトが原因でアボートしますた!
352 :
デフォルトの名無しさん :04/10/27 18:02:11
shellについて質問させていただきたいのですけれでもここでよかったでしょうか? もしまちがってましたら、誘導願います。 でしつもんなんですけれども shellのなかで aaa*dat (*にはランダムの数字が入る)というような ファイルのファイル名を取得したいと思っています 存在する場合には正しく取得できるのですが、 しない場合にファイルが存在しませんとのメッセージが大量にはかれて困っております shellのなかで filenm=`ls -1 aaa*dat >dev null`として取得しようとしているのですが やはりそんざいしておりませんとログにでてしまいます。 そうぞうするところ。>は標準出力をかえるためで、 標準エラー出力を利用して、存在していませんとメッセージを出しているので でるのかなと想像しているのですが、いきずまってしました。 正しいファイルが存在する際には代入、存在しないときは何のメッセージも 出力されないようにしたいのですが、何か良い方法はないでしょうか? よろしくおねがいします。
>>352 B-shell系なら
ls -1 aaa*dat 2>&1 >/dev/null
#2番(stderr)を1番(stdout)に振り替えてから元の1番と一緒に/dev/nullに振り替え
C-shell系なら
ls -1 aaa*dat >& /dev/null
#標準エラー出力を標準出力と一緒に/dev/nullに振り替え
あのな、普通そういう目的でls使わないの。
355 :
352 :04/10/27 20:10:13
k-shellです(Cshell系なのかな?)。
>>353 さん
ありがとうございました。試してみます。
そしてスペースを含むファイル名でハマる、と…
bash$ (shopt -s nullglob; files=aaa*.dat; for i in $files; do echo $i; done)
359 :
デフォルトの名無しさん :04/10/29 02:11:00
select()やsend()などのシステムコールがシグナルによって失敗すると、 errnoにEINTRが返されますが、この時に受信したシグナルの値を取得する ことは可能でしょうか?
#include <stdio.h> int main() { char *tmp= "a"; const char *tmp2= "b"; strcat(tmp,tmp2); return 0; } というソースを書いたのですがSegmentation faultになってしまいます。 strcatの使い方に間違いがあるのでしょうか? 分かる方お願いします。
そういうのは,自分でシグナルハンドラ書いてるときに起こる。
シグナルハンドラって良く分からないので調べてみますが、 こちらの実行環境に問題があるということですかね?
>>361 先にお礼言っておくべきでした。
ありがとね。
>>360 次の点で二重に間違っている。
* 文字列リテラルを変更しようとしている
* strcatで追加する分の空間を割り当ててない
UNIX以前の問題だこれは。
>>360 問題は二つあります。まず一つ目
char *p = 'string';
式に確保した文字列は中身をいじっちゃいけません。
なぜ? といわれるかもしれませんがそういうものなのです(規格です)。
二つ目。
tmpの指してる先はどれくらいのメモリを確保できてますか?
それは、tmp2の内容を繋げてあふれない量ですか?
# もっとも一つ目の方の違反だけを指摘すりゃいいんだろうけど。
>>364-365 お二人ありがとう。
>strcatで追加する分の空間を割り当ててない
メモリを再び、確保しなくてはいけないんですね。
やりかた調べてみます。
>>360 おまえのプログラムはこれで充分
int main()
{
return 0;
}
368 :
デフォルトの名無しさん :04/10/29 06:54:00
>>365 文字列をシングルクォートで囲むなよ。Perlじゃあるまいし。
main() { char *tmp=(char *)malloc(22); char *tmp2= "a"; char *tmp3= "b"; strcat(tmp,tmp2); strcat(tmp,tmp3); return 0; } とりあえずこれでいいのかな。 それにしても、このスレの質問はレベルの高い質問ばかりですね。 お邪魔しました。
370 :
デフォルトの名無しさん :04/10/29 07:00:01
tmp[0] = '\0'; strcat(tmp,tmp2); strcat(tmp,tmp3); あとfreeな(この場合はしなくても結果は同じだが)
>>360 C言語やめてVBとかにしなさい
というわけでUNIXやめなさい
>>358 zshだと、
zsh$ (setopt NULL_GLOB; files=aaa*.dat; for i in $files; do echo $i; done)
こうなのかな? 一つも存在しない時うまく働かないね。
おいおい、素直に strcpy(tmp, tmp2);strcat(tmp, tmp3); か sprintf(tmp, "%s%s", tmp2, tmp3); にしろよ。
overflow防止のために、strlcpy/strlcatかsnprintfを使うべきだ。
375 :
デフォルトの名無しさん :04/10/29 12:07:24
strncpy/strncatだろ
>>375 いまどき strncpy/strncat なんて使ったらダメだってば。
OpenBSD/NetBSD/FreeBSD/Solaris にはあるよ > strlcpy/strlcat
まあnだろうがlだろうがCで文字列処理書くと だいたいバグの温床になるのがオチ
strnファミリーは渡す長さが1足りない奴とかNUL termination忘れる奴とか いるからね。strl*が出来てだいぶましになった。
str*系もろくに扱えないってことは、UNIXスレは馬鹿ばっかってこと?
str系なんてつかってるやつは馬鹿です
ソウディス!! ダデャーナザーン!! アウア
おれstrncpyなんか使った事無いよ。 仕様確認すんの面倒だから長さの判定が必要ならmemcpy使うし。 結局strlcpy と strlcatもstrnと同じ問題抱えてる。 strcat使う局面でバッファ管理するぐらいなら↓を使う。 s = strdup("hage"); s = strdupcat(s, "hage"); s = strdupcat(s, "hage"); s = strdupcat(s, "hage"); #define strdupcat2(s,cat1,cat2) strdupcat(strdupcat((s),(cat1)),(cat2)) #define strdupcat3(s,cat1,cat2,cat3) strdupcat(strdupcat2(s,cat1,cat2),(cat3)) #define strdupcat4(s,cat1,cat2,cat3,cat4) strdupcat(strdupcat3(s,cat1,cat2,cat3),(cat4)) strdupcat(s,cat) { int catlen = strlen(cat); if (s) { int slen = strlen(s); s = xrealloc(s, slen + catlen + 1); memcpy(s + slen, cat, catlen); *(char *)(s + slen + catlen) = 0; } else { s = xcalloc(1,catlen+1); memcpy(s, cat, catlen); *(char *)(s + catlen) = 0; } return s; }
↑のstrdupはxstrdupね。 x〜は確保できなかったら例外投げるラッパ。 メモリリークチェッカも兼ねてるが。
つーかOpenBSDのstrlcatとか考えた奴は考えなしの馬鹿だろ。 こんなのが普及するとか言ってるUNIX使いマジ低脳。
>>382 それいいねえ。
LISPのconsっぽい。
どのみちstrcatでバッファオーバーする場合は別途何かしら処理するのが普通だから、
strlcat通すのはあんま意味ないかも。
そこまでするなら事前に文字列の長さ測れ、と。
途中でちょん切られても困る場合がほとんどだろうしね。
>>384 かなり使われている(OpenBSD と NetBSD のかなりの部分は strl* で書
き直されている)し、ISO でも次期 C に strcpy_s strcat_s として入
れるよう議論してるみたいですよ。
strn* のクセがわかっている人は strl* を使う必要はないけど、多人
数で開発するなら strn* をわかってない人がいることも想定して、
strl* にするのが安全です。
>>386 まさにそれ。
用途を想像できてないんだよな。
strn*も含めてstrlcpyやstrlcatは消えるべき。
何時使うんだよこれ。
勝手にチョン切られて良い局面なんてあるか?
>>387 相変わらずUNIX使い頭悪すぎだな。
まあおれが言うまでも無くいまだにコマンドラインベースで
物考える奴の頭の程度なんて知れてるけどさ。
strlに書き直されたって、OS書くのにわざわざそんな危ない事してるとは呆れるね。
きっとOpenもNetもさ、いまだにどっちも仕事で聞いた事ないから
超ドマイナーなんだろうね。
389 :
デフォルトの名無しさん :04/10/29 13:59:14
祭り?
>>387 もういっこ突っ込んどくと、
>strn* をわかってない人がいることも想定して、
こんな想定無意味。
おれならstrn*とか使ってたらメンテしにくくなるから書き直せって言うけどね。
>>390 反論するならちゃんと最後まで言えよ低脳。
>>382 何度も無駄にくりかえされるstrlenがダサすぎ。
>>393 ありゃりゃ。
ほんと低脳だな。
無駄なstrlenなんて1つもないんだが。
ところで、strlcpyやstrlcatっていつ使うの?(笑
無駄だと思っていないあたりが頭悪すぎ。
いまどきCで文字列処理なんてする奴は低脳。
>>395 低脳クン、
あと何か無駄なとこあるかな?(笑
しいて無駄って箇所を上げるとすれば、xcallocのゼロ初期化だな。
あそこはxmallocで良い。
まあ即興で作った例だから本質とは無関係な部分だけどね。
>>396 いいよいいよー(笑
そうだよね、いまどきCなんて低脳。
でもUNIXっていまだにCなんだよね。
なんでだろうね(大笑
399 :
デフォルトの名無しさん :04/10/29 14:14:23
文字列処理不要ならCが良い
ここは舞い上がったロートルが真昼間から常駐するスレですね
いや、
>>382 は正論だと思う。
結局誰もstrl*の使い道思いつかないし。
自分もちょっとstrnとかは避けたい。
ロートルのトロールですね。
そもそもstrcatは使う前に文字列の長さは把握するのが普通だよ。
strlcatに書き換えたって、どこ書き換えたの?
>>387
>>399-404 うわ、
やっぱり反論できないから、こんどは手のひらを返したかのように擁護レスがちらほら(笑
>>404 なんて自分を見失ってるし(禿笑
なんなんだお前ら。
面白すぎだぞ!
Mac板にカエレ
strncpyは固定長バッファでがんばるときに使うのさ。
std::string使えればそっちつかっちゃうな。フォーマット系統が弱いのが辛いけど。
つまりRuby厨ということか。
>>410 おれもC++使えれば
>>382 みたいなのは作らんがなあ。
でもここUNIXスレだし、しかも元がstrcatの話だったしでね、
Cでわかりやすくノウハウを伝授したつもりなんだがねえ。
さすが低脳集団を抱えるスレは違うわ。
>>411 いや、Rubyなんて関係ないじゃん(笑
そろそろstrlcatの使い道とやらを聞かせてくださいよー
C使いでないことは確かだ
だな。
>>409 MTUに収まるようなUDPに文字列詰めるときとか
あとは高速化のためにmallocの代わりに固定長バッファを
バラバラともらうようなライブラリ使わされたときとか。
>>413 =414
うぷぷpppp
判り易過ぎる自演どもでしたー!
あのさ、strl*の使い道聞いてただけなのに
UNIXスレ君だけになっちゃったよ(笑
もうどうしようもないね、ここ。
>>415 うーん、それはstrlcpyやstrlcatの用途ではないな。
書き込んでない残りの文字数を把握する必要があるでしょ?
それ別途計算するの?
strl*の例としては無理やり使ってるとしか思えないな。
もうちょっと説得力のある使い道ないの?
snprintfでいいじゃん。
OS とかサーバソフトみたいに、データが正しいことよりバッファオー バーフローを防ぎつつ動き続けることのほうが優先される場合に strl* を使うですよ。 foolproof なんだから、fool でない人にメリットがないのは当然。
>>418 いやfoolだとして、なんでわざわざmemcpyじゃなくてstrl*使うのかな、と。
>>418 みたいな局面ならそもそも\0終端文字列なんて出番ないし。
つーかstrl*が必要な局面教えてちょーだいよ、ってさっきから言ってるんだけどね…。
パフォーマンス考えても得体の知れないstrl*よりはmemcpyの方が期待できるし。
>>418 途中で切られたデータを元に動きつづけるの?
もういいよ。 strl*は馬鹿が自己満足で作ったクソ関数です。
422 :
デフォルトの名無しさん :04/10/29 15:11:22
ぷぷぷ君が書き込まなくなっちゃった。
>>419 つまりさ、strlcpyとstrlcatはどっかのキモデブアニオタOpenBSD信者がろくに
開拓されていないクソマイナーOSなことをいいことに自分の自己主張のためだけに
一般公開してISOに提案したはいいけど相手にされず馬鹿にされて反論できなくて
くやしくて泣きながら盗んだバイクにガスが入ってなくて結局徒歩で走り出した
あの日15の夜、ということでいいです。
snprintfは書式によって出力の長さが簡単に予測できないから意味あるけど strlcpy|catはあんまり意味ないね
だな。
strl*使おうとするやつは想像力が足りないんだと思う。 418とか無茶苦茶なこと言ってるし。
str*_s を ISO に提案したのは Microsoft じゃなかったっけ
>>419 strl* が「必要」なんて言ってる奴はいないんじゃ?
strl*が必要な局面? そんなのstrn*が必要な局面に決まってるだろ。
Ruby最強! Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> C
hihi
ゼロ終端文字列 イラネ
2004年にstrなんとかとかいうレガシー関数の話なんてしてないで std::string使えよ
>>436 新しい知識を一切勉強することなしに定年まで乗り切るんだよ
最新のものに手を出し始めたらきりがないからな
>>437 あぁ、ごめん、私はプログラマじゃないんだ。
あまり古いことにしがみついていたら論文の一つも書けないんだよ。
もっとも、君が言うのはプログラミングの「テクニック」に関する事だろうけれど。
どこ行ってもCの話は荒れるな。
みんなRubyでCを捨てようぜ。
RubyとCは一心同体少女隊。 Cを捨ててRubyだけが生き残ることはありえない。
442 :
デフォルトの名無しさん :04/10/30 01:23:06
うぷぷpppp
C は Obsolete です。
C は Absolute です。
社会に下水が必要だからといって誰もが下水に降りて汚水まみれになる必要はない。 汚れ仕事は一部の人間だけで十分だ。
>>445 アセンブラに対してそれを言うなら分かるが
C にはあてはまらんでしょ
>>446 いや、言語のことじゃなくてプログラマそのもののことを言っているのじゃないかな
C もそうなりつつある
Ruby最強! Ruby以外の言語はケロ!!!!!!!!
Ruby厨は祈った 「Ruby以外の言語は消えろ!」 (その願い、叶えよう) 次の瞬間、Rubyインタプリタのソースが消えてしまった!
451 :
デフォルトの名無しさん :04/10/30 02:37:21
UNIXなぞ問題外.^^;;;
CPUがRubyを解釈するようになれば無問題!!
まつもと様は既に世界最高の至高プログラマである。 今日もRubyを使える幸せに震える毎日です。 Ruby以外の言語はもういらない。 全てのシステムはRubyで記述されなければならない。
>>450 Ruby製Rubyインタプリタを作れば無問題
455 :
デフォルトの名無しさん :04/10/30 02:48:31
> Ruby以外の言語はもういらない。 実際そうだよな。
>>455 Rubyだと不満な用途はたくさんあるだろうに。
Rubyも気の毒だよな こんな基地外に付きまとわれて
それだけRubyは素晴らしいということだ。
まつもとの失言暴言が基地外を召還するんだから自業自得だろ。
失言ってあの「C++なぞ問題外」のことか? いい加減しつこい奴等だな。
そんなのほんの一部^^;;;
>>382 Cでやるなら、こんななんちゃってじゃなくて、
glibのgstring.h使った方がいい。
Theo は de Raadt です。
>>462 glibなんてリンクするかよボケ(^^)
もうstr*ネタはいいだろ もっとUNIXスレらしい話すれ
時々無意味な事で議論するよな、このスレ。
glibはクソglibはクソglibはクソglibはクソglibはクソglibはクソglibはクソglibはクソglibはクソglibはクソ
また原理主義者か
体制に正義は成し得ない
470 :
デフォルトの名無しさん :04/10/30 21:07:57
U
N
K
OpenBSD
Kde
Unicode
Ssl
Apache
Linuxのlinux/list.hに #define INIT_LIST_HEAD(ptr) do { \ (ptr)->next = (ptr); (ptr)->prev = (ptr); \ } while (0) こういう個所があったのですが、このdo{...}while何を意味しているんでしょうか?
復文をマクロ化する時の定石。 if (x) macro(a); else hoge(); と書いても誤動作しない。(forやwhile等でも同じ)
>>479 あー、なるほど。
あとlist.hを見ていて思ったのは、ある構造体の定義に
struct list_head {struct list_head *next, *prev;};
という構造体そのもの(ポインタではない)を入れておいて、
この値に他の構造体のstruct list_headのアドレス値を入れて
各要素間の関係を表すのは分かりましたが、ここから、
その構造体のメンバのアドレスはどうやって取得したらいいんでしょうか?
struct hoge{ struct list_head list; /* ユーザ定義データ */ }; みたいな感じで使う。
>>481 linux/device.h にはdevice_driver構造体のような
struct device_driver {
char* name;
struct bus_type* bus;
struct semaphoreunload_sem;
struct kobjectkobj;
struct list_headdevices;
というようにlist_headが構造体の頭にないものもありました。
他にもこういうものはあるようです。この場合、次のオブジェクトの
devicesのアドレスから、どうやって"name"や"bus"といったメンバの
値を取得したらいいのでしょうか。
っていうかソース読んできます。
あ、tabが入ってました。すみません。 struct device_driver { char * name; struct bus_type * bus; struct semaphore unload_sem; struct kobject kobj; struct list_head devices; struct module * owner; int (*probe)(struct device * dev); int (*remove)(struct device * dev); void (*shutdown)(struct device * dev); int (*suspend)(struct device * dev, u32 state, u32 level); int (*resume)(struct device * dev, u32 level); };
>>482 list.hのlist_entryマクロだろう。
>>484 どうもです。このようにtypeof()に依存した形での実装となってました。
[[[ linux/stddef.h ]]]
#undef offsetof
#ifdef __compiler_offsetof
#define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER)
#else
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#endif
[[[ linux/kernel.h ]]]
#define container_of(ptr, type, member) ({\
const typeof( ((type *)0)->member ) *__mptr = (ptr);\
(type *)( (char *)__mptr - offsetof(type,member) );})
[[[ linux/list.h ]]]
#define list_entry(ptr, type, member) \
container_of(ptr, type, member)
こんな感じに使うみたいです。
struct device_driver * nextdd = list_entry(p_dd->next, struct device_driver, devices);
486 :
デフォルトの名無しさん :04/11/01 09:53:20
;
487 :
485 :04/11/01 10:42:59
linux-2.4.27ではlist_entryはこのようなシンプルな形でした。 #define list_entry(ptr, type, member) \ ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) なんで2.6でああいう面倒な形になったのか分かる人はいますか?
488 :
デフォルトの名無しさん :04/11/02 06:48:34
Cで自分自身のプロセスIDの取得方法を教えてください。
489 :
デフォルトの名無しさん :04/11/02 06:49:47
>>488 #include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);
>>489 いかにもマニュアルからコピペしたけど空白消すのめんどくさかった感じがいいね.
>>490 「そんなんCじゃないだろ」「うっせー、ここはUNIXスレだ。POSIXだってOKだろ」
「ふざけんな、"Cで〜"って書いてあんだろ」
って質問者無視した罵りあいが読めなかったのは残念だが。
どこがCじゃないんだよヴォケ
ANSI C で、とは書いてない罠
メモリ操作だけでPIDを算出しろ
というかこんなに引っ張るほどのネタか
自作自演だろ
498 :
デフォルトの名無しさん :04/11/03 18:02:09
496=497
zlibって暗号化zipの圧縮・伸長もできるんですか?
そんな餌で――
皮って良く伸びるんだよね
502 :
デフォルトの名無しさん :04/11/04 15:40:13
503 :
デフォルトの名無しさん :04/11/04 17:07:40
CPUの数を取得する方法を教えてください
>>503 sysctl や /proc/cpuinfo で取れるカモ
ファイルを作成するときに既に存在する名前だったら名前に番号をつけて 作成したいんですが、ディレクトリ内のファイル一覧を取得するシステムコール とかライブラリは有りませんか?
>>505 「既にファイルが存在していたら書き込み用オープンに失負する」て
開き方のがあったと思うが忘れた。たしか fopen() か open()。
man opendir
>>506 open(2): O_EXCL | O_CREAT
fopen(3)は駄目。FILE *にしたければ、open(2)してから、fdopen(3)
>>505 一覧を取得する必要はないんでないかい?
fname = 最初の名前
for (i = 0; stat(fname, ...) == 0; i++) {
fname = 最初の名前に i を混ぜたもの;
}
fp = fopen(fname, ...);
>>506 ,507
506のそれは考えましたが、すでに連番でファイルが多数あると遅くなりそうだったので。
man opendirで出てきたscandirで出来そうです。
返答ありがとう。
511 :
デフォルトの名無しさん :04/11/06 17:52:23
そうして移植性の低いプログラムがまた一つ。
>>508 ,509
お二人もどうもです。
>>512 scandirのこと?
というか調べるにはひとつひとつ照合していかないといけない、
他に方法は無いのは当り前ですね。
そこに気付かなかった、我ながら阿呆でした。
scandirはむしろソートしたりで509のが良さそうなので509のやります。
for (i = 0; stat(fname, ...) == 0; i++) { fname = 最初の名前に i を混ぜたもの; } と fp = fopen(fname, ...); の間でfnameと同じ名前を持つファイルを作られたら・・・ まあまずそんなことは起きないと思うけど。
>>510 それだとレース状態が存在する。O_EXCLが正解。
素直にEXCLを使いたがらない人間がこんなにもいることにおじさんびっくりだよ。
アトミック操作というものですネ!!!
EXCEL使えよ
Windows使えよ
man斜め読みでO_EXCLをファイルが存在しなかったらエラーになる と勘違いしていて508が??でした。 manちゃんと読んで今はきちんと理解できました。 皆さんありがとう。 ところで Advanced Programming in the UNIX(R) Environmentって日本語訳版は無いんですか?
521 :
デフォルトの名無しさん :04/11/06 22:09:07
C言語でunsigned long以上の数字の書かれた文字列を整数に変換して、16進数に変換したいのですが何かいい方法はないでしょうか?
>>522 普通にatoiとsprintfじゃだめなのか?
UNIXにまったく関係ない
Windowsならint64のprintfとかできるよ UNIXではできないんじゃないかなあ
528 :
デフォルトの名無しさん :04/11/07 15:29:39
526
529 :
デフォルトの名無しさん :04/11/07 15:36:11
long long intならsprintfで%llX
530 :
529 :04/11/07 15:38:48
unsigned long long intなら
%llう
atoiなんかつかうやつはぱかです
Cスレでやってたよな。atoiの問題点。ここに書くまでもないけどさ。
つよそうな関数がいろいろ載ってるけど DESCRIPTION The strtoul() function converts the string in nptr to an unsigned long value. The strtoull() function converts the string in nptr to an unsigned long long value. The strtoumax() function converts the string in nptr to an uintmax_t value. The strtouq() function converts the string in nptr to a u_quad_t value. sprintfがありなのだkら、sscanfもありですか?
537 :
デフォルトの名無しさん :04/11/08 17:08:52
_
保守しておこう
>>526 strtoll() は C99 の規格に含まれていて、
現役の UNIX 系 OS になら、たぶんどれにでもある。
表示の方は 529 の言う通り。
>>532 529でなにか問題が?
540 :
デフォルトの名無しさん :04/11/13 14:23:49
ハードウェアを制御する際に、CかC++で迷っているのですが どちらの言語の方が性能、機能的に効率が良いのでしょうか?
>>540 そんなのどっちでもいいよ。
強いて言うなら無駄の少ないC。
>>540 どーせアセンブラみながらデバッグするんだから
544 :
デフォルトの名無しさん :04/11/13 15:20:34
消費メモリに神経質だったり、realloc必須とかならCかな 長期的に保守したり、おおざっぱでいいならC++にしとけ
vinelinux3.0で scanfの%[^A]てするとAに出会うとそこで引数への入力が終ってしまいます。 123A456 だと 123しか入力されません。 123456よなるのが正しい動作ですよね?
いいえ
>>546 scanf()の文字セット指定は、その文字セットが終了した時点で変換を終了します。
したがって、123456よなりません。
%[1-9]
551 :
デフォルトの名無しさん :04/11/14 21:55:21
>>548 何気なく546に合わせているところにワラタ
Cだってマクロ使いまくるならC++と変わらん。
誤爆?
554 :
デフォルトの名無しさん :04/11/14 22:08:22
みなさん、パス名の配列の大きさに_POSIX_PATH_MAXを使ってます?
555 :
デフォルトの名無しさん :04/11/15 01:58:19
dlopen()で得られたハンドルは、プログラム終了時に全てdlclose()する必要がありますか?
8 個の空白でしたが、TAB のつもりですか?).
558 :
デフォルトの名無しさん :04/11/15 17:19:35
unixでグラフィックスを扱うには何を勉強したらいい?
560 :
デフォルトの名無しさん :04/11/15 17:39:47
ふと思ったのですが, 文書ファイルに文字を上書きをする場合は,単にwrite()で書き込みをすればそれで十分と思ったのですが, 文書ファイルに文字を挿入する場合っていったいどういう処理が行われているんでしょうか? そのまんま考えてみると,挿入された文字以降のデータを全て移動させないといけないはずなんで,それってものすごい効率悪い処理だな〜って思い,気になってしまいました.
何か聞こえたような気がする
>>558 グラフィックスを表示する→GTK+
画像処理する→C
GTKなんて軟弱なもの使ってないでXlibの勉強しなさい。
個人的には GTK より Qt の方が分かりやすかった.
>>566 私は画像処理とかが専門ではないのでGUI関連のライブラリとかについてもよく
知らないけれど、簡単に書ければ別になんでも良いと思っているんだ。
そんなことよりも勉強しないといけないことがたくさんある。
はあ、そうですか。がんばってくださいね。
gtkか。 新しいクラスのために延々定型コード書くのがめんどかった記憶があるがアレは改善されたのだろうか。
570 :
デフォルトの名無しさん :04/11/15 22:33:10
>>558 グラフィックスを作りたいのか、解析したいのか
単なるGUIでいいのかで変わるだろ。
画像処理とGUIは近いようで、ぜんぜん遠い。
>>560 70年代ならUNIXのfile systemは特殊だったから、
その質問もこのスレでやる意味があるけど、
今や全てのシステムでfile systemがUNIX流になったから、
その質問は他の板でやった方がいいよ。
効率が悪いのが気になるような場合は、
それなりの構造を持たせるってだけですが。
まさか今時ひとつのファイルで切った貼ったしないしね。
>>560 まさか今時ひとつのファイルで切った貼ったしない。死ね。
ごめん
>>572 > 他の板で
< 他のスレで
の間違い。
UNIX厨はこれだから(ゲラ
579 :
デフォルトの名無しさん :04/11/16 13:37:14
kill PIDで殺される時に、殺される前にログファイルに殺されましたと書き出したいのですが、どうしたら実現できるでしょうか?
SIGKILLをトラップしてログファイルに「殺されました」と書き出す。
>>579 SIGKILL受信時にsyslogに出力するようにkernelをhack
>>580 つーか、SIGKILLトラップできたっけ?
>>579 そのプロセスを監視するプロセスを作るのも一つの手。
SIGKILLトラップできちゃ非常手段としての意味ねーだろ。
>>572 貴重なご意見ありがとうございました.
他のスレで改めて質問してみます.
>>578 いえいえ,ファイルの入出力について勉強をしているところで,ふと湧いて出た
疑問点なだけなんで,まだまだ作るとかそういう意図は特にないです.
>>560 a) 1ファイルで読み書きするよ
1. 挿入ポイントからバッファ1に読み込み
2. 挿入する内容を書き込み
3. 1. で読み込んだ後ろをバッファ2に読み込み
4. バッファ1を 2. の後ろに書き込み
5. 3〜4 繰り返し
b) 2ファイルで安全に読み書きするよ
1. 挿入ポイントまで新しいファイルにコピー
2. 挿入する内容を新しいファイルに追加
3. 挿入ポイント以降を新しいファイルに追加
4. ファイル名変更
c) OSに任せちゃうよ
1. ファイルをメモリにマップ
2. メモリ上で移動
3. クローズ
クラスタ分かれてることを利用して高速化とかできないのかね
ここがLinuxプログラミングスレも含んでいるとして、皆さんはどうやって gdb の使い方をマスターしましたか? 少しずつ使い方を覚えていくものでしょうか?
普通はそうなんじゃないの? 大抵は「バックトレース出せ」と言われて起動の仕方とbtコマンドを 最初に覚えると思うが。
590 :
デフォルトの名無しさん :04/11/16 18:25:08
(-_-)
>>588 GUI版でかつ、CUIでも利用可能なフロントエンドから始めたら?
ddd, insight, xxgdbなど
CUI版なんていらんと思う
593 :
デフォルトの名無しさん :04/11/16 22:56:56
>>588 他の、GUIでとっつきやすいデバッガから練習しとけ。
デバッガとはどんなものかがわかったら、あとはgdbの使い方を学習するだけだ。
594 :
デフォルトの名無しさん :04/11/16 23:46:03
>>592 GUIで全部網羅してたらごちゃごちゃして逆に使いにくいので
GUIはよく使う機能に限定してすっきりさせて、あまり使わない機能をCUIでさくっと指定ってのがいいのでは
と適当なことを言ってみるテスト
CUIの利点は画面のログが簡単に取れることぐらいしかない GUIだとそういう機能を用意しない限りできないからね だからGUI機能が充実していればCUIがいらないと言う意味では同意
あまりツールが使いこなせていない人達のスレですか?
UNIXでデバッグなんて(プ ご苦労さん
>>595 user define command
command BNUM ... end
600 :
デフォルトの名無しさん :04/11/17 02:10:46
親プロセスが子プロセスの終了を検知するために、シグナルハンドラ内部で SIGCHLDを捕捉して、waitpid()を実行するように実装しました。 void signlahandler(int signum) { signal(signum, signlahandler); //☆ if(signum == SIGCHLD) waitpid(0, NULL, WNOHANG); //★ } しかし、☆でシグナルハンドラの再設定すると、その時点でさらにSIGCHLDを 受信してしまい、延々とsignalhandler関数が呼び出されて スタックオーバーフローとなりCoreを吐いてプロセスが異常終了してしまいます。 HPUXとAIXでこの現象が発生し、HPUXのmanのwaitpid()にはこの事が 書かれていました。正常に動作させるためには★の位置でシグナルハンドラの再設定を しなければならないのですが、なぜこのような仕様なのでしょうか? ちなみにAIXでは、waitpid()を実行せずに、★か☆の位置で再設定すると 同様にCoreを吐いて終わります。 説明が下手で意味がわからないかもしれませんが…知っている方がいましたら教えて下さい。
シグナル落とさずに再登録か
共有メモリの使い方について教えてください。 sys/shm.hを使って if((shmid = shmget(key,100, IPC_CREAT | 0666)) < 0) { perror("shmget"); exit(1); } といった事をしたいのですが、引数の100の所を200とか 大きな数字にすると実行時Invalid argumentといったエラーが出ます。 /proc/sys/kernel/shmmaxのファイルには33554432と書かれていたので、 33Mまで共有メモリを使えるということなのかな?と考えているのですが、 なにがまずいのでしょうか。 環境はRedHat Advanced Server Version1.2です。
キーが既にある共有メモリの場合は当然それより大きいサイズはとれない。
605 :
デフォルトの名無しさん :04/11/17 09:56:48
スレが違うかもしれないが質問します。 googleの検索結果って、 PERLで動いているの?JSP?PHP?
Brainfuck
googleの検索結果が返るレスポンスの微妙なディレイに癖があってそれが Delphiの挙動によく似てるんだよな。だからたぶんDelphiに間違いないよ。
googleの検索結果が返るレスポンスの微妙なディレイに癖があってそれが GNU Emacs の挙動によく似てるんだよな。だからたぶん GNU Emacs に間違いないよ。
googleの検索結果が返るレスポンスの微妙なディレイに癖があってそれが 田中の挙動によく似てるんだよな。だからたぶん田中に間違いないよ。
>>605 検索結果は HTML です。間違いない。
UNIXにはDelphiみたいな、C以外の言語でバイナリを吐くコンパイラってないの? どれもCへのトランスレータばっかり。
613 :
デフォルトの名無しさん :04/11/17 15:35:45
奇妙な荒らしでしたね
突然ですがすいません *command line*: 指定されたライブラリlibmath.aがありません。 このようにでるのですが、いろいろ検索してみましたがよくわかりませんでした。 libmath.aがUNIX標準の数学ライブラリ?ということはわかりましたが 結局何をすればよいのでしょうか??
風呂入って寝ろ。
libmath.aを使わない様にプログラムを書き直す とか
-lm
突然ですがすいません *command line*: 指定されたライブラリlibmath.aがありません。 このようにでるのですが、いろいろ検索してみましたがよくわかりませんでした。 libmath.aがUNIX標準の数学ライブラリ?ということはわかりましたが 結局何をすればよいのでしょうか??
619と621は私ではありません。
>>618 すいません、具体的にはどうすればよいのでしょうか
>>620 調べていたらそんな文字列は出てきましたがよくわからないのです・・・・。
*command line*: ←これがムカツク
>>624 そのようなことを言われてもテメェの顔の方がムカつきます。
628 :
デフォルトの名無しさん :04/11/17 16:27:58
libm.aじゃないのか
>>616 >結局何をすればよいのでしょうか??
コンパイラにlibmath.aのありかを教える
>>629 どうやらlibmath.aが無いみたいなのでネットで探してDLしてみます
つーか、根本的な勘違いをしている悪寒。 何をコンパイルしているのか、コマンドラインを晒してみ。
>>631 おいらもそうは思うんだけど
libmath.aってのもぐぐると引っかってくるんだよね
>>631 あの・・荒らしとかでなくて本当に言っている意味がわかりません
>>632 flood > make
f90 -o dmomout main.o aci.o acj.o afi.o afj.o cfp.o nn.o nc.o zz.o -lma
th
ld *command line*: 指定されたライブラリlibmath.aがありません。
f90 fatal : ld command error : 1
*** Error code 1 (bu21)
make: fatal error
これのことですか?
だっふんだ。
>>634 まず、ifconfig っていうコマンドうって、IPアドレス調べて、それを教えてください。
私がtelnetで接続して代わりにやってあげます。
いい加減スルーしようぜ
ただしそれがローカルIPなら無理ですが。 ルータで設定してくれればOKです。
>>638 ほんとこのスレみてるともどかしくてそう思うことはよくある
悪いことしないからさw
なんかあまりにも素人すぎた質問だったみたいですね。 荒らしのつもりではなかったのですが失礼しました。 もっと自分で調べて出直してきます。 お騒がせしました。
>>642 教授にはきけないよな?じゃあ、友達に聞くとか...(プログラム詳しい友達がいれば)
>>634 f90ってフォートランか。which f90して表示されたディレクトリ近傍にあるんじゃない?
ありがとうございました。
>>604 もう一度調べてみます。
この程度の質問にもアタフタするUNIX厨(ハゲ
壮大な釣りだったな
649 :
デフォルトの名無しさん :04/11/18 12:59:44
Unix で指定した2つの日付の間に 日数を取得する方法を教えてちょんまげ
651 :
デフォルトの名無しさん :04/11/18 16:52:04
フォークの仕方を教えてください
652 :
デフォルトの名無しさん :04/11/18 16:54:37
>651 人差指と中指の間に強く挟んで、最後に抜くようにリリースする。
野球は知らんよ
>>651 fork();をコールする
戻り値で親の動作をするか子の動作をするかを決める
それだけ
>>652 手首を動かさないようにするのも重要だぞ
656 :
デフォルトの名無しさん :04/11/18 17:25:49
struct sockaddr はどういうメンバで構成されているんですか? /usr/include をgrepしても見つけられませんでした。 一応↓これみつけたんですけど違うだろうし。 #ifdef __USE_BSD /* This is the 4.3 BSD `struct sockaddr' format, which is used as wire format in the grotty old 4.3 `talk' protocol. */ struct osockaddr { unsigned short int sa_family; unsigned char sa_data[14]; }; #endif
>>656 そういうときは、/usr/include/*をgrepしてみるべし
>>656 マジレスすると sa_family の値によって中身が変わる( sockaddr_in とか )から、
sockaddr そのものの sa_family 以外のメンバにはあまり意味は無い。
単に場所確保してるだけ (placeholder と言ふ)。
>>657 見つかりました。
grep -rw 'struct sockaddr' /usr/include/*
で探してたんですけど見落としてただけでした。
sys/以下もviで開いて検索してたのになんで気付かなかったのか、
これだけに2時間ぐらい掛かってしまった。
2時間の成果↓
struct sockaddr {
sa_family_t sa_family;
char sa_date[14];
}
>>658 ども。
getaddrinfoしてinet_ntopしたかったんですけどAF_INETを指定すると
struct in_addrへのポインタとみなされるって
とりあえずそのままai_addrを引数にしてみたけどやっぱりダメで、
どうすれば良いのか分からなかったのでとりあえずメンバを見てみようと思いました。
getaddrinfoってgethostbynameと違ってWEB上に手取り足取りの情報がまったくないんですね。
探し方が悪いんだろうな
>>647 やっぱり田中さんは四六時中webサーフィンしてるんですか?
>>660 こんな感じじゃないの?
char buf[1024];
struct addrinfo *res = NULL;
if (getaddrinfo("localhost", "ftp", NULL, &res) == 0)
{
while (res)
{
char* p = inet_ntop(res->ai_addr->af_family, res->ai_addr, buf, sizeof(buf));
printf("%s\n", buf);
res = res->ai_next;
}
freeaddrinfo(res);
}
find /usr -type f -name '*.h'|xargs grep 'struct *sockaddr' /dev/null 定型句だからスクリプトを作っておいてもいいね。
おれfind嫌い。
656は色々苦労する時間でもってバイトしてその金で本買う方が トータルの所要時間は短くなるだろうな。
Emacsはgrepやファイン怒の結果を保存しておけるからな。マジお勧め。
Emacsならmoccur使えや
gerpの使い方教えろや ボケ。
no manual entry for gerp
>>663 > res = res->ai_next;
> }
> freeaddrinfo(res);
freeaddrinfo() に渡すのは getaddrinfo() で返されたポインタそのものじゃないとダメよ。
>>660 あえて inet_ntop() を使うんなら、こんな感じかな。
---
if(res->ai_family == AF_INET6){
inet_ntop(AF_INET6,
&(((struct sockaddr_in6 *)res->ai_addr)->sin6_addr),
buf, sizeof(buf));
printf("%s\n", buf);
} else if(res->ai_family == AF_INET){
inet_ntop(AF_INET,
&(((struct sockaddr_in *)res->ai_addr)->sin_addr),
buf, sizeof(buf));
printf("%s\n", buf);
}
---
けど、こういう場合は getnameinfo() を使うのが常套手段。
getnameinfo() を使ったバージョンはこんな感じ。
---
struct addrinfo hints, *res, *res0;
char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
if (getaddrinfo("www.kame.net", "http", &hints, &res0) == 0) {
for (res = res0; res; res = res->ai_next) {
if (getnameinfo(res->ai_addr, res->ai_addrlen,
hbuf, sizeof(hbuf), sbuf, sizeof(sbuf),
NI_NUMERICHOST | NI_NUMERICSERV) == 0) {
printf("host=%s, serv=%s\n", hbuf, sbuf);
}
}
freeaddrinfo(res0);
}
---
マニュアルページを読めばわかるが、getnameinfo() は非常に強力なんで
大抵の場面で使える。
とりあえず、↓これは必携。
http://www.ascii.co.jp/books/detail/4-7561/4-7561-4236-2.html
みんな釣られて探してるし 見つかっても教えないくらいの余裕を持て
678 :
デフォルトの名無しさん :04/11/20 00:22:38
age
679 :
デフォルトの名無しさん :04/11/22 10:37:09
保守
680 :
デフォルトの名無しさん :04/11/23 21:56:54
しゅ
681 :
デフォルトの名無しさん :04/11/27 14:46:37
捕手
grepコマンドのスレッド作ったら?
684 :
デフォルトの名無しさん :04/11/28 13:38:57
fopenでオープンしたファイルをオープンしたままの状態で(fcloseせずに) 中身をゼロバイトにする方法ってあるんでしょうか? やはり、クローズしてからwモードでオープンしないと駄目なんでしょうか? rewindしてから上書きしても前の内容が残っていて不都合がでるんです。 オープン直後にファイルをロックしているので、 クローズせずにオープンしたままの状態でファイルサイズをゼロにしたいのです。 つまりこのようにしたいのです。 log = fopen(LOG,"r+") flock( fileno(log), LOCK_EX ); fgets(buf, MAXLEN, log) //ここでファイル(logの)サイズをゼロにしたい fprintf(log, " // fclose(log); flock( fileno(log), LOCK_UN );
man ftrancate(2)
au, 綴り間違った… ftruncate(2)
freopen(3)
>>687 freopen(3)は、fclose(3)しちゃうので、その時にlockが外れます。
うんこ
690 :
デフォルトの名無しさん :04/11/30 06:44:48
>>685-690 解決しました。どうもありがとうございました。
ftruncateは現在プログラム内でオープンしているファイルに対しての
操作は出来ないのかなと思っていたのでftruncateのことは無視してました(藁
ていうか
>>684 は別スレに書き込んだ質問なのに
勝手にこっちにコピペされてた(藁
692 :
デフォルトの名無しさん :04/11/30 19:51:28
>>691 逆だよ。オープンしていなければ使えないんだよ。
>>691 open→fopenって類推しちゃったのかも知れないけど、
stat→fstatと同じ関係ね。
しかしこれ名前をfdtruccate, fdstatにするべきだったな。
カウンターを作る途中で躓いていただけです。 で、ソースはこうなったので問題は解決です。 fclose(log); if((log = fopen(LOG,"w")) == NULL){ printf("ダメぽ"); return FALSE; } ↓ ftruncate(fileno(log), 0); rewind(log);
695 :
誰か教えてください!2 :04/12/02 12:58:48
ファイルarg-test1 の内容が #!/bin/sh echo $# echo $1 $2 $3 $11 $12 shift 2 echo $1 $2 $3 $11 $12 のとき, ./arg-test1 1 2 3 4 5 6 7 8 9 10 11 12 を実行して,$#, $1 $2 ...,shiftの意味を確認 せよ. (ヒント: script 中の 11, 12 を 21,22 に変更してみ よ.)
696 :
誰か教えてください!2 :04/12/02 13:01:07
1)ファイルarg-test の内容が #!/bin/sh for i do echo $i done echo '$*' for i in $*; do echo $i done echo '"$*"' for i in "$*"; do echo $i done echo '$@' for i in $@; do echo $i done echo '"$@"' for i in "$@"; do echo $i done のとき, ./arg-test abc def "abc def" と入力した結果を参考にし,$@ と $* の差を説明しろ. 2)上記問題で,./arg-testと,./ を指定している理由を考えろ. 695です。すみませんがよろしくお願いします!!!
縦読み?
698 :
誰か教えてください!2 :04/12/02 13:08:40
はい。まじでよろしくおねがいします!! 今日までのレポなんです‥
結果を参考にしと書いてあるのに結果すら出さない、 そんな奴は落第してしまえ。 こんなの通しても世のためにならじ。 考えろって書いてあるのに自分で考える気ゼロじゃねーか。
ネタにマジレスすんな
はい次の方〜。
ここはいつから宿題スレになったんですか?
もうその瞬間は過ぎました。
>>696 ${@+"$@"}がないのは納得がいかねえ。
705 :
デフォルトの名無しさん :04/12/04 19:49:35
dup2(fd, STDIN_FILENO); dup2(fd, STDOUT_FILENO); close(fd); execlp("cat", "cat", NULL); としたのですが、 fdに何か書き込んでも、 fdから何も出てきません。 何がいけないんでしょうか。
何をやっているかの前に、何がやりたいか書け。
>706 すいません。 TCP/IPサーバを作ってみようと思いまして、 それでまず、echoサーバを書いてみようと思ったんです。 将来的な事を考えると、 execで外部のプログラムを呼び出すかたちで、 これを実現したいのですが。 どうでしょうか。
execじゃなくてforkだろ
>708 この動作をするまえにforkしています。 echoするのをcatにやらせたいということです。
>>707 その前のテストプログラムを書いているんだろ?
それはどういうものを意図しているわけ?
>710 すいません。 質問の意図が良く分からないです。 最終的な目的は、netcatみたいなものを 自分で作れないかということです。
fork(2)はしているわけか。 cat(1)でstdinとstdoutが同じなのはまずいよ。
>712 >cat(1)でstdinとstdoutが同じなのはまずいよ。 コマンドラインからもやってみましたけど、 うまくいきませんね。 なぜなんでしょう。
なにをどうしたんだ?
>714 cat <hoge >hoge としたところ。 ファイルhogeの中身が消えてしまいました。
fork(2)した後、 FILE *f = fdopen(fd); while(1) { int ch = fgetc(f); if (ch == EOF) break; fputc(ch, f); } じゃまずいのか?
>716 えと、外のプログラムを呼び出して、 処理するようにしたいので、 中で自分でやってしまうのでは駄目なんです。
718 :
デフォルトの名無しさん :04/12/04 21:18:03
助けるよ
>718 ありがとうございます。
なんだか良く分かりませんが、 今書き直したところ、 >705のやりかたでうまくいきました。 しかし、引数を付けたりするとうまくいかないみたいです。 たとえば、 execlp("cat", "cat", "-s", NULL); などとすると駄目です。 どうしたら良いでしょうか。
>>717 forkしてれば中で自分でやってしまうことにはならないんだが
>721 そう言うことではなくて、 外のプログラムを呼んで、 それに仕事をさせたいということです。
ここいらでテストソースの全貌を晒してみないか?
>>720 入力と出力を別にしろよ。パイプ使ったり。
#include <stdio.h> #include <unistd.h> #include <signal.h> #include <sys/wait.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> enum{ MAX_CLIENT = 3, PORT = 10000, }; unsigned int NUM_C = 0; void sigchld_handler(sig_t sig) { int stat; extern unsigned int NUM_C; signal(SIGCHLD, sigchld_handler); wait(&stat); NUM_C--; printf("SIGCHLD %d\n", stat); }
int main () { int listenfd, connfd, nbytes; char buf[BUFSIZ]; struct sockaddr_in servaddr; extern unsigned int NUM_C; pid_t pid; signal(SIGCHLD, sigchld_handler); if((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){ perror("socket"); exit(1); } bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(PORT); servaddr.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0){ perror("bind"); exit(1); } if(listen(listenfd, 5) < 0){ perror("listen"); exit(1); }
きたきた
while(1){ if((connfd = accept(listenfd, (struct sockaddr*)NULL, NULL)) < 0){ perror("accept"); exit(1); } if(NUM_C++ < MAX_CLIENT){ pid = fork(); if(pid == 0){ /* child */ close(listenfd); dup2(connfd, STDIN_FILENO); dup2(connfd, STDOUT_FILENO); dup2(connfd, STDERR_FILENO); close(connfd); if(execlp("cat", "cat", NULL) < 0){ perror("execl"); exit(1); } exit(0); }else{/* parent */ close(connfd); } }else{ close(connfd); } } return 0; }
こんな感じです。 このプログラムはちゃんと動きます。 その上で、catに引数を渡して動くようにしたいのです。
うp乙
>>724 も書いてるけど
親子の間はpipeでいいんじゃない?
>731 えーと、どういうことでしょうか。 親子間では通信する必要がないように思うんですが。
733 :
実験 :04/12/04 22:15:27
begin-base64 644 hoge.c I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8c2lnbmFs Lmg+DQojaW5jbHVkZSA8c3lzL3dhaXQuaD4NCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiNpbmNs dWRlIDxzeXMvc29ja2V0Lmg+DQojaW5jbHVkZSA8bmV0aW5ldC9pbi5oPg0KDQplbnVtew0KCU1B WF9DTElFTlQgPSAzLA0KCVBPUlQgPSAxMDAwMCwNCn07DQp1bnNpZ25lZCBpbnQgTlVNX0MgPSAw Ow0KDQp2b2lkIHNpZ2NobGRfaGFuZGxlcihzaWdfdCBzaWcpDQp7DQoJaW50IHN0YXQ7DQoJZXh0 ZXJuIHVuc2lnbmVkIGludCBOVU1fQzsNCg0KCXNpZ25hbChTSUdDSExELCBzaWdjaGxkX2hhbmRs ZXIpOw0KCXdhaXQoJnN0YXQpOw0KCU5VTV9DLS07DQoNCglwcmludGYoIlNJR0NITEQgJWRcbiIs IHN0YXQpOw0KfQ0KDQppbnQgbWFpbigpDQp7DQoJaW50IGxpc3RlbmZkLCBjb25uZmQsIG5ieXRl czsNCgljaGFyIGJ1ZltCVUZTSVpdOw0KCXN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2YWRkcjsNCgll eHRlcm4gdW5zaWduZWQgaW50IE5VTV9DOw0KCXBpZF90IHBpZDsNCg0KCXNpZ25hbChTSUdDSExE LCBzaWdjaGxkX2hhbmRsZXIpOw0KDQoJaWYoKGxpc3RlbmZkID0gc29ja2V0KEFGX0lORVQsIFNP Q0tfU1RSRUFNLCAwKSkgPCAwKXsNCgkJcGVycm9yKCJzb2NrZXQiKTsgZXhpdCgxKTsNCgl9DQoJ Ynplcm8oJnNlcnZhZGRyLCBzaXplb2Yoc2VydmFkZHIpKTsNCglzZXJ2YWRkci5zaW5fZmFtaWx5 ID0gQUZfSU5FVDsNCglzZXJ2YWRkci5zaW5fcG9ydCA9IGh0b25zKFBPUlQpOw0KCXNlcnZhZGRy LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpOw0KDQoJaWYoYmluZChsaXN0ZW5m ZCwgKHN0cnVjdCBzb2NrYWRkciopJnNlcnZhZGRyLCBzaXplb2Yoc2VydmFkZHIpKSA8IDApew0K CQlwZXJyb3IoImJpbmQiKTsgZXhpdCgxKTsNCgl9DQoJaWYobGlzdGVuKGxpc3RlbmZkLCA1KSA8 IDApew0KCQlwZXJyb3IoImxpc3RlbiIpOyBleGl0KDEpOw0KCX0NCg0KCXdoaWxlKDEpew0KCQlp ZigoY29ubmZkID0gYWNjZXB0KGxpc3RlbmZkLCAoc3RydWN0IHNvY2thZGRyKilOVUxMLCBOVUxM KSkgPCAwKXsNCgkJCXBlcnJvcigiYWNjZXB0Iik7IGV4aXQoMSk7DQoJCX0NCg0KCQlpZihOVU1f QysrIDwgTUFYX0NMSUVOVCl7DQoJCQlwaWQgPSBmb3JrKCk7DQoJCQlpZihwaWQgPT0gMCl7IC8q IGNoaWxkICovDQoJCQkJY2xvc2UobGlzdGVuZmQpOw0KDQoJCQkJZHVwMihjb25uZmQsIFNURElO X0ZJTEVOTyk7DQoJCQkJZHVwMihjb25uZmQsIFNURE9VVF9GSUxFTk8pOw0KCQkJCWR1cDIoY29u bmZkLCBTVERFUlJfRklMRU5PKTsNCgkJCQljbG9zZShjb25uZmQpOw0KDQoJCQkJLyoNCgkJCQkJ
734 :
実験 :04/12/04 22:16:42
T0sgZXhlY2xwKCJjYXQiLCAiY2F0IiwgTlVMTCkNCgkJCQkJRVJSIGV4ZWNscCgiY2F0IiwgImNh dCIsICItcyIsIE5VTEwpDQoJCQkJKi8NCgkJCQlpZihleGVjbHAoImNhdCIsICJjYXQiLCBOVUxM KSA8IDApew0KCQkJCQlwZXJyb3IoImV4ZWNsIik7IGV4aXQoMSk7DQoJCQkJfQ0KDQoJCQkJZXhp dCgwKTsNCgkJCX1lbHNleyAvKiBwYXJlbnQgKi8NCgkJCQljbG9zZShjb25uZmQpOw0KCQkJfQ0K CQl9ZWxzZXsNCgkJCWNsb3NlKGNvbm5mZCk7DQoJCX0NCgl9DQoNCglyZXR1cm4gMDsNCn0NCg== ====
>733,734 mimeエンコーディングですか? 使ったことないんでデコードの仕方が分からないんですが...
わからない奴には教えないってスタンスなんでしょ、多分。
エンコの前に圧縮しろよ...
begin-base64 644 hoge.c の次の行から734最後の====までをhoge.c.base64として保存 $ base64-decode < hoge.c.base64 > hoge.c base64-decodeは無ければ探せばある
ありがとうございます。 今インストールしています。
一部のuudecodeコマンドも対応してたりするよ
$ perl -MMIME::Base64 -ne 'print encode_base64($_)' < file
$ perl -MMIME::Base64 -ne 'print decode_base64($_)' < file でした…
FreeBSDだと if(execlp("cat", "cat", "-n", "-u", NULL) < 0){ perror("execl"); exit(1); } で動いた。バッファリングとかそのへんですか?
744 :
デフォルトの名無しさん :04/12/06 19:59:30
ほし
745 :
デフォルトの名無しさん :04/12/09 11:35:54
test コマンド([ コマンド)の用法を調べ, test コマンド(組み込み,独立どちらでも構わない) を利用する script の例を作成せよ.
747 :
デフォルトの名無しさん :04/12/09 12:13:47
UNIXといえば、
748 :
デフォルトの名無しさん :04/12/09 12:35:59
test コマンド(組み込み,独立どちらでも構わない) を利用する script の例を作成せよ.
749 :
デフォルトの名無しさん :04/12/09 12:39:53
を利用する script の例を作成せよ.
例: #!/bin/sh /bin/test
wgetスタンバイ中なので、なんか、くれ。 #!/bin/sh set -x LC_ALL=C LANG=C; export LC_ALL LANG script -t -c "traceroute -v -t 16 -m 64 www.funet.fi 2>&1" 2> timingfile for I in 1 2; do sleep 2; clear; scriptreplay timingfile; done if test -e timingfile; then rm -f timingfile; fi if test -e typescript; then rm -f typescript; fi
752 :
デフォルトの名無しさん :04/12/11 00:13:46
ソケット以外で2つのプログラム間で通信を行うにはどんな方法がありますでしょうか。 機能として、1.これからデータを送るということを他方のプログラムに知らせ、 2.そしてデータを送信するという2つの処理が必要です。 signalとshmで実現しようかと思っているのですが、もっとスマートな方法はないでしょうか。 たとえばWindowsのWM_COPYDATAのように、この2つの処理を同時に行えるような機能はないでしょうか。
>>752 ipc使うならshmじゃなくてmsgとか。
754 :
752 :04/12/11 02:11:23
ありがとうございます。msgについて調べてみます。 もう一つ質問なんですが、あるプログラムから外部のプログラムを実行するとき、 終了を待たずに実行してすぐ返ってくるには、 execかsystemでコマンドラインに&をつければよいのでしょうか。
お手軽なのはsystemで&つける。 細かく制御したいならforkしてexecする。
>>754 fork&execでは、自分のプロセスでfork()して起動した側は即復帰、起動された側はexec()で別プログラムに制御が移る。
だから終了も待たないしプロセスIDを得られる。
systemでは、自分のプロセスからシェルを経由して別プログラムを起動するからシェル次第。
systemで&をつければバックグランドで起動してシェルから復帰してくるからお手軽だが、
別プログラムのプロセスIDを必要とするならpopen()を使ってシェルからプロセスIDを通知してもらうとか。
まぁ、そこまでするなら>755。
#なんか、話の流れからするとpopen()でことが足りてしまうような気がするんだがw
そこは「w」ってつけるとこじゃねー!
>>752 ソケット以外でって話だけど、PF_LOCAL(PF_UNIX)は調査済み?
他にもFIFOファイルってのもあるよ。
759 :
デフォルトの名無しさん :04/12/11 18:27:46
>>758 > PF_LOCAL(PF_UNIX)は調査済み?
それってソケットじゃないの?
>>759 そうだよ。だから「ソケット以外でって話だけど」って書いてるじゃん。
単にTCP/IP以外のプロセス間通信の方法かなって思ったんで。
共有メモリをフルスピードでポーリング。これ最強。
named pipe はどう?
763 :
デフォルトの名無しさん :04/12/12 00:28:06
UNIXネットワークプログラミング 新版の翻訳はいつ頃でるのでしょう? 英語版は買ったのですが、日本語訳がでたらそれも買いたいので...
IPv6とPthread以外で何が違うの?
第4部がばっさり切られた。
766 :
デフォルトの名無しさん :04/12/14 04:06:11
システムの時刻をC言語から設定する方法を教えてください。
どうもありがとう。まさかこんな深夜にこんな早くレスがつくとは思わなかったよ。
769 :
デフォルトの名無しさん :04/12/14 09:39:36
UN板で聞いてもすぐ返事がもらえなかったので再度質問します。スマソ。 PATHの記述というか解釈方法について、BNF記法のように定義された POSIXの規格はありますか? 目的はバギーなrealpath()の代替関数を書きたいのです。
771 :
デフォルトの名無しさん :04/12/18 00:53:37
age
realpathにbugって何? (あんな簡単な関数のどこに…)
簡単なシェルを作りたいと思い、コマンドラインを execv に渡せる形にするために以下のようにしました これで良いのか、他にもっと良い方法があるのか教えてください. #define MAX_CMDARGC 10 char *ptr, *cmdargv[MAX_CMDARGC + 1], cmdline[] = "emacs -q --load hoge.el test.txt"; int i = 0; for (ptr = strtok(cmdline, " "); i < MAX_CMDARGC && ptr != NULL; ptr = strtok(NULL, " ")) { cmdargv[i++] = ptr; } cmdargv[i] = NULL;
parserはlex&yaccで書くのが一般的。
BNF
777 :
デフォルトの名無しさん :04/12/18 21:09:01
777get
778 :
デフォルトの名無しさん :04/12/19 00:40:43
「詳解UNIXプログラミング」という本の訳は酷すぎると 思わない? 多分そんなに難しいことじゃないんだろうなぁということが 論理の破綻した説明に載せられるとわけがわからん WEBで調べたら一発だったよ くそ高い本買うんじゃなかった
>>778 論理の破綻した説明がどこかを言ってくれるとすごくありがたい.
780 :
デフォルトの名無しさん :04/12/19 01:14:54
例えば以下の日本語、意味わかります?たった一文字 変えたら意味が通るんだけどね 「標準入力、標準出力、標準エラー出力を、端末装置あるいは擬似 端末装置のどちらかに結びついたログインシェルを使っているので ある」 日本語にしてみてみて読み返した時に あれ何か変だなって気が付くだろ 普通に日本語が読み書きできる人だったらさ こんなことの連続で日本語を日本語に訳す作業に疲れてしまって とてもじゃないけど安心して読めない
781 :
デフォルトの名無しさん :04/12/19 01:19:51
訳者がDQNだからしかたない
訳者のドキュメンテーション能力がStevensに比べて著しく低いので、 原書買った方が得な本のうちの一つだな、APUEは。
>>780 俺は一読しただけでは違和感がなかった…
たぶん知識の方で勝手に脳内修正してしまったのだろう。
「〜が、〜に結びついた〜」「〜を、〜に結びつけた〜」でしょうね。
私見なのだが、オライリーもピアソンエデュケーションも いわゆる名著や信頼性のある情報を扱う出版社という イメージがある だがピアソンの日本語訳は一般的に酷いものが多いな
ランボーは小林秀雄の訳でないとだめでs
>>782 APUE は図が良いよな
日本語版も図だけはStevensの能力を受け継いでいる
じゃあ次は俺が翻訳引き受けて、図も書き直すことにするか。
792 :
デフォルトの名無しさん :04/12/19 07:59:15
あぷえ
793 :
デフォルトの名無しさん :04/12/19 16:13:11
ところで、シグナルを送る関数の名前が kill なのはどういう経緯なんですかね
昔はSIGINTのみ。(INT=interrupt)
795 :
デフォルトの名無しさん :04/12/19 17:12:25
ところで、
はい
797 :
770 :04/12/19 20:13:38
>>772-773 貴様ら死んでいいよ。無能なのはよくわかった。
セキュリティホール量産してろ。
ところで誰もpathの規格を知りませんか…。
WindowsだとDDKの資料読めば仕様が書いてあるけど UNIXは適当なのかもね
・各ノードは「/」で区切る ・「/」で始まるのは絶対パス ・それ以外はカレントディレクトリからの相対パス ・「.」は自分自身 ・「..」 は親ディレクトリ ・ルートの親はルート自身 realpath() がどうバギーなのか教えて。
sprintf() は危ないかもしれないが、バギーとは言わんだろ。
801 sprintfは長さが予測可能な場合が多いからこれとは事情が違う
たとえるならgetsと同じことかな
804 :
デフォルトの名無しさん :04/12/19 21:29:21
797は偽者
805 :
770 :04/12/19 21:32:28
realpath()はstrcpy()を使ってるんじゃないかという話もちらほらと ありますが…。それはともかく、 ~/は展開すべきか、エラーとすべきか ~hoge/は/home/hogeなどと展開すべきか、エラーとすべきか //は/と同等と解釈すべきか、エラーとすべきか .../は../と同じか、エラーとすべきか etc... これらにはOS依存とかシェルが介在しているための問題もあるかと 思われますが、BNFなどによる明確な定義があれば知りたいのです。
はい、偽者かどうかはともかく、 この様にUNIXはいたるところバグだらけでとても使い物にはならない また、もし使っているところがあればそのシステムも同様に信用ならない けして業務で使ってはいけないOS ということが良くわかりましたね >UNIXは決して使わないこと。設計段階から問題がある。
ま、そのうち鯖用途でもUNIXなんて危なくて使わない時代がくるだろうね
805=806 ネタで言っているとしか思えない
Plan9だな
ある事例ではモデルチェンジで新システムに変わるからという理由で それまでの旧システムのサポートを打ち切る暴挙を起こしたUNIX系の会社があったな UNIX扱うとこがこんなこと言ってるようじゃこのUNIX界もおわりだなと思った。
それってEm○
812 :
デフォルトの名無しさん :04/12/19 21:43:12
Windowsはサポート腐っててもグルがその辺に沢山いるからな UNIXだとサポートがまず役に立たないとあかんしね・・・
このrealpathの質問にしてもくだらない煽り合いになっただけだしなw
まさに無能の集団だな
>>812 UNIX板で聞けば?
・「~」を展開するのはシェルの機能。 ・「.」とか「..」はファイル名であって、特別なキーワードではない。 ・なので「...」は、そういうファイルがなければエラーになる。 ・「//」はリモートにアクセスする手段だから「/」と同じはちょっとアレ。
おまえらの嫌いなWindozerから見れば
>>770 が可哀相だよ。
この程度の質問で言い方が悪いとかでいちいち目くじら立てる
仕切り厨が沸いて出てくる始末だしな。
realpathはUNIX使いの頭がバギーだから問題ない
818 :
デフォルトの名無しさん :04/12/19 21:52:30
>>814 いや、799が答えているのに805はすっかり無視していると。
>>800 つーかrealpath使うなとか書いておいて、代わりを用意しないのな。
それがUNIX文化ってやつ?
「//」はリモートにアクセスする手段ってほんとか?
何使ってるとそうできるのか良く知らないけど、 "//ホスト名/あっちのパス"って指定できる環境もあるよ。 Windowsでもそれのマネで"\\hoge\abc" とか書くよね。
だったら具体的にその環境を書けよ URIのプロトコル://〜と勘違いしてるんじゃないの?
>>770 どうやらシェルでcd path; pwd打ったほうが早そうだぞ
申し訳ありませんでした。 全部ウソです。
いつものPOSIXにやけに詳しい人が来れば解決すんだろ。 俺はPOSIX軽視だからシラネ
違うだろ。UNIX的には本来、/はいくつ重なっても/一つと同じ。 > "//ホスト名/あっちのパス"って指定できる環境もあるよ。 こっちがWindowsのマネ。やるとしたらOSじゃなくてアプリレベルの対処。 realpath(3)についていえばresolve_pathが指すバッファはサイズPATH_MAXであること というのもインタフェースの一部(単にC言語の都合上強制できないだけ)だから、 PATH_MAXが定数で定義されているシステム(出所の直系である*BSDとか)では問題ない。 Linuxのmanはパラノイアックというか、OSとの整合性をとって記述しろと思うのだが。 POSIXでもこの点に関して「将来resolve_pathにNULLを渡したら自前でバッファ をアロケートするようになるかも」と書いてあり、あんなつまらんmanを書くくらいなら 代替関数を用意してSEE ALSOに書け、と思ってしまう。
そうだねえ もしrealpathがWindowsのAPIだったら〜Exとかいう妙な改版がされてたとこだな
この様にUNIXだとソース嫁が文化かもしれないが、商用だとそうもいかない。
それに仕事ならソースがあったとしてもわざわざ読んでいる時間も惜しい。
Linuxの様に全てソースありに挿げ替えられたならともかく
特定環境のrealpathの代替なんていったいどう実装すりゃいいのやら、だな。
頼みのドキュメントも
>>800 の様なクソmanでは使い物にならない。
それもこれも全てGNUが悪いRMSが悪いオープンソースが悪い。
RMSにはUNIXが死滅する前にさっさと死んで欲しい。
おれもRMSの思想にはついていけない。 プログラマを奴隷か何かだと思い込んでるとしか思えないよな。 よっぽど金の絡む仕事で嫌な事があったのかね。 あれのせいでソフトウェア=無料と世間に思わせてしまった罪は重いと思う。 スレ違いっぽいが。
おれもUNIXのソース読め文化はヤバイとおもふ・・・ 年取るといいかげん疲れるぜ
832 :
770 :04/12/19 22:46:11
>>826 サンクス。
まぁ、OS上とかHDD上のレベルに適用されるPATH解釈というのは勿論必要
なのですが、URIでは最大長は定義されていないので、こういうのも処理
したいわけです。(
http://とかいうスキームの部分は不要つうかHTTPの リクエストでは/以降しか遣さないので)
それにlinuxにおいてはPATH_MAXとかNAME_MAXはlimits.hのヘッダ次第で
どうとでも変わりますね。(ほかのOSは知らない)
POSIXにおけるPATH長の制限とかが定義されていたと仮定して、それが
OSのlimit.hで定義されている長さ以上はすべてエラーと看做してよいとか、
解析の結果PATH_MAX以下ならOKとか定義されていれば話は簡単なんですけど。
低質な釣りか? ソース嫁てな話はしばらく出てきてないと思うが。 realpathの代替だって*BSDからパクってきて、なんならバッファをmalloc/realloc させるようにちょっと弄るくらいで簡単だろ。 別にSYSVとBSDでパスの形式が違うわけでなし。
簡単なら書けよw
>*BSDからパクってきて これ、BSDのソース読めってことだろ? そういうのがいかんという話ではないのか?
>>832 > それにlinuxにおいてはPATH_MAXとかNAME_MAXはlimits.hのヘッダ次第で
> どうとでも変わりますね。(ほかのOSは知らない)
んな無茶な。"次第"って変らんよ。ツーか勝手に変えちゃ駄目。
> POSIXにおけるPATH長の制限とかが定義されていたと仮定して、それが
> OSのlimit.hで定義されている長さ以上はすべてエラーと看做してよいとか、
> 解析の結果PATH_MAX以下ならOKとか定義されていれば話は簡単なんですけど。
見做すというかマニュアル読めよ。
http://www.opengroup.org/onlinepubs/009695399/functions/realpath.html [ENAMETOOLONG]
The length of the file_name argument exceeds {PATH_MAX} or a pathname
component is longer than {NAME_MAX}.
>>832 URIのpath部だけ対象にするならUNIXのパスなぞ関係ない。
URIの規定に従って文字列処理をする。
実際のOS上での場所が問題になるならディレクトリを辿っていく。
ごっちゃにして同じもので済まそうとする時点で間違い。
> それにlinuxにおいてはPATH_MAXとかNAME_MAXはlimits.hのヘッダ次第で
> どうとでも変わりますね。(ほかのOSは知らない)
おまいアホだろ。
その値でもってOSのカーネルとユーザランドがビルドされたという情報なんだから。
変えたいのなら、好きな定義をしたソースツリー上でカーネルもユーザランドも
全てビルドしてインストールすれ。他人のLinuxとは互換じゃなくなるけど。
> >*BSDからパクってきて > これ、BSDのソース読めってことだろ? > そういうのがいかんという話ではないのか? 代替関数を実装するのにソースなしの方がいいのか? この部分はソース嫁とは関係ない話だと思うんだが。 つーかぶっちゃけ828はろくに考えて書いてるようには見えん。
UNIXヤバイ
まあついてこれないオヤジどもがどんどん脱落していく素晴らしい文化ってことだ
>>828 はどうかと思うが、
ソース読めってのもどうかと思う。
仕様に合っているかどうかわからんからね。
POSIXやX/OpenやOpenGroupの仕様は、
たくさんの頭で考えたものだからソースよりずっと信頼できる。
Microsoft Windowsなら、実装→仕様って事が多いけども。
842 :
770 :04/12/19 23:13:44
HTTPとPOSIXの定義に差があると困るから、POSIXにおけるpath解釈の定義は どうなってるのかと問うてるのよ。ごっちゃにするかしないか云々など興味 ないな。 >その値でもってOSのカーネルとユーザランドがビルドされたという情報なんだから。 その意味だけど何? カーネル等の再構築で手を入れられて動作が変わるようでは困るけど何? 折角いいことを言ったと思ったのに、とたんにレベルが落ちたからがっかり だな…。
843 :
デフォルトの名無しさん :04/12/19 23:16:11
本物の770まだー? といってももう見ていないだろうけど。
>>842 > HTTPとPOSIXの定義に差があると困るから、
それを言うならHTTPじゃなくてURIじゃないの?
まあURIとPATH_MAX/NAME_MAXは関係もないけど。
この際本物か偽者かなんてどうでもいいことだと思うが これがUNIX文化ってやつ?
846 :
デフォルトの名無しさん :04/12/19 23:19:06
騙りは2chの文化
UNIXヤバイ
煽り騙りは2chの華
POSIXというからにはその規格書を読めばいいんじゃないかね
850 :
デフォルトの名無しさん :04/12/19 23:32:00
それ言ったら終わりだろ。
釣りにしても低質すぎるもんなあ。 Linuxだけで育つと知識も性根もひねくれてしまうんかね。
852 :
770 :04/12/19 23:35:32
IEEEのPOSIXのサイトは探したけどねぇ。検索では引っかからなかったな。
まだやるつもりか。
UNIXで育つと要求定義もなしにコーディングしますか?
あ、本物のバカ決定。 この件はこれまでだな。
Ruby最強!
>>826 //ホスト名 はApollo Domainでも使えた。
だからMS-Windowsの真似とは限らない。
SVR4以前のSystem VのRFS(Remote File System)では、 /../ファイル名/usr/rms/.emacsだった。
859 :
デフォルトの名無しさん :04/12/20 02:08:29
俺は、BASICで育ったせいで、オブジェクト指向だの構造化プログラミングが未だに苦手だ。
なんにしてもアプリレベルで処理することだと思うけど、 最近の"host:/abc/def" みたいな書き方のかわりに 昔は"//host/abc/def" みたいに書かれることが多かった。 Windowsの書き方もURIの"//host"もそれからの影響なんじゃないかな? 想像だけどね。
ライオン本で勉強したんだよぅ。
>>861 のいう最近ってどれくらいのスパンを指していってる?
10年(w
>>858 RFS のアクセス方法について詳しく知りたいんだけど、どこかに
資料ない?
> /../ファイル名/usr/rms/.emacs
ファイル名ってのがよくわかんない。
/../ホスト名 のマチガイじゃ? ルートの1個上には、各ホストのルートにリンクされたファイルが ずらずら並んでいるという仮想的な場所があるというイメージ。
>>859 BASIC の所為にした方が都合がいいですか?
UNIXってなんであんなに汚いんですか?
きれいなジャイアンよりマシです
>>866 > /../ホスト名 のマチガイじゃ?
そうです(w
なるほど、ありがとう。しかし今考えるとひどい実装だね</../
872 :
デフォルトの名無しさん :04/12/21 01:01:55
>>871 実装と言うか仕様なんですが、
rootのparentはrootだってsmalltalkの頃から決まっているはずですが、
System VのRFSでは、/の..はsuper rootって/とは別なんです。
僕も実装はさわったことないんですが、Bach本で読みました。
874 :
デフォルトの名無しさん :04/12/24 12:26:16
めりーくりすます
ぬるーぽがっします
(;¬_¬)ヤルナ…
へたれですみませんが 標準入力と標準出力のファイル番号は どうやって調べたらよかとですか?
879 :
878 :04/12/26 00:28:14
dup2(fd[0],0) dup2(fd[1],1) とかやっても標準入力は複製できても 標準出力が複製に失敗するとです・・・
>>878 常に0(stdin)と1(stdout)と2(stderr)です。
882 :
デフォルトの名無しさん :04/12/26 01:27:35
ヒロシです・・ 子プロセスが dup2(fd[1],1) とかしたら そこで止まってしまうとです 親からそのパイプに書き込むとSIG_PIPEを つかんでアボートするとです
パイプが親→子の流れなら、 親: 1, 子: 0だろ。 親1(stdout)→0(stdin)子だから。 > 親からそのパイプに書き込むとSIG_PIPEをつかんでアボートするとです それはfd[0]をopenしたままのprocessがいないんだね。
884 :
デフォルトの名無しさん :04/12/26 02:12:03
ヒロシです・・・説明が不十分だったとです パイプを2つ作って以下の通信をするのですが、 親: fd1[1] → 子: fd1[0] 親: fd2[0] ← 子: fd2[1] ここで、子の入出力を標準入出力に複製したいとです 親: fd1[1] → 子: 0( stdin ) 親: fd2[0] ← 子: 1( stdout ) つまり、子プロセスの側で dup2( fd1[0], 0 ) dup2( fd2[1], 1 ) とすれば良いと思ったのですが、 dup2( fd2[1], 1 ) で子プロセスの処理が 止まってしまうんです・・・ そこで、親がパイプを書くとやっぱりSIG_PIPEっす パイプの複製で止まってるから駄目なんでしょうかね
dup2でブロックなんかしたっけ?
エラーならそういう出力を出すようにしてるんですけど・・・ ログ出力ではdup2 を呼んでそこで子プロセスが止まっているみたいです
みたいって… gdb, strace, ltraceを使え。 既に動いても、PID指定でattach出来る。
888 :
デフォルトの名無しさん :04/12/26 04:27:16
inetd のソースみれ
889 :
デフォルトの名無しさん :04/12/26 18:03:15
東京の人はすごか技を知ってるとですね でも、dup2( fd2[1], 1 ) を呼んだところで子がSIG_CHILD おこして終わってるみたいですよ ltrace,strace どちらも --- SIGCHLD (Child exited) --- と出てます 子が終わってるので、パイプに書こうとすると SIG_PIPE を 起こすみたいですね
890 :
デフォルトの名無しさん :04/12/26 18:10:25
UNIXってなんですか? WinのようなOSですか?
892 :
デフォルトの名無しさん :04/12/26 18:15:35
893 :
デフォルトの名無しさん :04/12/26 18:21:26
ってなんですか?
getpid最高!! getpid最高!! getpid最高!! getpid最高!! もう手放せない。朝も昼も getpid最高!! getpid最高!! getpid最高!!
>>889 SIGCHLDは子プロセスが終了した時に、
親プロセスに飛んでくるsignal。
君の知りたいのは子供が終了する原因だろ。
strace, ltraceで-fしろよ。
896 :
デフォルトの名無しさん :04/12/26 23:38:47
>>896 UNIXゆーざの皆さんって実はオシャレだったのか・・・俺勘違いしてたよ。
900 :
デフォルトの名無しさん :04/12/30 22:17:03
900get
901 :
!omikuji!dama :05/01/03 05:10:49
保守
>>896 よくみるとモデルがブサイコな件について
903 :
デフォルトの名無しさん :05/01/03 05:31:26
真面目な質問ですが、誰か教えてください。 /etc/*.conf のフォーマットって統一されていませんよね? 例えば、 aaaa=yes bbbbb = no というような文字列解析のC言語ライブラリとか あるといいのですが、どなたか知りませんか?
そんな簡単なの質問してる間に書けると思うんだけど……。
>>903 >あるといいのですが、どなたか知りませんか?
そんなものはない。
どうやら君も、UNIXの暗黒面に片足突っ込んだようだね。
UNIXは死滅するまでずっとこのままだ。
残念だったな。
嫌なら君も、そんなUNIXの退廃的嗜好を打ち崩すべく努力したまえ。
目指せsendmail.cf
perl でも tcl でも、好きなのリンクすればいーんでない?
perlもリンクできるのか。知らんかった。 tclは使っているのを見ないけど、なんでかねえ。 (売り物のCADソフトでは使ってるけど)
909 :
デフォルトの名無しさん :05/01/03 13:59:17
>>909 使うときに調べるからリンクはしなくて良かったのに。
でも、googleへのリンクの方が助かったな。
UNIXなら標準で正規表現のライブラリが載ってるからそれ使えばいいじゃん。
あんま調子にのんなよ
'x = y' =~ /\s*(\w)+\s*=+\s*(\w)+\s*/; で $1に'x' $2に'y' が入る
914 :
デフォルトの名無しさん :05/01/04 11:44:01
=+ って何?
古代 C 言語における += のこと。
あるいはエンタープライズ号
signalハンドラーってどうやってハンドリングしてます? ハンドラ内では呼び出し可能なAPI/SYSCALLに制限があるので コンテキストをハンドラ外に移動させてから やりたいことをやるようにした方がいいと考えています。 とはいえ、どうやって移動させるのがいいんでしょうね。
>>917 マルチスレッド + sigwait()
質問したい事があります。 現在、LINUX、C言語でプログラムを書いてます。 その中で、fork()した複数のプロセスが共有メモリにアクセスします。 そこでファイルを用いた排他制御を行いました。 プロセスIDは異なるのですが、プロセスの名前が 同じなのでファイルで排他制御ができているのか気になるのですが 教えてください。
920 :
デフォルトの名無しさん :05/01/07 10:40:57
age
>>919 > 教えてください。
何を教えて欲しいんだ?
排他制御のやり方か?
排他制御ができているかの確認方法か?
そもそも、
> その中で、fork()した複数のプロセスが共有メモリにアクセスします。
> そこでファイルを用いた排他制御を行いました。
共有メモリを使っているのに、なぜ System V IPC や POSIX IPC のセマフォを使わん。
例によって例のごとく、APUE読め、って奴だなあ。
>>917 sigsetjmp+siglongjmp
>>919 鈴木太郎さんと田中太郎さんが、男子便所にうんこしに行きました。
両方、太郎さんなので、同じ便座に座ってないか心配なのですが
教えてください。
AF_LOCALでソケット使いたいのですが, sockaddr構造体が通常よく見るものと違って,↓で記述されてました <sys/un.h>の一部 /* Structure describing the address of an AF_LOCAL (aka AF_UNIX) socket. */ struct sockaddr_un { __SOCKADDR_COMMON (sun_); char sun_path[108];/* Path name. */ }; したがって,通常のようにsun_familyにAF_LOCALを指定できません. どうすればよいのでしょうか?
>>926 > したがって,通常のようにsun_familyにAF_LOCALを指定できません.
ってどういう意味だよ。この呆けが。
man 7 unix読めよ、このタコ。
__SOCKADDR_COMMON()の定義くらい調べろ、この猿。
>>926 アホとしか言いようがないが、とりあえずC言語の勉強でも
もう一度してみたらどうか。
> 1. longjmp( )は、シグナルハンドラからの使用を考慮されている、
> あるいは使用例としてよく出てくるんですが
> 実際、シグナルハンドラからのlongjmp( )は安全ですか?
ttp://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html より引用。
> In the presence of signals, all functions defined by this volume of
> IEEE Std 1003.1-2001 shall behave as defined when called from or
> interrupted by a signal-catching function, with a single exception:
> when a signal interrupts an unsafe function and the signal-catching
> function calls an unsafe function, the behavior is undefined.
で、malloc()もlongjmp()もsiglongjmp()もsignal unsafe。
よって、「malloc()中にシグナル発生 → シグナルハンドラ内でlongjmp()
(またはsiglongjmp())呼び出し」となった場合の動作は「undefined」。
実際にglibcのソースを眺めてみたが、シグナルに対して特別なことをやっては
いないみたいだから、メモリリークやデッドロックが発生する可能性があるな。
> 2. シグナルハンドラとそうでない部分との排他制御は
> そうでない部分で、シグナルをマスクするだけで十分ですか?
OK.
> 3. シグナルハンドラが実行されているさいちゅうに
> 多重に呼び出されることはありますか?
ここらへんについては、BSD由来のsignal()とSysV由来のsignal()とで
挙動が大きく違っていたが、新しいシグナル操作関数であるsigaction()では
そこら辺の混乱が解消されている。
ttp://www.opengroup.org/onlinepubs/009695399/functions/sigaction.html SA_NODEFERの項を見よ。
ファイル入出力まわりに関して質問させてください。 ファイル終端(EOF)を切り詰めたいのですが、 自由にEOFの位置を設定できるシステムコールが何なのか分かりません。 WindowsAPIで言うところのSetEndOfFileみたいなのです。 もしそういうシステムコールがない場合は、エミュレートする何か別の方法とかあれば教えてください。 よろしくお願いします。
1. stat(2)でファイルサイズ調べて-1へ絶対位置seek。 2. EOFまで読んでから、-1相対位置seek。 1推奨。(ファイルの長さに左右されない) seekは、lseek(2) or fseek(3)で。
>>930 ファイルサイズを指定長に設定するという
truncateというのがあるけど、意図と一致するか不明。
引数がパス名みたいだけど。
#include <sys/types.h>
int truncate(const char *path, off_t length)
あー、ファイルディスクリプタのもあるや。 int ftruncate(int fd, off_t length)
931さん932さん、即レスありがとうございます。 どうやらftruncateでいけそうです。 どうもありがとうございました。
935 :
デフォルトの名無しさん :
05/01/11 00:13:36 age