トップページ⇒tech
1001コメント317KB

UNIXプログラミング質問すれ

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
p
0002デフォルトの名無しさんNGNG
readlineについて教えてください。>1
0003名無しさんNGNG
>>2
GNU libreadlineはLGPLじゃなくてGPLなんで注意してね
0004デフォルトの名無しさんNGNG
がーん。
0005デフォルトの名無しさんNGNG
UNIX板があるけどいいよね?
0006デフォルトの名無しさんNGNG
あっちは最近荒れてきてるんでOKだと思いますけど・・・
0007デフォルトの名無しさんNGNG
プロセス間でデータ(数Kbyte)を共有するのに、
mmap()使うのと共有メモリ使うのと、どちらが
オーバーヘッドが少ないでしょうか?
ちなみに、アクション系のゲームに使おうと
してます。
0008ウニしろうとNGNG
おいらも知りたい〜。

sync()しなけりゃ変わんないんじゃないの?
更新作業の排他制御はどっちが面倒くさいんでしょうか?

>>7
ゲームって知らんのだけど、UNIXでアクションゲームで、
しかもマルチプロセスなの?
0009デフォルトの名無しさんNGNG
test
0010デフォルトの名無しさんNGNG
>>7
アクションゲームにそんなもの使わない
0011デフォルトの名無しさんNGNG
>>10
SDLはマルチスレッドだね。
マルチスレッドはよくてマルチプロセスはいけないの?
おせーて。
0012デフォルトの名無しさんNGNG
>>11
いけないことはない。好きなようにやればいい。
ただスレッドよりプロセスのほうが生成に時間がかかるからってだけの話だろ。
0013デフォルトの名無しさんNGNG
>>12
なるほど。でも生成だけなら最初だけだよね。
教えてくれてありがとーー
0014デフォルトの名無しさんNGNG
オペレーティングシステムスレッドってなんですか?
0015デフォルトの名無しさんNGNG
>>7
オーバーヘッドという意味じゃ最速はやっぱり共有メモリじゃなくて?
そうでなきゃあんな面倒なもの存在価値ない。

CGIの問題じゃないが古典unix的マルチプロセス連携技術は
古臭い技術だと思う。たいして楽でもないくせに融通もきかんから。
処理でいえばマルチスレッド、データ(Object)でいえばKParts(笑)やGNOME、
って感じか?これからは。

>>13
>最初だけ
でもお喋りするのにも手間またはオーバーヘッドがかかるぞ?
マルチスレッドに比べて嬉しくない事柄は多いと思われ。
マルチプロセスのメリットはOS提供のメモリ保護機能を直接
使えることであって、逆にいえばそれ以外なんか旨味あるか?って感じ。

悪意ある使われカタ(ネット関係のバッファオーバーランとか)の問題を除けば
Cみてーな糞言語を使う比率とマルチプロセス必要率とは比例すると思う。
今時の良い言語ならメモリの誤った使い方を回避しやすいからな。

>>14
スレッド…プログラマ(プログラミング言語)から見てスレッドだと思えるもの…を
実現する手段には、色々あろう。
rubyみたいにインタプリタの中に持つ奴も「スレッド」であるには違いない。
それらの手段のうち、OSが直接APIとして提供するのが、きみの言うソレだ。
0016名無し関数のλさんNGNG
>>15
微妙に嘘が混じってるな……。

System V IPC の共有メモリの扱いが面倒で mmap() が簡単なのは、
mmap() は仮想記憶システムと密接に連携してるから。性能に関しては
mmap() の方が良い。移植性が重要な場合を除けば、今なら共有メモリ
は過去の遺物と捨てて構わないと思う。

プロセス分割のメリットは少なくとももう一つ、ユーザ権限の分割という
のがある。UNIX ではユーザを証明する credential (BSD 系だと ucred,
SVR4 だと cred 構造体) は、あくまでプロセス単位で割り当てるので、
スレッドだと OS の提供するセキュリティ保護システムが使えない。

とはいえ、ゲーム程度ならメイン部分はいわゆる擬似タスク、非同期に
実行させたい部分だけスレッドで十分でしょ。

mmap() でデータを共有すると、プロセス間での排他制御とか(これは
スレッド間の同期に比べるとコスト高い)、プロセス切り替えとか(これも
かなりコストが高い、特に x86 系の CPU だと TLB をフラッシュするし)、
デバッグが難しくなるとか、プロセスを分けるデメリットの方が大きい。

>>14
カーネルスレッドのことかな? それだとカーネル内部での実行の単位、
言い換えるとカーネルが実行をスケジューリングする entity。

UNIX では全てのユーザプロセスは、ユーザモードとカーネルモードとい
う二つの顔を持っている。カーネルモードで実行されるとき(システムコー
ル実行中とか)には、ユーザモードとは異なるコンテクストを持つのだけ
ど、この実行単位をカーネルスレッドと呼称する。

ユーザプロセスとカーネルスレッドの関係は、古典的には

 ユーザプロセス1に対し、カーネルスレッド1

最近のマルチスレッドプログラミング環境だと話が違ってくるが、その
あたりは話が長くなるから自分で調べてくれ。

ちなみに、カーネルモードでしか実行されないプロセス(システムプロ
セス)もあるから

 カーネルスレッド1に対し、ユーザプロセス1

ではないので注意な。代表的なところだとスケジューラ (sched) がシス
テムプロセス。最近だと、割り込み処理も、スレッドで処理するシステム
も増えてるね。
0017デフォルトの名無しさんNGNG
無駄なプロセスの生成というと、
http://www.bio100.co.jp/cgi-bin2/net/flashviw.cgi?mode=set&no=643
こんな奴もいる。
00187NGNG
>>15-16
勉強になるです。
マルチスレッドの方がスマートなのは判ってるんですが、
手もとにてきとーなサンプルと参考書がないんで...
ちょっと本気で勉強することを考えます。

あと、Linuxで実装するんで、それほどスレッド/プロセスの
コストの差はないのかな、と。

いまのところ、コントロール部、描画部(入力も?)、サウンド部に
わけよーかと思ってます。

で、
> デバッグが難しくなるとか、
そーゆーものですか?プロセスを分けた方が、単体でデバッグ
できて楽そーだなーというのが目的の一つなんですが...

>>17
うーん、なにを言わんとしてるのかよく判らない...
「車輪を再利用するのはかまわんが、戦車のキャタピラを
バイクにつけるのはヤメトケ」ということ?
読み違いしてそうだな<俺
0019名無し関数のλさん NGNG
>>18
> いまのところ、コントロール部、描画部(入力も?)、サウンド部に
> わけよーかと思ってます。

それ、スレッドやプロセスを分割する利点が全くないと思う……。
0020デフォルトの名無しさんNGNG
擬似タスク
0021デフォルトの名無しさんNGNG
X上のアクションゲームなら、プロセス切替えも共有メモリのオーバーヘッドも誤差の範囲な気がします。
もっと違うところが、パフォーマンスに効いてきます。
今ならハードウェアの進歩で、X上のアクションゲームもそれなりに作ってもそれなりの速度で動きます(もちろん、モノによりますが)。
0022デフォルトの名無しさんNGNG
>>19
そかな?音をMIXするのに、分けた方が楽そうだと
思ったんだけど...ま、いいや
0023デフォルトの名無しさんNGNG
>>21
そういうモンなのですか。
先ずは作ってみて、ダメだったら考えるとします。
ありがトーサンでした
0024デフォルトの名無しさんNGNG
軌道修正感謝>>16

>>18
>あと、Linuxで実装するんで、それほどスレッド/プロセスの
>コストの差はないのかな、と。

んなこたぁあるまいよ?unix系(当然Linux含む)には一般的に言える話だべ。

>>22
おーい。機能単位の分割と、プロセスとかスレッドとかの実行単位の分割とは
全然別の視点で考えるべきものだぞー
機能分割をしたいなら動的ライブラリでも使うべきだろうよ。
プロセスじゃなくてソースやバイナリを分割すべきもの。

なんのために音声「ライブラリ」とかが存在すると思ってるんだ?
(望むならば)メインプログラムにだってリンク出来るようにするため、だろ?
そうでないなら誰もが音声「プログラム」しか作らないはずだ。
0025デフォルトの名無しさんNGNG
>>22
悪いコト言わないから、いわゆる「擬似タスク」について調べてみなよ。
大抵のゲームで、複数のキャラクタや音声などを並行して動かすため
に使っているテクニックだから。

UNIX 流のマルチスレッド(非同期、プリエンプティブ、実行順序を制御
できない)は、ゲームでは思考ルーチンなどの例外的な処理でしか使
わない。
0026デフォルトの名無しさんNGNG
>>25
http://giggle.cside6.com/hotate/shoot/menu.htmasas
ここっすね。さんきう。

>>24
うーん、わかるんですが、「機能の分割」と「プロセス分割」が
一緒のほうがタコな私にはわかりやすいので...
(いや、だからこそ意識したほうがいいのかな?)
でも、なんとなく書けそうなんで、始めてみるっす。
0027デフォルトの名無しさんNGNG
まだ懲りずに使ってるよ、「擬似タスク」って言葉。
散々突っ込まれただろうに、何が調べてみなよなんだか。

>ここっすね。さんきう。
というか、そこしか出てこないので注意ね。
0028デフォルトの名無しさんNGNG
>おーい。機能単位の分割と、プロセスとかスレッドとかの実行単位の分割とは
>全然別の視点で考えるべきものだぞー
>機能分割をしたいなら動的ライブラリでも使うべきだろうよ。
>プロセスじゃなくてソースやバイナリを分割すべきもの。

ゲームのことはよく知らないけど 動的ライブラリこそ機能分割にあんまし関係ないと思う。
アプ組み上げる段階での話。

機能ごとにスレッドで分割するのは実際よくあることじゃん?JavaはUI専用にスレ立てるよね(AWTEventスレね)。
でもゲームじゃないけどグラフィックス系のアプ書いたときはスレ避けてたな。最初は楽なんだけどsched上手くやらないと動き鈍くなった。
関数系言語やJavaのGCと同じ問題。
0029デフォルトの名無しさんNGNG
少なくともマルチスレッドにする意味はあるが、
マルチプロセスにする意味はない。
0030デフォルトの名無しさんNGNG
>>27
もちろん、そこのページが引っかかるように単語を選択した
んだよ。

ところで、私は突っ込まれた覚えがないんだが、どこかで擬
似タスクって単語を使って叩かれてたヤツいたの?
0031デフォルトの名無しさんNGNG
特にLinuxの場合、プロセス隔てると同期を取る手段がIPCの
セマフォしかなくなるから、リアルタイム性を重視する用途
には向いていないと思う。遅いし、死ぬと漏れるし・・・(T_T
0032デフォルトの名無しさんNGNG
コンソールでどのキーが押されたかを拾いたいのですが、方法がわかりません。
こう書いてもわかりにくいと思うのですが、NEC PC98のキーボードBIOS操作のように、
純粋にどのキーが押されたかをビットで拾いたいのですが、良い方法はありますか?
0033デフォルトの名無しさんNGNG
>>32
PCのキーボードはどのキーでも複数押しが出来るって訳じゃないのよ
使い道によっては、そもそも諦めるしかないと思われ
0034デフォルトの名無しさんNGNG
以前、「擬似タスク」って俺用語をしつこく使いつづける人間が居たんだよ。
みんなにいくら叩かれても俺用語だと認めなかったという。

ちなみに俺用語ってのはそいつしか使ってない用語って意味ね。
これも俺用語だったらスマソ(藁
0035デフォルトの名無しさんNGNG
で、擬似タスクってなによ?
擬似マルチタスクかな? これも正式な用語かどうか知らないけど。
0036デフォルトの名無しさんNGNG
「擬似タスク」って使うと、34みたいな粘着が出てしつこいから注意しましょうということです。
0037デフォルトの名無しさんNGNG
 ┌─────────┐
 │                  |
 │ スーパーキチガイ警報 ! |
 │                  |
 └―――──――――┘
   ヽ(´ー`)ノ ヽ(´ー`)ノ
     へ  )   へ  )
      >      >
003832NGNG
ゲームユースではないです。
特定の処理の中断キーとして決められたキーひとつが押されたかを
拾いたいんです。
ワンキーでも難しいですか?
003932NGNG
↑
>>33へのレスです。また、ビットでなくてもいいです。
処理ループが止まらなければOKっす。
0040デフォルトの名無しさんNGNG
>>34
叩かれたというか、キミが叩いてたのでは? 確かに「擬似タスク」というのは
だいぶ胡散臭い単語なんで、これに代わる適当な単語があれば提示を希望
したい。

>>35
要はスレッド(もしくはタスク)なんだけど、UNIX や Win32 が OS の助けを
借りて提供するようなスレッドとは違って

- 同期的
- ノンプリエンプティブ
- スケジューリングをユーザが指定

という特徴をもつもの。協調的マルチタスクとでも呼ぶといいのかな?

タスクマネージャから、各タスクを定期的に呼び出し、各タスクは、制御を受け
取ったら短時間だけ処理をして、すぐに呼び出し側に制御を返すように書いて
おくことで、処理を進める。

詳しくは >>26 のリンク先にあるコードを読んでくれ。大して難しい話じゃない
ので、読めば分かる。

UNIX と関係ないんで sage ね。
0041デフォルトの名無しさんNGNG
>>32
cursesつかってcbreak()すれば、きっと幸せを手にいれられるよ
(getch()みたいなモンが使える)
もっと生なのがほしけりゃ、raw()すればいいけど、
お腹壊してcoreゲロはくと大変なことになるから、
shell scriptでwrapしてnoraw()するプログラムを後ろで
うごかしてやるといいかもね。
0042デフォルトの名無しさんNGNG
stdinをrawモードにしてselectで待つとか>>32
0043デフォルトの名無しさんNGNG
>>40
たぶん似たもの(もっと高機能だけど)を、Rubyじゃすなおに
「スレッド」っていってるね
0044デフォルトの名無しさんNGNG
>>43
確かに「スレッド」なんだが、そう書くと UNIX や Win32 の OS が提供する
ようなプリエンプティブなスレッドと区別できないんだよね。ゲームプログラ
ム書こうという人間に「スレッド使え」と書いたら誤解を招くだけなんで、別
の用語が欲しいトコロ。
0045デフォルトの名無しさんNGNG
ユーザレベルスレッド
0046デフォルトの名無しさんNGNG
>>46
ええとええと。
それの対義語は「カーネルレベルスレッド」で良いんでしたっけ?

…なんか違うな。カーネル内部処理の話になってしまいそうだ
0047デフォルトの名無しさんNGNG
グリーンスレッド <=> ネイティブスレッド (W
0048デフォルトの名無しさんNGNG
putenv()の使い方で質問させて下さい

#include <stdlib.h>
int main(){
putenv("AAA=BBB");
return 0;
}

上記のコードをビルド、実行してもenvで環境変数AAAが設定されません。
putenvの後にgetenv("AAA")を入れて動作を確かめると文字列"BBB"が
返ってくるのは確認したので書式は間違ってないと思うのですが…
どうやればenvコマンドで確認出来るようになるのでしょうか。
御存知の方は教えて下さい。宜しくお願い致します。

環境はSolaris7+gcc2.8.1
実行環境(shell)は/bin/shです。
0049デフォルトの名無しさんNGNG
>>48
そこで追加してるのはプログラムが実行されてる間
だけのローカルな環境です。プログラムが終わると
環境は元のに戻ります。
0050デフォルトの名無しさんNGNG
親のShellの環境を変えるのって出来ないんでしたっけ?
005148NGNG
48です。
そうでしたか…getenvはshellの環境変数を取得出来たので逆にputenv()
で設定出来るのかと思ったのですが考え方が甘かったようです。

shellスクリプトを書くときに併用して使用し、特定の環境変数を
動的に変えていくツールを作りたかったのですが…諦めるしかないですね。
回答有難うございました。
0052名無しさんNGNG
$ (export VALUE=hoge;application)
$ (export VALUE=hage;application)
0053デフォルトの名無しさんNGNG
>>51
getenvはshellの環境変数を取得しているわけではなく、
execve時にコピーされた環境変数を取得してるだけです。
0054デフォルトの名無しさんNGNG
>>51
そうそう。UNIXの困った点がそこ。
なんでもかんでも親子関係がちがち。
親から子へ一方的に命じることしかできない。
双方向対話しようと思ったらとたんに煩雑になる。
0055デフォルトの名無しさんNGNG
UNIXってMFCとか使えるんでしょうか?
0056デフォルトの名無しさんNGNG
>>54
親が子の面倒を全部見る仕組みにすればいいじゃん
0057デフォルトの名無しさんNGNG
>>55 *BSD とかはしょっちゅうやってるぞ、MFC。
0058デフォルトの名無しさんNGNG
>>56
面倒見てるからこそ駄目なんだよ現状は。
親から自立することもできなければ
親に意見することもできない。

あるプロセスを別のあるプロセスの子に「(後から)する」
ということって、出来ねーよなあunix?
0059デフォルトの名無しさんNGNG
少なくともinitの子供にすることは出来る。
それ以外はしりません。
0060名無し讃NGNG
56に便乗。
suのソース読んだ人いない?
あれどうやってんだろう。
0061デフォルトの名無しさんNGNG
>>60
setuidされてるだけじゃないの?違う?
今手元にUNIXマシンないから調べられない(^^;
0062デフォルトの名無しさんNGNG
>>58
する意味がない。
0063????]NGNG
>>61
setuid/seteuidはパスワードを引数に持たないよ。
006461NGNG
>>63
システムコールじゃなくて、chmod u+sしてあるって意味
実効uidがrootになるから、setuid(2)とかで自由に変えられる
0065ありがとうNGNG
すると認証はsuが別口でやってるんですね。
0066デフォルトの名無しさんNGNG
>>62
というか、プロセスを親子関係で管理しようっていう発想が
そもそも意味が無い。
0067デフォルトの名無しさんNGNG
UNIXのプロセス管理が親子関係になってる理由は多分fork()にあると思う。
0068デフォルトの名無しさんNGNG
>>67
そそ。
親子関係の「理由」がforkなのな。
本末転倒してるんだよ。
何事もforkに縛られている。しょせん1つのAPIに過ぎないforkに。
0069デフォルトの名無しさんNGNG
そんなに無意味ならWin2kでJob Objectが追加されたのはどうしてですか
0070デフォルトの名無しさんNGNG
>>69
unixの軍門に下ったんだろ。

方法論としてunix流儀しか有り得ないってことは
絶対にないはずだが、他の方法論で安定に動かせるものを
今のところ作れてない(少なくともゲイツには)んで、
とりあえずレトロで枯れた手法に合わせたわけよ。

ところでw2kって、管理手法としてJobObject「しか無い」
ってわけじゃないよな?
親子構造しかないunixよりは、マシ。
0071デフォルトの名無しさんNGNG
age
0072デフォルトの名無しさんNGNG
fork()はガンだよね。
0073デフォルトの名無しさんNGNG
CreateProcess()しかないWin32よりはマシな気がする
fork()->setpgrp()->execve()でほとんど同じ事できるし

単純にプロセスを分岐出来た方が楽な事も多いと思う
0074デフォルトの名無しさんNGNG
fork()しかないUnixよりましな気がする。
CreateThreadでほとんど同じ事できるし。

単純にスレッドを作れたほうが楽なことも多いと思う。
0075デフォルトの名無しさんNGNG
あるポートをbindしたプロセスを再起動したら Address already in use となってしまう。
プロセス終了時に close するだけじゃ駄目なのでしょうか?

TCP( AF_INET, SOCK_STREAM) です。
0076デフォルトの名無しさんNGNG
>>75
よくなるよね。解決策ってあるのかな?
今のところ聞いたことないんだけど…
0077デフォルトの名無しさんNGNG
>単純にプロセスを分岐出来た方が楽な事も多いと思う

そもそもプロセスに「分岐」っていう考えがあること自体が
不気味なんだけどな。

走行中のThread「を」複写しようなどと思う奴が居るか?(反語)
そんな、Contextがどうなってるか際どいものを
わざわざコピーなんてしたくない。

でもunixのプロセスは、走行中(というか停止中という概念が
意味をなさないのだが)にforkで複写される。不気味。

というかアレだな、Threadのアナロジーで考えるなら、forkは
以下のようなものであって欲しかった(今更言っても無駄だが)。

1:自分じゃなくて第三者(のプロセス:どうせUnixにはプロセスしかないので)
の依頼によってfork「させられる」ことが出来る。

2:今そのプロセスをforkしても大丈夫かどうか?という情報を
その第三者が、該当プロセスを「動かさず(=非破壊)」に
知る手段がないと困る。
勿論直接そんなことが出来るとは限らないので、
OOPのプロパティみたいな非破壊状態読み書き機構があり、
それを第三者がアクセスする、という形が良かろう。

でも、現実はそうじゃないのな。あれは不気味だ。

プロセスは、状態を持っているのでその状態を第三者が知りたいと思うことが多い
というものであるにも関わらず、プロセス(だけ)が実行主体の単位であるために
受身になる(それによって第三者が「調べる」ことが出来るようになる)ことが出来ない。
0078デフォルトの名無しさんNGNG
forkってまだスレッドの概念すらなかったころにできたんだよね?
0079デフォルトの名無しさんNGNG
>>75
setsockopt()っぽい関数でLINGERっぽいヤシを指定するとかそんなカンジでなんとかならないかな?
名前はうろ覚えです。
0080デフォルトの名無しさんNGNG
>>79
tcpnodelayじゃない?
0081デフォルトの名無しさんNGNG
>>75
数分待つ。
0082デフォルトの名無しさんNGNG
>>75
素直にあいてるポート探したら?
0083デフォルトの名無しさんNGNG
>>82
サーバなんじゃねぇの?
0084デフォルトの名無しさんNGNG
>>75
ちゃんと shutdown(2) してる? close(2) だけじゃ駄目だよ。
0085デフォルトの名無しさんNGNG
>>77
プロセスという存在が非常に抽象化されていて、実際のメモリ上での
挙動とかけ離れたイメージの存在になっている事が原因だろうね。
fork()自身の仕様は、Unixのプロセス管理機構の側からすれば、
何の事はないことでしょ。
0086デフォルトの名無しさんNGNG
>>85
ハラワタの底の挙動まで考えれば、
理解は可能だが、賛同は不可能だな。
モデルがひねくれすぎ。
ThreadとObjectという最近流行(わら)の考え方のほうが
はるかに素直なモデリング。

少なくとも、データ単位と実行単位を別々に管理できるほうが
幸せだよ。ThreadがObjectを触って回るVisitorPattern
みたいなものだと思えばいい。
0087デフォルトの名無しさんNGNG
>>86
是非新OS書いてください。
0088デフォルトの名無しさんNGNG
>>86
forkの意味理解したとき、「これ考えた奴天才かも」って思ったよ
天才=キティという話もあるが・・・(藁
0089デフォルトの名無しさんNGNG
>>75
setsockopt(2) で SO_REUSEADDR つける。

>>79
SO_LINGER をその目的でつかうのはだめ。

>>80
全然違う。
0090デフォルトの名無しさんNGNG
EOF超えて後ろにseekすると、穴あきファイルになるのは
しってるんですけど、
あるファイルのどの部分が穴なのか、検査する方法って
ありますか?
0091デフォルトの名無しさんNGNG
>>90
dumpみたいにraw deviceを直接見に行かない限り
無理だと思われ
0092デフォルトの名無しさんNGNG
age
0093デフォルトの名無しさんNGNG
プロセスの制御端末と標準入出力の違いがよくわかりません。
どんな本とかWEBを見ればよいでしょうか。
0094デフォルトの名無しさんNGNG
エスケープシーケンス開設してるサイトない?
0095デフォルトの名無しさんNGNG
>>93
標準入出力はデータの流れ。制御端末はシグナルの送出元。
0096デフォルトの名無しさんNGNG
>>87
漏れはやっと簡単な言語を作れるようになったばかりなんで
OSなんてのは遠い(=5年くらいか(わら))夢です。
それに、モデルとかの上位層は強い興味持っているが、
下位層のCPUやPC(など)の仕様の把握ってのは
ちょっと鬱な作業だなと。
OSをKit化して好きな部分だけ自作すれば済む
というもの(OSKitという名だとか)を
公開してる大学もあったはずなんで
そっち使ってラクしちゃろかなという発想が先行する。

というか、既に星の数ほどある研究レベルのOSの中には
こーゆーモデルの奴も結構多いと思われ。
「OSの」研究をするならば少なくとも、
既存物に過ぎぬPOSIXにする意味は全く無いんで。

>>88
個人的にはキティ説まんせー

まぁ当時は今みたいなOOP時代じゃなかったから、
データつーものを重んじる発想が無かったんだとは思う。

たとえばPipeじゃデータ「の一意性」は永遠に表現できない。
データを流さざるを得ないせいだ。おかげさまで、
なんぼPipeでソフトウェア部品だと言い張ってみたところで、
その部品をどう活用してもviエディタひとつ作れやしない(わら)
0097デフォルトの名無しさんNGNG
forkはわかりますが、threadがなんなのか理解できません。
どう違うのか、どう実現しているのかおしえてくださ〜い。
0098デフォルトの名無しさんNGNG
>>97
スレッドが理解できていないのなら、forkも分かっていない
0099デフォルトの名無しさんNGNG
あら、そうですか?>>98
unixのプロセス制御を解説している本は多くありますが、
スレッド制御をosレベルできちんと解説している
文献がありません。
プロセス・スレッドの違いで簡単に解説してほしー。
0100デフォルトの名無しさんNGNG
unixのプロセス制御をosレベルできちんと解説している本とは?
0101デフォルトの名無しさんNGNG
>>99

docs.sun.comに行けばsolarisのドキュメントがお腹いっぱい読めるよ。
solarisは一応POSIXスレッド使えるし。
0102デフォルトの名無しさんNGNG
 私は98さんでも99さんでもありませんが。
 マルチプロセスかつマルチスレッドなプログラミングを
するハメになってしまいました。チームで、ですがこれに関しては
全員素人という。。。

 現在、
・SUN マルチスレッドのプログラミング docs.sun.com
・UNIXネットワークプログラミング第2版Vol.1
・同Vol.2
を用いて勉強中ですが、理解にはまだまだ道は険しいです。。。

 マルチスレッドプログラミングに関しては、以下の本がありますが、
上記3つに加えて「読むべきお勧め本」がありましたら教えてください。

・マルチスレッドプログラミング入門 アスキー
・実践マルチスレッドプログラミング アスキー
・Pthreadsプログラミング オライリージャパン
・Pスレッドプログラミング ピアソン
・POSIXスレッド プログラミング アスキー

>>100さんと同じく、プロセス制御解説のお勧め本も
教えて頂けると幸いです。。。

OSはSolaris8を、コンパイラはgccを、デバッグにはGDBを用いています。

教えて君で申し訳ありませんが、回答して頂けるとうれしいです。
0103デフォルトの名無しさんNGNG
>> 102

全員素人でマルチプロセス・マルチスレッド?

...可哀想だが、95%こけるよ(^^;


ひとまずpthread関連の書籍を読めば基本はわかるはず。

あとライブラリ関数はマルチスレッド対応かどうかを必ず確認するべし。
プロジェクトのライブラリ内で非マルチスレッド関数とか使われると
原因不明のバグで悩まされます。要注意。

あとはがんばって競合問題を勉強してけれ。結局はそれが一番問題。
0104デフォルトの名無しさん NGNG
>>103
>マルチスレッド対応

スレッドセーフかどうかってことね。
でもスレッドセーフな関数しかつかわんのなら、
スレッドプログラミングなんてなんら勉強する必要ねーじゃん(藁

競合問題も勉強する必要なし。

タイミングを勝手に仮定したロジック組まないことが一番問題かな。
0105デフォルトの名無しさんNGNG
>>104 グローバル変数...
0106デフォルトの名無しさん NGNG
>>105 仕様禁止...
0107shigeNGNG
しえーーーーーーーーーーーーーーーーーーーーーーーーーーー
0108デフォルトの名無しさんNGNG
static 変数...
0109デフォルトの名無しさんNGNG
>>108 仕様禁止... ただし定数は可(w
0110chingeNGNG
しえーーーーーーーーーーーーーーーーーーーーーーーーーーー
0111デフォルトの名無しさんNGNG
>>104
スレッド間で通信しないわけ?
0112デフォルトの名無しさんNGNG
>>111 仕様禁止...
0113shineNGNG
しえーーーーーーーーーーーーーーーーーーーーーーーーーーー
0114103NGNG
>>104

pthreadライブラリは全て「スレッドセーフな関数」なんだが、
その使い方・常套手段・マルチスレッドの流儀も一切勉強しなくて良いと?

さらに標準ライブラリは全てスレッドセーフだとでも?

そしてスレッドセーフな標準ライブラリだけでプログラミングできるとでも?
自作モジュールなんてつかうなと?


というわけでどう考えても104の認識不足。


> タイミングを勝手に仮定したロジック組まないことが一番問題かな。

これが競合問題だっつーに。
マルチスレッドもマルチプロセスもこの問題が一番でかくてやっかい。
0115104NGNG
>>114 同意するよ
0116デフォルトの名無しさんNGNG
age
0117デフォルトの名無しさんNGNG
>>114
禿同

102のような状況で、こないだプロジェクトいっこ潰した。
俺が入っていったときには既に末期ガンで処置不能。
0118デフォルトの名無しさんNGNG
pthreadを最近勉強始めた者です。
signalでその都度変化する時間間隔で発生するSIGALRM
がきたら関数を呼び出す、という関数を含む
処理を複数スレッド化したいのですが、そのまま
pthread_createしちゃっていいんでしょうか?
厨房な質問で申し訳ないのですが。
0119デフォルトの名無しさんNGNG
>>85-88
超カメレスだが、JavaOSマンセー!
Processなんて無いぞ。それどころかProcessメモリ空間すら無いぞ。
それでも複数の「アプリケーション」が問題(変な干渉)無く動くぞ。
JavaOSマンセー!
JavaOSマンセー!
0120デフォルトの名無しさんNGNG
盲信
0121デフォルトの名無しさんNGNG
bashの様な文字列補完とか自分のプログラムで使いたいんですが、
どうやるんですか?
0122デフォルトの名無しさんNGNG
>>121 readline というライブラリがあるよ。man readline
むかしそれで英和辞典作ったことがある
0123デフォルトの名無しさんNGNG
>>77
fork(2)のご利益が理解出来ないなら「UNIX原典」を読め。
dup(2), pipe(2), shellのredirect, pipeとの関係について書いてある。

> OSなんてのは遠い(=5年くらいか(わら))夢です。
なんて野望があるなら、過去のprocess model全てをよく勉強しておくことを進める。
0124デフォルトの名無しさんNGNG
>>123
ヴァカはほうっておけよ。相手にするだけ時間の無駄だ。
0125デフォルトの名無しさんNGNG
readlineはGPLに犯されてる
0126デフォルトの名無しさんNGNG
Linuxから入る人はUNIXっていうものを軽視しがちだね。
LinuxとかBSDとかじゃなくて、UNIXがなんなのか
それを理解することの方がよっぽど大切だと思うよ
0127デフォルトの名無しさんNGNG
linuxでPnPなドライバを作る方法を教えてください。
0128デフォルトの名無しさんNGNG
>>120
たしかに>>119は盲信気味だけど、JavaOSは面白いよ。
VM/class verifier流儀のprotectionとかさ。

別に言語はJavaじゃなくていいんだけどさ。
0129デフォルトの名無しさんNGNG
Spinマンセー!! Modula3マンセー!!
0130デフォルトの名無しさん NGNG
JavaOSとLispマシンはどう違うんですか?
0131デフォルトの名無しさんNGNG
>>34
おもしろい
0132デフォルトの名無しさんNGNG
ウニックスとライナックスの違いがわからない
0133デフォルトの名無しさんNGNG
ライナクスはニセブランド品、ピーコ品、パチモンです。
0134デフォルトの名無しさんNGNG
つーかリーヌクスだろ?
0135デフォルトの名無しさんNGNG
ライナックスは、ウニックスのエミュレータです。
0136デフォルトの名無しさんNGNG
あんなパチモンの呼び名などどうでもいいです。ライナックスで十分です。
0137ライナスNGNG
作者ですがなにか?
0138デフォルトの名無しさんNGNG
stat.st_modeの挙動がおかしい。
0139デフォルトの名無しさんNGNG
138の挙動がおかしい
0140デフォルトの名無しさんNGNG
プロセス:割り当てられた空間つぅか領域
スレッド:プロセスん中で動き回ってるヤツ

などと放言すると殺される?
0141お胸おっぱいNGNG
>>140
そりゃあんまりだ。メモリ空間に関して
  プロセス: 独立して割り当てられる。
  スレッド: 元のプロセスのメモリを共有。
ってところ押さえないと。
0142デフォルトの名無しさん NGNG
ソケットプログラムについての質問です。
自身のIPアドレスを知るための関数はありますか?
ちなみに自身の名前(ホスト名)も分かっていない状態での場合です。
system関数でhostnameを使用して、それをgethostbynameでIP取得・・・
とするくらいしか思いつきません。
何か良い方法はないでしょうか?
0143デフォルトの名無しさんNGNG
スレッド:プロセッサ割り当ての単位
プロセス:(プロセッサ以外の)リソース割り当ての単位
0144デフォルトの名無しさんNGNG
>>142
基本的にそれでいいと思うよ。

あと、自分のホストネームは gethostname() システムコールを
使えば良いと思われ。
0145デフォルトの名無しさんNGNG
getsocknameを使う方がいいんじゃない?
マシンにhostnameやIPアドレスが複数ある時は、
そのsocketでどのIPアドレス使われてるかは
gethostname+gethostbynameじゃわかんないでしょ?
0146142NGNG
>>144 >>145
ありがとうございます。
それでやってみます。
0147sageNGNG
ソフトバンクの目隠しモナリザ本、買おうかどうか迷ってるんだけど……
0148デフォルトの名無しさんNGNG
opendirしたらclosedirしないとだめなの?
0149デフォルトの名無しさんNGNG
>>142
POSIXで標準化されてるかは知らないけど、
SIOCGIFCONFをioctl()すると調べられる

#include <net/if.h>あたりを調べてごらん
0150デフォルトの名無しさんNGNG
*.so
と
*.a
ってなにもん?
0151デフォルトの名無しさんNGNG
>>150
.soはShared Objectで、実行時リンクライブラリ
.aはArchiveで、静的リンクライブラリ

自分で調べろよなぁ・・・
0152デフォルトの名無しさんNGNG
拡張子辞典(Windows,DOS,Mac,CP/M,OS2,unix 共通)
http://www.qbfc.com/tech/Article01/std/exdic.html
0153デフォルトの名無しさんNGNG
>>152
Unixでは拡張子は基本的にはファイルの種類と関係ないよ。
0154デフォルトの名無しさんNGNG
>>153
カーネルは関知しないが、
コマンドは拡張子を気にするだろ。

makeとかCコンパイラとか。
0155デフォルトの名無しさんNGNG
>>154
.cだったらCのソースで、.hだったらヘッダファイルだとでも?
0156デフォルトの名無しさんNGNG
UNIX使いなら拡張子じゃなくてsuffixと呼べやゴルァ
0157デフォルトの名無しさんNGNG
質問です。
UNIXでWin32で言うところのDLLみたいことをやりたいんですが、
LoadLibrary()とGetProcAddress()みたいな関数(とかシステムコール)は
あるのでしょうか?
0158デフォルトの名無しさんNGNG
solaris/linuxなら man dlsym か
他は知らね
0159デフォルトの名無しさんNGNG
and man dlopen
0160157NGNG
>>158-159
ありがとうございます。それでできそうです。
0161デフォルトの名無しさんNGNG
Emacsでgdbを使うにあたって、
なにかお勧めの書籍やWebページありますか?
0162デフォルトの名無しさんNGNG
あげ
0163デフォルトの名無しさんNGNG
>>153
関係ないっつったら、他の OS でも関係ないじゃん。
0164デフォルトの名無しさんNGNG
>>161
GNU Emacsの中でのGDBの使用
http://www.asahi-net.or.jp/%7Ewg5k-ickw/html/online/gdb-4.18/gdb_17.html#SEC150
0165デフォルトの名無しさんNGNG
あげ
0166超初心者NGNG
fd = open("hogehoge", O_RDONLY);
で開いたファイルに何か入力があるまでブロックされ、入力があったら
それをシグナル等で知る事ができるような方法はありますか?
select()ではできませんよね?
Solaris7 or 8 なのですが。
0167デフォルトの名無しさんNGNG
普通にreadすれば?
0168デフォルトの名無しさんNGNG
シェルはbashです
cをつくったんですけど
ccでコンパイルできません。
どうすればコンパイルできますか?
0169ひよこ名無しさんNGNG
>>168
エラーメッセージは?

>cをつくったんですけど
ほう、yaccとか使って?
0170デフォルトの名無しさんNGNG
>>169
>エラーメッセージは?
「そのようなコマンドはありません」でした

linux初心者でcを勉強しようといれてみたんですが・・
cc test.c な感じです。。
0171ひよこ名無しさんNGNG
>>140
gccは?
学校ではSolarisさんか?
0172デフォルトの名無しさんNGNG
会話の意味が解らんw
0173デフォルトの名無しさんNGNG
>>171
いえ、借りてるサーバーがSolarisです。telnetでよく遊んでいます
自宅の環境はredhat7.2です
gccもコンパイルのソフトでしょうか
のちほど試してみます
0174デフォルトの名無しさんNGNG
gccでもダメでした・・
0175デフォルトの名無しさんNGNG
いったいLinuxで何してんだか。
0176超初心者NGNG
>>167
すみません、ちょっと書き方が悪かったのですが、
やりたいこういうことです。

hogehogeというファイルにあるプログラムからログが書かれる。
それをほぼリアルタイムに表示したい。
tail -f のようなポーリング式にはしたくない。

という事をしたいのですが、良い方法ありますか?
0177デフォルトの名無しさんNGNG
>>174
find -n gccとかで探してみて(スイッチ-fかも)。
0178デフォルトの名無しさんNGNG
>>174
locate gccで探してみた?
gccにパスが通っていないってのはちょっと珍しいかも。
それともコンパイルエラー?
0179178NGNG
レスさんくすです
>>177>>178
後ほど試してみます。

余談ですが、インストールするときにワークステーションの設定で
インストしたんですが、デフォルトではいってますでしょうか?(コンパイラ
もしかしたらインストールされてないのかなっておもったり
0180デフォルトの名無しさんNGNG
http://saki.2ch.net/____vip/
入れない2chVIP板。
0181デフォルトの名無しさんNGNG
>>176
SIGIOって通常ファイルに対して使えたっけ?
0182超初心者NGNG
>>181

それはどうやって使えば良いのでしょうか?
すみません、ほんとに初心者なのです。
0183デフォルトの名無しさんNGNG
UNIXのプログラミングは
まずは『詳解UNIXプログラミング』を覚えてからでないと
ダメですか?
0184デフォルトの名無しさんNGNG
>>179
>ワークステーションの設定でインスト
うん、おれんとこもそう。だけどコンパイラはデフォで
入ってるし、パスも通ってる。というより、あえて外そう
としないかぎりインストールされるでしょ。gccって。
0185デフォルトの名無しさんNGNG
183。
ちなみにこの本でUNIXが何なのかを頭に叩き込むのがいい、
とかどっかに書いてありました。
0186デフォルトの名無しさんNGNG
この本とっても他界よ!
0187デフォルトの名無しさんNGNG
>>186
でも他にまともな本がない・・・
0188デフォルトの名無しさんNGNG
>>183
ttp://www.jks.is.tsukuba.ac.jp/~daiki/func/man7/signal.7.html
あまり参考にはならないかもしれないけど、資料として。
どう使えばいいかまでは書いてないから、適切な書籍を買うなり
して、SIGNALについて勉強すればいいんでない。
0189デフォルトの名無しさんNGNG
ごめん、間違えた。>>183ではなくて>>182だ。
0190132NGNG
>>189
どうもです。
勉強する糸口が見えてきました。
が、しかし、Linux には fcntl(2) のコマンドとして F_SETSIG という
のがあってこれを使えば指定したファイルディスクリプタから入力が可能
になった時点でシグナルハンドラが呼ばれるようなのですが、Solarisには
F_SETSIGやそれに相当するものがありません。他に方法はあるのでしょうか?
0191デフォルトの名無しさんNGNG
だいたい表示とか、プログラムから書き込まれるタイミングとかによるけど。
たとえば1msに1バイトずつ書き込まれるものを一個一個読み込みたいってわけ
じゃないだろ?
だったらポーリングで充分じゃなかろうか。
0192デフォルトの名無しさんNGNG
>>190
$ man streamio
そしたらば、I_SETSIGやSIGPOLLをサーチすれ

>>166
select(2)じゃあ、EOFにも反応しちゃうね。しなきゃしないで困るし。>EOF
0193132NGNG
>>192
ウォー!!サンクスです。
ioctl(2)で出来るんですね。docs.sun.comのマニュアル見たらなんか行けそうな
気がしてきました。今手元にはCygwin(藁しかないので明日試してみます。
0194デフォルトの名無しさんNGNG
>select(2)
(2)って何ですか?
0195デフォルトの名無しさんNGNG
manしないの?
0196デフォルトの名無しさんNGNG
$man 2 select

ところでみなさん、Solaris、*BSD*、Linuxと
いろいろな環境をどのようにマスターされました?
やっぱり自分で実際に使ってみたのでしょうか?
0197196NGNG
上のは当然、オペレーションの話じゃなくてAPIのことです。
0198デフォルトの名無しさんNGNG
aioread(3AIO)なんかも美奈代。7 or 8ってことだから。
使わなくて平気だろうけど、面白いよ。
0199デフォルトの名無しさんNGNG
>>196
よくいわれるけど、システムコール他は、他人が使ってるの見るのが一番いいよ。
少なくとも「完全に動作する実例」だし。

fileutils の中の部分とか、小さいアプリのソース読みまくる。
ハックしまくる。壊しまくる。
うっかり、make install してしまって、ls,cp できなくなってハマる。
他所のサーバに connect しまっくてあせる。
0200デフォルトの名無しさんNGNG

for (i = 0; i < 10; i++)
used[i] = NO;
for (E = 0; E < 10; E++) {
if (used[E])
continue;
used[E] = YES;
for (L = 0; L < 10; L++) {
if (used[L])
continue;
used[L] = YES;
for (S = 0; S < 10; S++) {
if (used[S])
continue;
add( 0, E, L, S, c1);
add(c1, S, L, E, c2);
used[S] = YES;
for (A = 0; A < 10; A++) {
if (used[A])
continue;
used[A] = YES;
for (M = 0; M < 10; M++) {
if (used[M])
continue;
add(c2, A, A, M, c3);
used[M] = YES;
for (B = 1; B < 10; B++) {
if (used[B])
continue;
add(c3, B, B, A, c4);
used[B] = YES;
for (G = 1; G < 10; G++) {
if (used[G])
continue;
add(c4, 0, 0, G, c5);
used[G] = YES;
0201デフォルトの名無しさんNGNG
>200
宿題スレの誤爆だろ。
0202デフォルトの名無しさんNGNG
>>196
1. 少なくとも一つUNIXでは実際に使ってみる。
2. 使うどのUNIXでもmanualは徹底的に読む。
3. さもなくば、氏ぬ
0203132NGNG
Solaris7 で試して見たのですが、

fd = open("logfile", O_RDONLY);
if (fd < 0) {
perror(TARGET_FILE);
exit(1);
}
if (ioctl(fd, I_SETSIG, S_INPUT) < 0) {
perror("ioctl");
exit(1);
}

というような感じで書いて実行すると、

ioctl: Inappropriate ioctl for device

とエラーになってしまいました。
STREAMS (see intro(3)) ioctl commands となっていたので、
intro(3) を見ると、
「「STREAMS」と「ストリーム」の違いには十分気を付けて く だ さ
い。STREAMS とは、ネットワークサービスとデータ通信ドライバの
開発をサポートするカーネル機構の一種であり、...」
となっていますが、streamioは通常のファイルに対しても使えるのでしょうか?
0204デフォルトの名無しさんNGNG
>>203
だからそれが181の疑問なわけよ。
0205デフォルトの名無しさんNGNG
ビルドしたプログラムを実行するとき必ず
./a.outのように頭に./を付けますが
どうしてpathに含めないのでしょうか?
0206デフォルトの名無しさんNGNG
>>205
じゃあ含めてみれ。
0207デフォルトの名無しさんNGNG
含めたはいいが、うっかり test.c をコンパイルして大変なことになる罠。
0208デフォルトの名無しさんNGNG
含めたはいいが、うっかりgcc(中身はrm -rf /)というファイルを置いて
挙句の果てに実行パーミッションつけちゃって大変な事になる罠。
0209132NGNG
>>204
えーん、だめですか。
aioread(3)のサンプルってどこ探しても無いです。
簡単な例無いですか?
0210デフォルトの名無しさんNGNG
なんでポーリングでまずいのか小一時間。
0211デフォルトの名無しさんNGNG
SparcのSolaris付属のccって-Mオプションありますか?
0212デフォルトの名無しさんNGNG
Solarisで仕事してるひとってfork、wait使わないで、
pthread_*を使いまくりなんですか?
0213デフォルトの名無しさんNGNG
>>208
ふと思ったけど、DOSでもxcopy.bat(中身Deltree \*.* -Y)がカレントにあった場合やっぱり・・・。
0214デフォルトの名無しさんNGNG
初心者です
gccでコンパイルしました。
そうしたらディレクトリ内に変なファイルができました。
実行したいのですがどうすればよいでしょうか
0215デフォルトの名無しさんNGNG
http://www.amazon.co.jp/exec/obidos/ASIN/4894713195/
korewo anki surumade yondekara shitumon shitene!
0216デフォルトの名無しさんNGNG
高いdes!!買えませんです
0217デフォルトの名無しさんNGNG
すみません。いい方がよくありませんでした
コンパイル後にa.outというファイルがつくられました。
そして実行しようとしてa.outと打ったのですが
そんなコマンドは無いといわれました

なんと打てばよろしいのでしょうか
0218デフォルトの名無しさんNGNG
./a.out
0219デフォルトの名無しさんNGNG
ありがとうございました!やってみます
0220デフォルトの名無しさんNGNG
>>209
> aioread(3)のサンプルってどこ探しても無いです。

http://examples.oreilly.com/posix4/p4code.tar.Z
でも、aio は176の目的には使えないと思った。
ポーリングすれ。
0221132NGNG
>>220
調べていただいてどうもです。
いろいろ考えたんですけど(調べてはいないので妄想か?)ローカルディスク上
のファイルならまだしも、NFSサーバ上のファイルのI/Oの発生をカーネルが知る
のはとても難しいと思うので無理で当然かなと思いました。
素直にポーリングします。
どもありがとうございました。
0222デフォルトの名無しさんNGNG
>>213
その通り。だからDOSは糞。
0223デフォルトの名無しさんNGNG
つーか、dosなら、カレントにxcopy.batを置くのは
基本的に自分自身なわけで、それって自業自得では?
0224デフォルトの名無しさんNGNG
なんかUNIXでのスレッドプログラミング用ライブラリを見てたんだけど、
いろいろありすぎて訳分からん。だれか2,3簡単に説明してくれないかな。
説明はいいとしても何を使ってるか教えて下さい。

関連サイト
http://pc.2ch.net/test/read.cgi/unix/1010933537/
0225デフォルトの名無しさんNGNG
>>223
UNIXだって同じじゃん
0226デフォルトの名無しさんNGNG
>224
おまえが調べておれに教える!
0227デフォルトの名無しさんNGNG
>225
UNIXは多人数で同時に使えるだろ。
/tmpとか、誰でも書きこみできるだろ。
0228デフォルトの名無しさんNGNG
>227
なんで/tmpにわざわざパス通さなきゃならないんだよ。
リアリティーがないぞ。
0229デフォルトの名無しさんNGNG
やっぱSolarisかWindowsだな。PC-UNIXにはthreadは不向きだ。
0230デフォルトの名無しさんNGNG
いまはpathに . が含まれる事についての話じゃなかったのかよ。
0231デフォルトの名無しさんNGNG
>>230
そんな話は誰もしてません。気のせいです。
0232224NGNG
pthreadスレにあったNGPTとPthだけど、
Pthの方はあまりパフォーマンス的には期待できないけど、
多機能ゆえにこれ使うことにします。
NGPTはまだ安定動作の保証が取れてなさそうなので、
もう少し様子を見てからにしたいと思います。
0233デフォルトの名無しさんNGNG
もしかして一般ユーザーには関係ない話なのか?
http://www.linux.or.jp/JF/JFdocs/Path-12.html
0234デフォルトの名無しさんNGNG
>>228
/tmpに絶対chdirしないならいいけど
0235デフォルトの名無しさんNGNG
>>233
「Linuxでは、パスの評価がオペレーティングシステムコールレベル
(operating system call level)で行われていることを思い出して
下さい。実行ファイルのパスが与えられているところならどこでも、
(少なくとも) /bin、/usr/binから検索される短い名前(short name)
が与えられます - 他の場所でも同様です」

ってどういうこと?
0236デフォルトの名無しさんNGNG
>>235
原文あたってみた。

Linuxではパスの評価がオペレーティングシステムコールレベルで行われる
ことを忘れてはならない。実行可能ファイルのパスを指定するあらゆる
場所において、あなたは少なくとも/binと/usr/binで検索される省略名を
使うことができる(*)。

(*)3. 一般より抜粋
execシステムコールは、 '/' を含まないファイル名を与えられた場合に
PATH環境変数を使う。例え環境にPATH変数がなかったとしても、少なくとも
/binと/usr/binディレクトリは適合するコマンドを探して検索される。
0237デフォルトの名無しさんNGNG
>>235
PATHに ./ が入ってる場合に限った説明は「クラッカーのlsコマンドを…」のところで終わってるのかな。

「オペレーティングシステムコールレベルで」の部分は、
シェルがパスの解決をしてるんじゃないよ、って意味でしょう。

だからデーモンが foo を実行するとき、(デーモンは/bin/fooを期待している)
rootのPATHに/usr/local/bin/が入ってると、
/usr/local/bin/fooが実行されちゃうよっていうことだと思う。
0238デフォルトの名無しさんNGNG
PATH=/bin:/usr/bin:/usr/local/binの順で定義するのが
普通だから、/usr/local/bin/fooが実行されることは
ないだろう。そのへんをきっちり考慮してかかれたプログラム
だと、PATH=/bin:/usr/binって先頭で設定しなおしてから
fooを呼んでる。
0239デフォルトの名無しさんNGNG
manを.htmか.chmに変換したファイルって無いの?
0240デフォルトの名無しさんNGNG
http://www.linux.or.jp/JM/ とか。
0241デフォルトの名無しさんNGNG
>>238
>>237は>>233のページにそういうことが書いてあるって説明だ。モトネタ嫁。
0242デフォルトの名無しさんNGNG
>>236
大嘘じゃん。
PATHを見るのはexecファミリの中ではexeclp()とexecvp()だけで、
これはシステムコールじゃない。
PATHはあくまでもシェルを中心としたアプリケーション側での約束事。
カーネルはまったく無関係。
0243デフォルトの名無しさんNGNG
じゃぁ、システムコールとシェルの動作の間にあるものは、いったい何だろう…
標準関数?
0244デフォルトの名無しさんNGNG
>>238
> PATH=/bin:/usr/bin:/usr/local/binの順で定義するのが普通だから、

初耳だよ。一般ユーザはPATH=/usr/local/bin:/usr/bin:/binだろ。
rootなら/usr/localが最後でもおかしくないけど。

クリティカルなシェルスクリプトは、フルパスでコマンド指定するしな。
0245 NGNG
libc
0246デフォルトの名無しさんNGNG
>>242
なんだ普通のUNIXと一緒か。安心したよ。てかつまんないの。

>>244
一般ユーザなんだからどっちでもいいだろ。統計でもとってみれ。
0247デフォルトの名無しさんNGNG
arでライブラリを作る際、元々.aファイルがあったら、
普通はそれにオブジェクトファイル追加・更新していく事
になりますよね。

すると、あるとき何かの都合でその.aに入っていたオブジェクトを
Makefile等でのarコマンドの記述から外しても、.aを一度消さない限り、
外したオブジェクトが入りっぱなしになってしまいます。

Makefileの記述にあわせて、.aからも不要なオブジェクトを削除する
事って可能なのでしょうか?
それとも、Makefileに更新があったら、必ず.aを消すのが正しいんですか?
0248デフォルトの名無しさんNGNG
>>247
Makefile の更新なんて見ないで常に消せばいいじゃん。
libfoo.a: $(OBJS)
rm -f $@
ar cq $@ $(OBJS)
ranlib $@
みたいなかんじで。
0249デフォルトの名無しさんNGNG
>248
それだと、元々入ってるオブジェクトには変化がなくて、
内包するオブジェクトの指定が変化しただけでは更新しませんよね・・・・
0250デフォルトの名無しさんNGNG
libfoo.a: $(OBJS) Makefile
  # 以下同文
0251247NGNG
>248
>250
いや、.aファイルその物の消し方を知りたいんじゃなくて、
.aファイル内の不要になったオブジェクトを消す方法があるのか?
それとも、.aファイルその物をMakefileの更新にあわせて常に消すのが
正しい流儀なのか?という事を聞きたかったんです。

また、わざわざ指定されなくなったオブジェクトを残すようにしているのは、
何か意図があっての仕様なのか、その辺も知りたいなと。

不要なオブジェクトを残す事に特に意味がないのに、arは追加・更新しか
しないようになっていて、それゆえ.aをわざわざ指定して消さなきゃ
いけないって、奇妙ですよね。
0252デフォルトの名無しさんNGNG
>>247=251
ar dでは駄目?

>元々.aファイルがあったら、
俺はこういう前提ではやらないな。
make clean/allの時点で常に消されることを前提にしてる。
0253250NGNG
>>251
Makefile 書き換えた結果、「何が無くなったか」を検出するように
すれば「無くなったオブジェクトのみ」消すのはできる。
…けど面倒だし、そんなことするくらいなら作り直した方が健全じゃ
ないかなぁ。
0254デフォルトの名無しさんNGNG
最近gcc+makeを覚え始めたのですが
例えばmain.c, sub.h, sub.c, common.hというプロジェクトをビルドする場合、
gcc -Mを使ってヘッダの依存関係を考慮した
全く無駄の無いmakefileを書くのって意外に難しいですね。

先頭にSRCS = main.c sub.cって書いておくと
あとは自動的にビルドしてくれるようなテンプレートってないですか?
0255shigeNGNG
tmake
0256デフォルトの名無しさんNGNG
>>254
これか?
http://www.freebsd.org/cgi/cvsweb.cgi/src/bin/cp/Makefile?rev=1.8&content-type=text/x-cvsweb-markup
0257デフォルトの名無しさんNGNG
>>254

#!/bin/sh
# usage: $0 target srcs...
exec > Makefile
echo "TARGET = $1"
shift
echo "SRCS = $*"
echo 'all: $(TARGET)'
echo '$(TARGET): $(SRCS:.c=.o); $(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@'
gcc -MM $*
0258デフォルトの名無しさんNGNG
>>254
簡単かどうかは別として、古典的作品として imake も挙げておく。
0259デフォルトの名無しさんNGNG
救いage
0260デフォルトの名無しさんNGNG
シグナルマンセー
0261デフォルトの名無しさんNGNG
***すれ立てるまでもない質問はここで 第11刷***
http://pc.2ch.net/test/read.cgi/tech/1014478527/l50

で放置されたので、こちらで質問させてください。
MALLOC_CHECK_の使い方を教えて頂きたいのです。

malloc/freeで、2重解放している等の不具合を見つけるために
MALLOC_CHECK_
なる環境変数を使ってデバッグができると知り、
試してみたのですが、状態が変わらず。

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/malloc.3.html
http://www.arbornet.org/~zunda/ctips.html
辺りを読むと、以下のコマンドをプログラム実行前に行い
プログラムをgdbで実行すればよいだけのように読めるのですが。。。

% gcc hoge.c -g
%
% setenv MALLOC_CHECK_ 1
%
% gdb a.out
%

man mallocで詳しい説明が分かる、とも書いてあるのですが、
私の環境では、man mallocでもMALLOC_CHECK_という単語は全く見当たらず。

Solaris8, gcc2.95.2では駄目ということなのでしょうか?
それとも何かしらのインストール、または事前設定が必要なのでしょうか?
あるいは、単に使い方誤りなのでしょうか?
0262デフォルトの名無しさんNGNG
>>261
> 最近のバージョンの Linux libc (5.4.23 以降) と GNU libc (2.x) では、
これの意味がわからなかったらあきらめれ

0263デフォルトの名無しさんNGNG
>>261
そんなもん使わなくてもデバッグできるだろうに・・・方法はたくさんあるよ
0264デフォルトの名無しさんNGNG
>>261
これでも使えば?
http://www.parasoft.com/jsp/products/home.jsp?product=Insure&/index.htm
0265デフォルトの名無しさんNGNG
>>261  Solaris8 はGNU libc を使用していないんじゃ ないの?
    で>>262がそれを指摘して以降のレスがつづく
0266デフォルトの名無しさんNGNG
UNIX間での移植性のあるプログラムを書くコツはやっぱり
自分で経験積まないと得られないものでしょうか?
0267デフォルトの名無しさんNGNG
>>266
とりあえず、人の(移植性が高い)ソースをパクれ!
そのうちスキルも上がるでしょう。
0268デフォルトの名無しさんNGNG
>>266
とりあえず、POSIXとautoconfを押さえることから始めて見ては?
0269デフォルトの名無しさんNGNG
UNIX のプログラムの設定ファイルって、プレーンテキストですよね?
こういうプレーンテキストを読み込む部分って、みなさん毎回作ってますか?
俺は今まで Win 厨で、設定はレジストリに保存していたので、
いままでUNIX でも設定をバイナリファイルに保存してました。
Berkeley DB のライブラリつかって。

でもなんか違う気がする………
0270デフォルトの名無しさんNGNG
>>269
だから awk/sed や perl が大人気。
人間可読だし、設定プログラムも自由に作成できる。
0271デフォルトの名無しさんNGNG
>270
スクリプト言語なら書き換えも簡単ですね。
設定部分だけ分けて /etc/ の下に置くのもよさそうだし。

メインで使っている言語はC++なので、
シェルスクリプトからバイナリ本体を呼び出すようにして
環境変数経由で初期設定しようかとも思ったんですが、
それもスマートじゃないなぁ、と。

じゃぁほかのプログラムはどうやってるんだと思ったので、
ntpd のソースを見てみたら、ntp.conf を読み出す部分が
めちゃくちゃ大変そうでした。やっぱり伝統的にそうやってるのか…

どうせなら tiny な Lisp エンジンを内蔵してしまおうかとも思ったり。
FORTHでもいいかなと思ったり。

あうー。
0272デフォルトの名無しさんNGNG
C++使え
0273デフォルトの名無しさんNGNG
regex使え
0274デフォルトの名無しさんNGNG
>272
ていうか、>271 でも書いたとおりメインはC++なんです。
汎用の設定ファイル用パーサみたいなクラスライブラリってありますか?
0275デフォルトの名無しさんNGNG
libxml
0276デフォルトの名無しさんNGNG
flex+bison
0277デフォルトの名無しさんNGNG
Linux でシリアルに入力されたデータをファイルに書き出したいのですが、
どうやったらいいでしょう? ここのスレでいいのかどうか不安ですが
よろしくお願いします。

cat /dev/serial > file

のようなシェルスクリプトとかあるいは、C で本格的に書くのでもいいですが。
0278デフォルトの名無しさんNGNG
>>277
それでできてるんじゃ?
Linuxではダメなのか?
0279デフォルトの名無しさんNGNG
UNIXプログラミング、ヘッダーファイルの依存関係にちと疲れた・・・
grepかけすぎて/usrの下が壊れそう
0280デフォルトの名無しさんNGNG
>>269
> こういうプレーンテキストを読み込む部分って、みなさん
> 毎回作ってますか?

確かに不便。UNIX の欠点かなと思う。ただ、
 %{
 #include <stdio.h>
 %}
 %%
 ^[a-z]+=[a-zA-Z0-9]+ { '=' で分割して格納 }
 %%
として、
 % lex foo.l
 % cc lex.yy.c -ll
程度で何とかなるっちゃー何とかなる。でも面倒。

# をコメント扱いするとか、行末の \ の継続行扱いとかを考えるとさらに欝。
0281デフォルトの名無しさんNGNG
>280
> 確かに不便。UNIX の欠点かなと思う。

まぁ、UNIXの欠点というよりライブラリがないってだけなんだけど、
不便なことには変わりない。

やっぱ lex + yacc で吐かせてる人が多いのかな。
bison が C++ に完全対応してくれればなお良なんだけどな。


個人的には Lisp とか Scheme とか好きなんで、
自分のプログラムに簡単に組み込める機能限定の tiny な
Scheme エンジンがあればいいと思ったり。
Gauche って組み込みやすいのかなぁ。
0282273NGNG
>>281
あうー。
regexはだめなのー?
0283デフォルトの名無しさんNGNG
>>269
偶然こんなのみっけたよ。
http://www.vector.co.jp/soft/unix/prog/se099824.html
0284デフォルトの名無しさんNGNG
>282 regex も汎用性があっていいけど、階層化されたような
ちょっと複雑な構造のファイルをパースするとなると結局パーサは
自分で書かないとだめになっちゃうかも。

>283 をを!こりは、ぴったり。
も、もう少し前にコレを知っていれば………
S式で設定ファイルを書くようにプログラムを書いちゃターヨ。
0285デフォルトの名無しさんNGNG
>>284
S式の方がよいと思う。
0286 NGNG
age
0287デフォルトの名無しさんNGNG
S式つーとこんな感じで書けるしね
階層も自由自在
(キー 値)
(キー 値)
...
(グループ
(キー 値)
(キー 値))
0288デフォルトの名無しさんNGNG
oracleの設定ファイルはS式っぽい。
0289デフォルトの名無しさんNGNG
>>288
カッコだけでしょう。
0290デフォルトの名無しさんNGNG
>>289
そんなこというなよう
0291デフォルトの名無しさんNGNG
木構造やらを扱うデータ表現ならS式が最適でしょ。
わざわざ限定的なXMLパーサを扱う最近の風潮はよくわからん。
0292デフォルトの名無しさんNGNG
自分で書くの面倒だなぁと思ってs式で書いた設定ファイルを読み込むライブラリ
がないか探してみたらこんなものを見つけました.
http://www.complang.tuwien.ac.at/~schani/lispreader/

やっぱ皆自分で書いてるんですか?

#既存の.elコードを読み込みたい..
0293デフォルトの名無しさんNGNG
こんな物見つけた。うぅ、面倒くさそう。
http://www.ascii.co.jp/BSDmag/200004/style.html
0294デフォルトの名無しさんNGNG
http://www.espada.net/~nobu-/jarg/lcode.html
こういったのもあるよ。
0295デフォルトの名無しさんNGNG
> 特に連続 20 時間以上スクリーンを見つめていると、
> 大きなインデントがどんなに読みやすいかわかるだろう

少し外に出て新鮮な空気を吸うことを勧めたい。
0296デフォルトの名無しさんNGNG
S式は万能です。
0297デフォルトの名無しさんNGNG
tclはだめ?
もともとはアプリケーションに組み込んで使うものだったと聞いたけど。
0298デフォルトの名無しさんNGNG
誤爆??
0299297NGNG
297は誤爆じゃないよ。tclは組み込みマクロ言語として機能するから、tclコー
ドで設定ファイル書いてもらえばいいじゃん。
0300デフォルトの名無しさんNGNG
300ゲット
















ズザー
0301デフォルトの名無しさんNGNG
もう一つ重要な事忘れてた。
日本語対応しといて欲しいです。
でもこの要求で使えそうな物がすごく限定されそうだ。
0302名無しさん@お腹いっぱい。NGNG
今どうしても解決出来ない問題に直面しており、是非皆さんのアイデアを肖りたく
投稿します。

UNIX上でShellを使用した開発をしているのですが、日本語の文字(平仮名、カタカナ、漢字)
および全角スペースの削除方法が分かりません。半角スペースや半角文字(a,b,c,etc.)等の
文字を消す場合はsed -eを使用すれば消せることは分かるのですが、どうも日本語だとうまく
作動しません。

具体的ファイル名samplefileをvi等で以下の様に書き込みします。

あいうえお   春夏秋冬

"あいうえお"と"春夏秋冬"の間には全角スペースが3つ存在しますが、これを無くしてしまいたいのです。
それと、もし可能であれば"あいうえお"と打った全角文字も、文字自体を消すか、sed等で他の文字に置き
換えたいのです。

このような行為は可能でしょうか。ご存知な方是非教えてください。よろしくお願い致します。
0303デフォルトの名無しさんNGNG
sedは日本語対応なのか、というあたりと、
その日本語の文字コードは何なんか、というあたりだな。
0304デフォルトの名無しさんNGNG
>>302
perlで各行に対しs/ //g;
0305304NGNG
ああそうか。文字コードの問題があるな。
事前にnkf -eしておくか。
0306デフォルトの名無しさんNGNG
>>302
OSの名前とバージョンくらい書けよ。
0307名無しさん@お腹いっぱい。NGNG
>>303さん
>>304さん
ご返答有難うございます。確かnkfはJISで書かれた日本語文字をEUCに変換
するものでしたよね。私の環境はSolarisで、TeraTermを使ってSolarisに入って
から、TeraTerm上で日本語入力を行っています。けしてSolaris上からではありません。

とにかく今は出先で確認が取れないので、帰宅したら実験して、結果を報告したいと思います。

もし他に何か方法をご存知の方いましたら是非教えてください。よろしくお願いします。
0308名無しさん@お腹いっぱい。NGNG
>>306さん
私の説明不足でした。環境はSolaris8(SPARC)版で、TeraTermでtelnetして、
そこから開発しています。
0309デフォルトの名無しさんNGNG
>>308
> 環境はSolaris8(SPARC)版で、

じゃあ、日本語はsedでもawkでもviでも問題なく利用できる。

$ ls -dl /usr/lib/locale/ja*
drwxr-xr-x 8 bin bin 512 Apr 20 2000 /usr/lib/locale/ja/
drwxr-xr-x 3 bin bin 512 Apr 20 2000 /usr/lib/locale/ja_JP.PCK/
drwxr-xr-x 3 bin bin 512 Apr 20 2000 /usr/lib/locale/ja_JP.UTF-8/
lrwxrwxrwx 1 root root 4 Apr 20 2000 /usr/lib/locale/ja_JP.eucJP -> ./ja/
lrwxrwxrwx 1 root root 4 Apr 20 2000 /usr/lib/locale/japanese -> ./ja/

環境変数のLANGを適当な奴に設定しな。PCKはShift_JISのこと。

ただ、sedは/usr/bin/sedじゃなくて、/usr/xpg4/bin/sedを使いな。
manのATTRIBUTESセクションのCSI(Coding System Independent)を参照。

# 環境変数はちゃんと設定出来てるんだけど、/usr/bin/sed使ってるんだろうな。
0310デフォルトの名無しさんNGNG
>307
一応補足
nkfはShiftJis、JIS、EUCを"相互に"変換できるよ。
んで、それ以外にも色々機能もある。
一度 nkf --version を見てみると良いかも。
0311名無しさん@お腹いっぱい。NGNG
>>309さん
ご説明ありがとうございます。
ですが一つ、上のls -dl /usr/lib/locale/ja*コマンドを行っている意味
が私には理解出来ません。私はTeraTem上で日本語を編集しているので、きっと
Shift−JISを利用していると思います。なので上の例だと/usr/lib/locale/ja_JP.PCK/
にあたると思うのですが、これを具体的にどのようにすればいいのでしょうか。
かなり初心者な質問で申し訳ありません。。。。。

ちなみに私の場合、LANG=jaです。whichでsedを引いたら/bin/sedになっていましたが
whereisで引くと/usr/bin/sed /usr/ucb/sedと、二つ帰ってきました。
0312デフォルトの名無しさんNGNG
>>311
TeraTermの漢字コードの設定をEUCにしよう。
[Setup]->[Terminal]

/usr/lib/locale/ja* は、いろんなコマンドで表示されるメッセージ
が入ってる。LANG=jaならEUC。

/usr/bin/sed は SystemV(Solaris2.xの標準)sed
/usr/ucb/sed は、BSD互換(Solaris1.xのときの)sed
だと思う。
0313デフォルトの名無しさんNGNG
>>311
> ですが一つ、上のls -dl /usr/lib/locale/ja*コマンドを行っている意味
> が私には理解出来ません。

なければ、packageが足りないことが分かるから、
「あなたもやってみなさい」という意味があった。

> 私はTeraTem上で日本語を編集しているので、きっと
> Shift−JISを利用していると思います。

そうとは限らない。変換して送ることができるので。

調べてみなよ。
$ echo 'あいうえお' | nkf -e | od -c
0000000 244 242 244 244 244 246 244 250 244 252 \n
$ echo 'あいうえお' | nkf -s | od -c
0000000 202 240 202 242 202 244 202 246 202 250 \n
だから、「あいうえお」って内容のファイル作成して、od -cすれば分かる。


> なので上の例だと/usr/lib/locale/ja_JP.PCK/
> にあたると思うのですが、これを具体的にどのようにすればいいのでしょうか。

LANG=ja_JP.PCK
export LANG

だな。しかし、

> ちなみに私の場合、LANG=jaです。

で、日本語が利用できていたのなら、TeraTermはeucJPに変換して送ってたんだろう。
# /usr/bin/sed「で」利用できないのは、/usr/bin/sedがCSIじゃないから。

> whichでsedを引いたら/bin/sedになっていましたが
> whereisで引くと/usr/bin/sed /usr/ucb/sedと、二つ帰ってきました。

だったら何なのよ? CSIがEnable奴を使え、と言っただろ。
/usr/xpg4/bin/sedはあるのか、ないのか?

man sedしてみなよ。ATTRIBUTEセクションのAvailabilityのところに、
/usr/xpg4/bin/sedの入っているpackage名が書いてある。

$ pkginfo パッケージ名
あるの?
0314デフォルトの名無しさんNGNG
>>312
> /usr/lib/locale/ja* は、いろんなコマンドで表示されるメッセージ
> が入ってる。LANG=jaならEUC。

locale情報全般。
他にもcoding system情報なんかが入ってる。shared libraryになって。
0315311NGNG
お返事有難うございます。

以下が私の/usr/lib/localeです。

2 lrwxrwxrwx 1 root root 3 4月 24日 23:48 POSIX -> ./C
2 drwxr-xr-x 3 root bin 512 4月 24日 23:48 common
2 drwxr-xr-x 10 root bin 512 4月 24日 23:48 en_US.UTF-8
2 -rw-r--r-- 1 root bin 270 8月 21日 1999年 geo
2 drwxr-xr-x 4 root bin 512 4月 25日 00:10 iso_8859_1
2 drwxr-xr-x 8 bin bin 512 4月 25日 01:23 ja
2 drwxr-xr-x 3 bin bin 512 4月 25日 01:22 ja_JP.PCK
2 drwxr-xr-x 3 bin bin 512 4月 25日 01:22 ja_JP.UTF-8
2 lrwxrwxrwx 1 root root 4 4月 25日 00:20 ja_JP.eucJP -> ./ja
2 lrwxrwxrwx 1 root root 4 4月 25日 01:21 japanese -> ./ja
4 -rw-r--r-- 1 root bin 1848 10月 29日 1999年 lcttab

Packagesですが、Solaris環境はFull Installを行っている上にCompanion CD
でも殆ど必要なLibraryもInstallしています。それで言われている通りに以下
のコマンドを実行してみました。

$ echo 'あいうえお' | nkf -e | od -c
0000000 244 242 244 244 244 246 244 250 244 252 \n
0000013

>> ちなみに私の場合、LANG=jaです。
>で、日本語が利用できていたのなら、TeraTermはeucJPに変換して送ってたんだろう。

確かに私のTeraTermはKanji(Receive)も(Transmit)もEUCに設定されています。
なのでTeraTermからによる日本語入力や編集は可能です。

それと私の確認ミスでしたが/usr/xpg4/bin/sedコマンドは存在していました。私が$PATH
をここに通していなかったので今まで気づきませんでした。申し訳ありません。

なのでとりあえずは環境変数LANG=ja_JP.PCK、TeraTerm上ではKanji(Receive)も(Transmit)も共にEUC、
使用するsedコマンドはusr/xpg4/bin/sedで全角スペースの削除をやってみましたがやはり
出来ませんでした。

$ sed -e "s/__*//g" samplefile

こんな感じや、これに色々と手を加えたりもしたのですがうまく行きません。上のコマンドの
__←このアンダーバーは全角スペースを2つ付けた意味です。

質問続きで申し訳ありません、もう一度何かアドバイスを頂けたら幸いです。どうかよろしく
お願いします。
0316デフォルトの名無しさんNGNG
>>315
指定しているLC_CTYPEとfileのcoding systemが合ってないずら。

> 確かに私のTeraTermはKanji(Receive)も(Transmit)もEUCに設定されています。

なら、(たぶんfileの中身もEUCに違いないので)
LANG, LC_CTYPE, LC_ALLはja, ja_JP.eucJP, japaneseのどれかだべ。
# SolarisはeucJPがdefaultなので、ja, japaneseでも可。
0317311NGNG
大変有難うございます。皆様のご教授のおかげでやっと出来ました。
ちなみに環境は以下のようにしました。
TeraTerm
漢字Receive = EUC
漢字Transmit = EUC
Solaris上
シェル = /bin/sh
環境変数LANG = ja
環境変数LC_CTYPE = ja
環境変数LC_ALL = ja

これでバッチリ全角スペースは$ sed -e "__*//g"で消えました。
ただ一つ、これだと全角スペース『だけ』しか消えなく、所々にある
半角スペースは消えないので、パイプを使って全角スペースを消
した結果をsed -e"__*//g"(__の部分は半角スペース2個)に投げて、
クリアさせました。とりあえず結果として期待通りの物になったの
ですごく満足してます。アドバイスして頂いた皆様、本当に感謝します。

それで図々しいですが、もう一つ質問させてください。
今私の行おうとしているプログラムで、どうしても日本語文字(漢字、
平仮名、カタカナ等)をデーターのファイルから削除する必要があります。
$ cat data

1234あいうえお5678
1234カキク5678
1234東西南北5678

この様に前後の数字の間に存在する日本語文字は漢字、平仮名、カタカナ、
文字の数、全てがランダムな状態なのでsedコマンドで削除したい部分を
ピンポイントで指定して消す方法がとれません。
上のようなデーターファイルで結果を12345678とするには、何か方法が
あるのでしょうか。再度質問し申し訳ありませんが、どうか皆様アドバ
イスをください。
0318デフォルトの名無しさんNGNG
>>317
nkf -e data | tr -d '\200-\377'
0319デフォルトの名無しさんNGNG
>>317
$ echo 'abcdefg十とか能とかvwxyz' | nkf -e | LC_CTYPE=ja /usr/xpg4/bin/tr -d '[:jisx0208:]'
abcdefgvwxyz

man trと/usr/lib/localedef/src/ja/localedef.srcを参照。

http://docs.sun.com/ab2/coll.651.1/SOLASNSUPPT/@Ab2PageView/354?Ab2Lang=C&Ab2Enc=iso-8859-1
あたりを読んどいた方がいいかもね。
0320デフォルトの名無しさんNGNG
シグナルハンドラからC++ exceptionをthrowできませんか?
0321デフォルトの名無しさんNGNG
試してみろ
0322320NGNG
unexpected() にたどりついて氏んだよ on debian woody, Linux-2.4
0323デフォルトの名無しさんNGNG
じゃあ駄目ってことだな
0324320NGNG
そもそもシグナルハンドラのコンテキストと
gccにおける例外の実装を知らないんでなんとも言えない
んだが、なんとなくできなさそうな気がしててやっぱりできなかった

というわけで次の質問
「シグナルを捕らえて例外として投げるいい方法はないか?」

回答の予想
「longjmp()でも使っとけ」
0325デフォルトの名無しさんNGNG
>>324
例外出すのは良いとしてどこでtryしてcatchするの?別スレッドで無限ループ?
0326320NGNG
やりたかったのは
tcpのread(2)とかでSIGPIPEを処理すること
だったのね

レガシーにlongjmp()でwrapper書くか
0327デフォルトの名無しさんNGNG
XtoolkitでXIMを使いたいんですが、
イベントのプロシャージャでXmbLookupString()を使っても日本語が入ってきません。
それどころかkeysymまで入ってきません。
どうやったらIMが使えますか?
0328デフォルトの名無しさんNGNG
XOpenIM, XCloseIM, XSetIMValues, XGetIMValues, XDisplayOfIM, XLocaleOfIM,
XRegisterIMInstantiateCallback, XUnregisterIMInstantiateCallback

XOpenIM から調べよう。
0329デフォルトの名無しさんNGNG
レスありがとうございます。XOpenIMなどはすでに行っており、IM/ICの設定はできています。
Xtのイベントプロシャージャを使わずに、ただのイベントループ内で
キーを取得すると、ちゃんと日本語が入ってきます。
たぶんXtが中でIMをいじってるためだと思うのですが・・
0330デフォルトの名無しさんNGNG
キー入力があったらXtに渡さず即座に呼んでくれるようなコールバック関数が使えれば
問題は解決すると思うのですが、そういうのありませんかね。
0331デフォルトの名無しさんNGNG
みなさんAPI集のようなものはどこで手に入れましたか?
MSDNのようなまとまったものがあるなら知りたいです。
0332デフォルトの名無しさんNGNG
MSDNはAPI集ではないと思われ・・・
0333デフォルトの名無しさんNGNG
式MSDN=APIが成り立つとき、
MS=OS及びNHK=2chが成り立つ。
0334デフォルトの名無しさんNGNG
>NHK=2ch
NHK=日本引きこもり協会?
0335デフォルトの名無しさんNGNG
>334
関西だよ
0336デフォルトの名無しさん NGNG
課題です。

商品区分コード 商品コード 単価 販売個数 商品名

で、それぞれ数字が並んでいるんだけど、第4の項目で整列ってのは販売個数で整列って考えてもいいですか?
0337デフォルトの名無しさんNGNG
課題の意味が判らない場合は教官に聞く。
0338名無しさん@お腹いっぱい。NGNG
マジで困ってます。

lsとgrepを組み合わせて、実行可能なファイルを出力するコマンドを別名で定義する。

ls -F|grep '*$'
こんな感じでやったのですが、これをaliasを使って別名で定義することができません。
どうやったらできるのですか?
0339デフォルトの名無しさんNGNG
alias rf="ls -F|grep '*$'"

UNIXプログラミングと何の関係もないだろがボケがぁ
0340名無しさん@お腹いっぱい。NGNG
>>339

どうもありがとうございました。
ボケでいいので、もう一回だけ誰かお願いします。


dataコマンドを使うと日付時刻が出力される。
時刻だけを出力する、別名hmsを定義しなさい。

どうやって時刻だけを出力するのでしょうか?


0341デフォルトの名無しさんNGNG
zsh: command not found: data
だが何か?

man date して首吊って氏ね!
0342デフォルトの名無しさんNGNG
>>341
優しいな、君。相手してあげるなんて。
0343デフォルトの名無しさんNGNG
Win32ベースのCとC++で書かれたソースをSolarisに移植すれ!と指示され
その違い(影響部分)をWebで調べているんですが、検索方法がまずいせいか
思った結果が得られません。
C標準関数やMFC単位で、これはそのままでOK、これは作り直しなどと判定できる
ネタを親切に乗っけてるサイトを知ってる方、教えて頂けないでしょうか?
0344343NGNG
ageてしまいました、ゴメンナサイ
0345デフォルトの名無しさんNGNG
>>343
これまた無謀な。Win32依存部分(MFC含)は何もいわずに書き直せ。
0346343NGNG
>>345
ANSI規格に則った関数については問題無いのでしょうか?
0347デフォルトの名無しさんNGNG
現在、Jedを使用しています
そこでS-Langの勉強をしようと思うのですが、なかなか良いサイトが見つかりません
だなたか良い勉強サイトがあれば、ご教授願えませんでしょうか?

#S-Langでnavi2chもどきや、muttもどきをつくったら需要はあるんだろうか…?
#マルチポストで申し訳ない…

0348デフォルトの名無しさんNGNG
>>246
それは大丈夫じゃないの?コンパイラによって微妙に違うけど。
0349343NGNG
>>345
>>348
回答ありがとう。
とりあえず調査結果を報告してこの件は一旦クローズと相成りました。
この話が再燃しないことを祈りつつ名無しにもどりまする。
0350初心者NGNG
文字列tを入力し、その文字列をsに複写する関数を作り
プログラムを実行しなさい。for文を使いなさい。ポインタを
使いなさい。関数void strcopy(????){/* */}を用いなさい

unix初心者で全くわかりません。どなたか教えていただけないでしょうか?
0351デフォルトの名無しさんNGNG
>>350
C言語初心者といえ。UNIX初心者に失礼だ。
後、すれ違い。
0352デフォルトの名無しさんNGNG
>>350

void strcopy(const char *dest, char *src)
{
    strcpy(dest, src);
    for (;0;);
}
0353352NGNG
destination側がconstになってるし(鬱
0354デフォルトの名無しさんNGNG
>>353
それよか謎の0回ループについて説明求む。
0355デフォルトの名無しさんNGNG
>for文を使いなさい
とあるからでは?
(;0;) ←これって顔文字に見える。
0356350NGNG
皆さんご迷惑をおかけいたしました。申し訳ありません
0357デフォルトの名無しさんNGNG
内容のないレスで無駄に上げるのも超迷惑です
0358木村 キタキタマシーンNGNG
>>355
ワラタ(;o;)
0359デフォルトの名無しさんNGNG
solarisで
ページキャッシュのフラッシュ
パーティションのリード
は、どのようにやるのでしょうか

linuxでは
ioctl( fd, BLKFLSBUF, NULL )
read partition
ioctl( fd, BLKRRPART, NULL )
を使えば良いことはわかったのですが
solarisでは、定義されているヘッダを探しきれませんでした
0360デフォルトの名無しさんNGNG
http://lgdc.sunsite.dk/articles/19.html
linuxでここのプログラムを参考にジョイスティックを使おうと
しているんですけど,
"/dev/js0"が開くことが出来ません。
もしかしたら、ルートでないとコンパイル開く事が出来ないのですか?
日頃winでしかプログラムしたことがないのでよく分かりません。
教えてくださいお願いします。
0361デフォルトの名無しさんNGNG
>>360 ルートでないとコンパイル開く事が
すいません。コンパイルは出来ます。開くことが出来ません。
0362デフォルトの名無しさんNGNG
>>360
/dev/js0 のパーミションは、どうなってるの? とりあえず

% ls -l /dev/js0

してみ。
0363デフォルトの名無しさんNGNG
>>362
ありがとうございます。パーミッションを変更すれば出来るんですね。
研究室でないと試すことが出来ないので、
今度試してみます。

0364デフォルトの名無しさんNGNG
C言語でグラフィックを描くプログラムを勉強したい
んですが、どこかわかりやすいHPありませんか?
教えてください。
0365デフォルトの名無しさんNGNG
>>364
UNIX上で?
命がけ。
X Window SystemってWindowsプログラムと結構似てるからお勧め。
0366デフォルトの名無しさんNGNG
Windowsの10倍はめんどくさくね?
0367デフォルトの名無しさんNGNG
>>366
俺が1cmの入門書読んだ限りでは「こんなもんか」と。
Gtkとかになってくると知らん。
0368363NGNG
教えてもらったコマンドを実行したんですけど、
以下のようになりました。

lrwxrwxrwx 1 root root 9 4月 28 2001 /dev/js0 -> input/js0
crw------- 1 root 3月 24 2001 /dev/input/js0

パーミッションを全て許可にしても開くことが出来ないんですけど
どうすればいいですか?
0369デフォルトの名無しさんNGNG
リンク先のファイルのパーミッションも変えてくれよ。
つーか、UNIXについて勉強してくれよ。
0370363NGNG
>>369 リンク先のファイルのパーミッションも変えてくれよ。
crwxrwxrwx 1 root 3月 24 2001 /dev/input/js0
こうすればいいわけですよね。

368 のは許可する前です。
368で言ってるようにパーミッションは全て許可にしたんですけど、
それでもうまくいきません。
だから、困ってるんですけど。
0371名無資産@ヘタレ部NGNG
>>370
カーネルがjs扱えるように構成されてなかったりして
dmesg で、カーネルの具合を眺めてみよう
0372363NGNG
>>371
ありがとうございます。
まだ、カーネルとかを良く知らないので少し勉強して来ます。
0373デフォルトの名無しさんNGNG
UNIXの場合、アドレス指定で直接ポートを叩くのと/dev以下にぶら下がっているデバイスをファイルとして扱うのとではどちらが王道ですか?

ポート直接叩きのプログラムをよく見るので。
0374デフォルトの名無しさんNGNG
>>370
> それでもうまくいきません。
open() 失敗時のエラーコードは何?
0375名無しさん@カラアゲうまうまNGNG
>>373
デバイスファイル。

> ポート直接叩きのプログラムをよく見るので。
見るか?
0376デフォルトの名無しさんNGNG
>>375
ええ、結構。RT-Linuxのサンプルとか・・・って当たり前じゃん!
失礼しました。

そのままfopenとかすればシリアルポートのMIDIならしたりとか出来るようになると考えていいんですね?
0377名無しさん@カラアゲうまうまNGNG
>>376
いい。MIDIのプロトコルは知らんのでこっちとかで聞いてみ。
MIDIシーケンサー誰か作れる?
http://pc.2ch.net/tech/1005053427
0378デフォルトの名無しさんNGNG
>>377
どうもです。試行錯誤してみます。
0379名無しさん@カラアゲうまうまNGNG
すまん、ミスった。
http://pc.2ch.net/test/read.cgi/tech/1005053427
0380デフォルトの名無しさんNGNG
>>376
MIDIメッセージをそのまま垂れ流せば音鳴らせる。
ポート切り替えとかも専用メッセージがあったはず。
0381デフォルトの名無しさんNGNG
>>380
MIDIメッセージはWindowsの方で少し勉強しました。
おもしろそうなので基礎研究と称して研究室で遊ぶことにしますw
0382デフォルトの名無しさんNGNG
core ファイルを解析したいんですが
フォーマット資料を探してもなかなか見つかりません
よい文献きぼん
(ヘッダファイルのどこどこを見ろでも構いません)

最初にプロセス資源が書かれてて
+4096以降にユーザ空間のイメージが書き出されてるみたいにも
見えるんだけど…
0383382NGNG
$ objdump -x -s core
で謎が解けました、自己解決です。
asm/user.h にもちょっとしたヒントが書いてありました。
0384364NGNG
>365 X Window SystemってWindowsプログラムと結構似てるからお勧め。
ではX Window System上のプログラミングについてのわかりやすいHP
などありましたら、教えてください。
本も探しているのですがなかなか見つからなくて・・・

0385デフォルトの名無しさんNGNG
つか、ふつー、GTKとかQTとかつかうっしょ。
いまどきXLIB生は……
0386デフォルトの名無しさんNGNG
>>384
ちみの言う「graphics」って何か言ってみそ
どんなことしたいと思ってるの?

http://sal.linet.gr.jp/F/3/index.shtml
http://sal.linet.gr.jp/F/4/index.shtml
http://sal.linet.gr.jp/F/5/index.shtml

ちみのやりたいことは、こん中にあるのかな〜。
0387デフォルトの名無しさんNGNG
Linuxでグラフィックプログラミングするなら、Java2あたりが手軽
かも....。XやGTKだとハマりまくる「任意の色形式のフレームバッファ」
が簡単に使える(BufferedImage)からね。
0388名無しさん@カラアゲうまうまNGNG
Java糞重い
0389デフォルトの名無しさんNGNG
>>386
グラフィック関係のライブラリってこんなにあるんだ。
ちょっと感動。
0390デフォルトの名無しさんNGNG
質問です。自分自身の実行ファイルのパスを知る方法ってありますか?
argv[0]というのはシェルから渡されるパラメータに過ぎないですよね。
削除されてもinodeは生きてると思うんですが・・・
0391名無しさん@カラアゲうまうまNGNG
システムによる。
たとえばprocファイルシステムを有効にしてあるLinuxなら、
/proc/self/exeをreadlink()すれば分かる。
0392デフォルトの名無しさんNGNG
SDLでは駄目かね?
0393384NGNG
>386
初心者なもんで下記に書いていただいたHPの内容がわからないです(汗)
実は友達から貰ったプログラムがあって、おもしろそうだから
やってみたくなったんです。
ちょっとのっけます。こんな感じのをやってみたいです。
#include "define.h"
#include "struct.h"
#include "variable.h"
/* Function Prototype */
int main(int argc, char *argv[]);
void quit_action();
void win_size(unsigned viswid, unsigned vishei, unsigned rwid, unsigned rhei,
unsigned *wwid, unsigned *whei);
/* Resource value, Translation table */
static String fallback_resources[] =
{
"*viewport.allowHoriz: True", /* 水平方向のスクロールバー */
"*viewport.allowVert: True", /* 垂直方向のスクロールバー */
"*viewport.useBottom: True", /* 下側のスクロールバーを付ける */
"*canvas.borderWidth: 1",
/* Quit (command) */
"*quitcmd.fromHoriz: viewport", /* Quit ボタン */
"*quitcmd.label: Quit", /* ボタンのラベル */
"*quitcmd.borderWidth: 2",
NULL,
};
長い文、はっきりとしない回答で申し訳ありません。
どこか詳しいHPありましたらお願いします。
0394デフォルトの名無しさんNGNG
>>393
寝ろ。C言語の参考書でも抱いて。
0395デフォルトの名無しさんNGNG
>>390
> 削除されてもinodeは生きてると思うんですが・・・

inode が生きてても全部のディレクトリから unlink さらたらパスは存在しないでしょ。
0396363NGNG
>>374 open() 失敗時のエラーコードは何?
-1です

0397デフォルトの名無しさんNGNG
>>396
おいおい……。open と errno の man page 読んでくれ。
0398名無しさん@カラアゲうまうまNGNG
パーミッションは 660(実行権もいるかも?) でよくて、
chgrp でファイルのグループ所有権を変更すればよいのでは
ないかと想像でいってみるテスト。
さらに、ユーザーに使用権を与えるために /etc/group を
書き換えればいいかもしれないと言い足してみる。
0399363NGNG
>> 397,398
すいません。errno のこと知りませんでした。
親切に教えてくれて感謝です。
結果は 19
perror の結果は
「No Such Device」でした。

というか、カーネルとかに関して詳しくないので断定することは
できないのですが、371で指摘された「カーネルがjsで使えるように
構成されてない」というのが怪しいです。

UNIXには慣れていないので苦戦していますが、
現在試しているところです。
0400デフォルトの名無しさんNGNG
ありがとうございます。

>>391
そういえばそういうものがありましたね!とりあえずはこれを辿るか・・・

>>395
たしかにunlinkしたら実体(inode)はあってもパスは無くなりますね

fork&execで自分自身をもう一度execしようと思ったのです。
引き継ぐ情報は引数で渡せる量です。forkだけだとリソースが残って
しまうので、execでclean upしてしまおうという目論見です。
ところが自分自身のパスが分らない、というかもはや存在しないかも
しれないんですね。ううむコマッタ。
0401デフォルトの名無しさんNGNG
>>393
C++勉強して、Qtかgtk--やれ。
どうしてもCがいいなら、Xawやってへそ噛んで死ね。
0402デフォルトの名無しさんNGNG
どーしても C というなら Motif という手も……。
0403デフォルトの名無しさんNGNG
>>fork&execで自分自身をもう一度execしようと思ったのです。

argv[0] を起動直後のカレントディレクトリからの
相対パスとして扱えば十分だと思う。

実行中に自分を unlink するなんて、普通は無しでしょ?
/proc を使うにしても、シンボリックリンクとして見えるはずだから
もと消しちゃったらダメなんじゃ?
0404名無しさん@カラアゲうまうまNGNG
できるよ。

/* suicide.c */
#include <stdio.h>
#include <unistd.h>
#include <sys/param.h>

#define SELF_EXE "/proc/self/exe"

int main(int argc, char** argv)
{
  char self[MAXPATHLEN];
  int n = readlink(SELF_EXE, self, sizeof self);
  if (n < 0) {
    perror("readlink");
    return 1;
  }
  self[n] = 0;
  printf("%s = %s\n", argv[0], self);
  if (unlink(argv[0])) {
    perror(argv[0]);
  }
  else {
    execv(SELF_EXE, argv);
  }
  return 0;
}

$ make suicide
cc suicide.c -o suicide
$ ./suicide
./suicide = /tmp/suicide
./suicide = /tmp/suicide (deleted)
./suicide: No such file or directory
0405デフォルトの名無しさんNGNG
403 は可能・不可能の話はしてないと思われ。
0406名無しさん@カラアゲうまうまNGNG
/proc/$PID/exeとか/proc/$PID/fd/*は普通のsymlinkじゃないから、
元のファイルを削除してもアクセスもexecもできる。
ということをいってるんですが、>>403を読んでますか?
0407デフォルトの名無しさんNGNG
ホームディレクトリのパスとかユーザー名とかを調べる関数が
あったと思うんだけど、どっかに一覧表があるところ無い?
0408デフォルトの名無しさんNGNG
>>407
man intro とか /usr/share/man/man2 とかか? たぶん探しているのは
getpwent() とか getpwnam() だと思うが。
0409デフォルトの名無しさんNGNG
> /proc/$PID/exeとか/proc/$PID/fd/*は普通のsymlinkじゃないから、
> 元のファイルを削除してもアクセスもexecもできる。

なるほど〜、こりゃすごいですね・・・
実行ファイルを作って、実行し、即削除すればウイルスとしてバレにくい?
0410403NGNG
>>404
おお、できるんですね。知らなかったです。
(Linuxも /proc もよく知らない(^^;)

でもわざわざそんなことまでして Linux 依存にするメリットはないですよね。
0411デフォルトの名無しさんNGNG
Linuxのgccのmallocって必ず0 fillされてません?
このあたりの実装ってコンパイラのバージョンに
よってかわってきたりしますか?
0412デフォルトの名無しさんNGNG
>>411
まぁ、それを期待しちゃいけないって凝った。
0413名無しさん@カラアゲうまうまNGNG
>>411
されてません。
たぶん新たに割り当てられたページが0 fillされてるのと混同してると思われ。
0414デフォルトの名無しさんNGNG
>>413
でないと、calloc() の立つ瀬がないもんね。
0415デフォルトの名無しさんNGNG
こんど初めてUnixのプログラムをすることになりそうなので
そのプロトタイプづくりをMacOSX上でやろうかと考えています.
#詳しい話を聞いていないのでターゲットOSはまだ分からないのですが、
#漠然とWindows+CygwinよりはMacOSXの方が楽そうとおもって選びました

今のとこ「詳細UnixProgramming」のコードで様子をみてるんですが
なんか注意点とかありますか?
0416デフォルトの名無しさんNGNG
>>415
ネイティブで組みましょう
0417名無しさんNGNG
ソケットプログラムの切断処理なんですが、
クライアント側から20000bytesのデータを
送って切断するときに
write(fd, buf, 20000);
shutdown(fd, 2);
close(fd);
exit(0);
というようにコールしているのですが、
これだとwriteしたデータを送出しきらないうちに、
クローズされてしまうことはないのでしょうか?
0418デフォルトの名無しさんNGNG
スレ違い。
http://pc.2ch.net/test/read.cgi/tech/1023359282/l50
0419デフォルトの名無しさんNGNG
>>410
>でもわざわざそんなことまでして Linux 依存にするメリットはないですよね。

いえ、実現できるなら依存しようが構いません。
unix標準(?)の方法があるなら、それにしようと思ったまでです。
0420デフォルトの名無しさんNGNG
>>417
同期非同期
0421名無しさんNGNG
>>418
ごめんなさい。
UNIXで考えていたものでここでも良いかと。

>>420
同期非同期とは、fcntl()のNONBLOCKINGの
ことでしょうか。
それから、write()の返り値が20000になっていれば、
同期、非同期モードに関係なくclose()
して大丈夫なのでしょうか。
0422デフォルトの名無しさんNGNG
>>421
> UNIXで考えていたものでここでも良いかと。

良くない。とっとと逝け勘違い小僧。
0423デフォルトの名無しさんNGNG
スレさえまともに選べない奴に、プログラムが書けるとは思えない
0424デフォルトの名無しさんNGNG
>>422,>>423
まぁまぁ、そんなきつくあたるなよ
0425デフォルトの名無しさんNGNG
いろいろと調べたのですが,日本語を扱う際の処理方法が分かりません.
具体的には,ファイルから1文字ずつ読み込んで,それに改行コードを加
えて別のファイルに書き出したいのです.
取り敢えず,こんなプログラムを考えてみました
-------------------------------------------
for(;;)
{
ch = fgetc(fp1);
if(ch == EOF)
{
break;
}
fprintf(fp2, "%c\n", ch)
}
--------------------------------------------
といった感じです.
ここで,変数chをどのような型で宣言すれば巧くいきますでしょうか?
また,このプログラムに根本的な誤りがあるのでしょうか?

お願いいたします.
0426デフォルトの名無しさんNGNG
>>425
文字コード書いてないので2バイトコードの変則的な扱い方。

char a[2];

a[0] = fgetc(fp1);
a[1] = fgetc(fp1);

fprintf(fp2, "%s\n", ch)
0427名無しさん@カラアゲうまうまNGNG
で、NUL terminateされてないchar*を渡してSEGVと。
0428デフォルトの名無しさんNGNG
>>427
書いててなんか違和感あったんだよなぁ・・・w
0429名無しさん@カラアゲうまうまNGNG
>>425
fgetc()の戻り値はint。
0430425 NGNG
>>426
あ,すいません
文字コードはEUCの筈です

>>429
だから,int chで宣言するんですね!
1つ賢くなりました
0431デフォルトの名無しさんNGNG
>>430
> だから,int chで宣言するんですね!

違う。EOFがあるから。
0432デフォルトの名無しさんNGNG
EOF \x1a
0433名無資産@ヘタレ部NGNG
EOF 0x1Aなんていう寝言が聞こえるが…???
ちなみにたいていのUnix libc実装では-1のような。

>>425
マジレス
EUCに限らず、たいていの日本語コードには状態がつく
ので、1バイト単位では文字として独立していないと考えれ

単純に済ませるのなら、
if (ch >= 0x80)
{
int c2 = getc(fp1);
if (c2 != EOF)
ch = (ch << 8) | c2;
}
かのう。EUCは2バイトとは限らないので上記コードは鵜呑みにするな

UCS-2(2バイトユニコード)は、状態がないのでやや扱いやすい。
UCS-2に変換するのは面倒っちいけどな。
0434名無しさん@カラアゲうまうまNGNG
>>433
> UCS-2(2バイトユニコード)は、状態がないのでやや扱いやすい。
UCS-2とUTF-16の区別のつかない奴にサロゲート喰わされて落ちる罠。
0435425 NGNG
すいません,レスを読んでいて自分の無知が恥ずかしくなりました...
どうやらC言語で私のやりたいことをする為には,スキル不足のようです

私が今やろうとしているのは,平仮名の頻出度調査です.
kakasiを使って平仮名だけにした文章をsort,uniqしたいんです
しかし,そのままではsort出来ないので1文字ずつ改行を入れようと
思いました.
何か良い代替手段はありませんでしょうか?
0436デフォルトの名無しさんNGNG
>>435
まず、ひらがなを半角文字で表現(エディタの置換機能などで)。
それの頻度を取る。
結果は置換した半角文字に対応したひらがなとともに出せばいい。

0437デフォルトの名無しさんNGNG
vmwareを作りたいのですが、どうやればいいんでしょうか?
0438デフォルトの名無しさんNGNG
>>437
UNIXのシステムコール全部Widows新居食。
0439通りすがりのキティNGNG
だれかdonutPみたいなの作って。マウスでコマンド入力できるやつ。
お前が作れとは言わないで。作れないし。
0440デフォルトの名無しさんNGNG
>>438
それは Cygwin だろ。UNIX つーか POSIX だが。

>>437
VMWARE は仮想 AT コンパチマシンを作ってる。
Bochs というオープンソースのものがあるので、
関連資料とソースを読むといい。
0441名無しさん@カラアゲうまうまNGNG
plex86というのもあったような。
0442デフォルトの名無しさんNGNG
>>439
マウスでコマンド入力ってなによ?
マウスジェスチャーのこと?

http://optimoz.mozdev.org/gestures/
こんなの?
0443435NGNG
>>436

なるほど!!
こんな簡単な事に気づかなかった俺って...

ありがとう!
0444通りすがりのキティNGNG
>>442 そうです。
0445デフォルトの名無しさんNGNG
galeonにすでに実装されてますた。
0446デフォルトの名無しさんNGNG
>>436
あいうえお数えるの大変でない? kaとa。
ローマ字にこだわらなきゃいいのかな

私ならperlかなにかで1文字を1文字+改行に置き換えて
sortしてuniqすると思うけど、でもそれじゃプログラム板っぽくないね。
0447デフォルトの名無しさんNGNG
こんなんで。
$ruby -Ks freqj.rb hiragana.txt
require 'jcode'
freq = Hash.new(0)
while line = ARGF.gets
line.each_char{|char| freq[char] += 1}
end
freq.keys.sort!.each do |char|
print char, " -- ", freq[char], "\n"
end
0448ピルゲイツNGNG
Motifの良い参考書って無いですか?
本屋巡ってもQtとかGTKの参考書しか無いし・・・
0449デフォルトの名無しさんNGNG
>>446
unixな人たちは気づきにくいかもしれませんが
ハンカクカナというものがあるのです。

あとはアルファベット出現頻度プログラムをどっからか頂いてきて...
数行なんで作ったほうが早いかな?
0450名無しNGNG

UNIXか、プログラム板かの過去ログで見たんですが、
所在がわからなくなってしまったので質問させてください。

csh で sh の read みたいなことをするには
どうしたらいいですか?
0451デフォルトの名無しさんNGNG
>>450
set a=`cat < /dev/tty`

ctrl+d が必要ですが
0452名無しNGNG

>450
さんくす
0453名無しさん@カラアゲうまうまNGNG
>>450
set a=$<
0454デフォルトの名無しさんNGNG
gtkとかいくつかあるようだけど、
LinuxでGUIやるなら何がいいですか。
GUIイランというのはなしでお願いします。
0455デフォルトの名無しさんNGNG
Kylix
0456shigeNGNG
>>454
何が書きたい?
0457デフォルトの名無しさんNGNG
Qt
0458デフォルトの名無しさんNGNG
Xlib
0459デフォルトの名無しさんNGNG
LinuxでMIDI関係のソフト開発しようとしています。
それで、Linuxで秒未満の時間管理をする方法を調べています。
Windows APIのtimeGetTime()相当の機能が欲しいのです。

また、msオーダーでインターバルタイマを発生させる方法はありますか?
(もし、無ければポーリングでやるしかないですが)
0460 NGNG
>>459
gettimeofday(2), clock(3), setitimer(2)
0461459NGNG
>>460
どうもありがとう。
0462デフォルトの名無しさんNGNG
WindowManagerの開発に付いて解説している書籍、ヴェブサイトなどをご存じ無いでしょうか?
twnなどのソースを参照するのもいいのですが、概略を掴んでおきたいので。
0463デフォルトの名無しさんNGNG
厨質デス
System V IPC メッセージキューについてです
/*サーバ側*/
struct msgbuff {
mtype:
mtext;
}b; /*構造体テキトー*/

msgget ( msgid,............... ) /*キューゲト*/

msgrcv ( msgid,...b.mtext...... ) /*レシーブ*/
fprintf ( fp, %s, b.mtext ) /*ファイルニカキコ*/
         :
         :
この後にクライアソトに成功・失敗を伝えたいんすけど
再度b.mtextって使用可能なんすかね?
b.mtext使用してクライアソトに伝えようと思ったんすけど・・・
なんか他に(・∀・)イイ方法あるなら教えてください。

厨なんで質問の意図わかりにくいかとは思いますが
何卒オナガイシマス
0464名無しさん@カラアゲうまうまNGNG
>>463
基本的にキューってのは一方通行。

> 再度b.mtextって使用可能なんすかね?
> b.mtext使用してクライアソトに伝えようと思ったんすけど・・・

使用可能は可能だけど、サーバ側で書き換えたからってクライアント側には何
の関係もない。

共有メモリにするとか、クライアント側でもメッセージキューを作ってそのID
を一緒に送るとか、あるいはソケットにするとか。
0465デフォルトの名無しさんNGNG
今思ったんだが、b.mtextってFILE *型なのでは?
プロセスごとにファイルデスクリプタは違うわけだから
オープンしたファイルハンドルを渡しても無意味かと。
渡すならファイル名を渡すべき。
0466名無しさん@カラアゲうまうまNGNG
>>465
> 今思ったんだが、b.mtextってFILE *型なのでは?
なんで?

> プロセスごとにファイルデスクリプタは違うわけだから
> オープンしたファイルハンドルを渡しても無意味かと。
つーかその前にポインタが違うだろ。
0467465NGNG
>>466
FILE型のことは見間違いっす。無視して。

>>つーかその前にポインタが違うだろ。
ということはメッセージキューを使った場合、文字列は送れないのですか?
0468465NGNG
あ、char型配列にすればいいのか。
スマソ。
0469名無しさん@カラアゲうまうまNGNG
>>465
marshalingについて調べてみ。
0470463NGNG
みなさんありがとうございます。

なんとか問題解決しました。

memsetで消しちまえばよかったんす。

>>467
strcpy (b.mtext,"(゚∀゚)アヒャ");
msgsnd ( id ,.................. )
で文字列送れますよ。
0471名無しさん@カラアゲうまうまNGNG
>>470
> memsetで消しちまえばよかったんす。
これでどう解決したのか小一時間(略)。
0472デフォルトの名無しさんNGNG
age
age
0473デフォルトの名無しさんNGNG
コマンドfooをroot権限で実行するスクリプトを書いたのですが
#!/bin/sh
su
./foo
ではうまくいきません(suでコマンド入力待ちになってしまう)。
どうやればいいのでしょうか?
0474デフォルトの名無しさんNGNG
>473

SUする時に、-Cにてfooを実行するシェルを指定すればよい。

su root -c "/aho/baka.csh" てなかんじでね。
0475非462NGNG
>>462にレスつかないなぁ…。
俺も興味あるんだけど。
0476デフォルトの名無しさんNGNG
> 473
sudo つかえば?

> 462
X-Window プログラミング とかいう本が大昔にありませんでしたか。
0477デフォルトの名無しさんNGNG
fooにsetuidしたら?
0478デフォルトの名無しさんNGNG
同じプログラムを、1つのファイルにまとめて全部ソースコード書いた
ときと、ヘッダーファイル使って複数のファイルに分けて分割コンパイル
したときと比べたら、1つのファイルにまとめた方の実行ファイル(a.out)
のサイズが小さいのです。分割して実行ファイルのサイズが増える原因
は何が考えられますかね?よろしくお願いします。
0479.NGNG
どなたか UNIX で東風荘(ネットワーク麻雀ゲーム)のクライアントを
作って下さいませんかのう... (windowsエミュレータ ってのはなしで)
0480デフォルトの名無しさんNGNG
須藤
0481名無しさん@カラアゲうまうまNGNG
>>478
同じ文字列リテラルが(#defineなどで)各オブジェクトファイルにできてるとか。
シンボルテーブルとかが分割されてヘッダ分大きくなってるとか(システム次第)。
0482478NGNG
>>481
ヘッダーで
#ifndef UTIL
#define UTIL
.(#define MAX 100とか、関数、クラス、
. グローバル変数(const)の宣言)
#endif
みたいにしてるんですが、これだけじゃダメなのデスカ?
シンボルテーブルについては知らないので調べてみます。
0483名無しさん@カラアゲうまうまNGNG
>>482
それはいわゆるインクルードガードというやつで、この話には無関係。

> .(#define MAX 100とか、関数、クラス、
#define HOGE "hogehoge"なんてのがないか?つーことだ。
0484デフォルトの名無しさんNGNG
>>479
プロトコル非公開の営利サービスのクライアントのクローンを作るんですか
そんな危険なことするよりフリー(ソース公開)の同種ソフトの支援でもしたほうがいいんとちゃいますか
0485デフォルトの名無しさんNGNG
あるデバイスが接続されているか調べるときには、それが接続されているかも
しれないデバイスファイルを open して、返り値を見るのが順当なんでしょうか。

というのも、今 Linux 上で V4L を用いてキャプチャカードからの動画像の
取り込みのプログラミングをしているのですが、現在何枚のキャプチャカードが
接続されているか調べるのに上記の方法を使っていて、もう少しスマートに
できんかな、と思ったもので。
0486デフォルトの名無しさんNGNG
>>485
ルーク、/procを使え
0487デフォルトの名無しさんNGNG
自分のIPアドレスを調べるコマンドはないですか?
0488デフォルトの名無しさんNGNG
ifconfig
0489485NGNG
>>486
Thanks!
/proc/video 下に接続されたデバイスについての情報が書いてある
ファイルが存在していました。

ちなみに /proc 以下を漁るのに役に立ちそうな文章があったので
貼っつけておきます(単に kernel 付属文章の日本語訳ですが(w)
ttp://www.linux.or.jp/JF/JFdocs/kernel-docs-2.2/proc.txt.html
0490デフォルトの名無しさんNGNG
Linuxで2chブラウザがあまり無いのは、やはりWINDOWSと比べると作るのが難しいからなのでしょうか?
Delphiで書かれてる物とかもあるので、素人目では簡単にできるのでは?とか思ってしまうのですが…
navi2chはちょっと使いづらいなぁと思っているので…
0491shigeNGNG
んなこたぁない。
もともと人口が少ないのと、navi2chで満足な人間が多いだけだろ。
0492デフォルトの名無しさんNGNG
Kylixフリー版で2chブラウザ作って英雄になろう!
0493Rina ◆tI333vNE NGNG
>>490
navi2chに不満があるなら作者や関連スレに, どこがどう気に入らないのか
文句をいうって手がある. フリーなんだから開発者にフィードバックしなきゃ駄目だよ.

私もnavi2ch使ってるけど, 別に不便は感じない. 機能的には
問題ないしキーバインドが気に入らないならカスタマイズすればいいし.
0494デフォルトの名無しさんNGNG
fortranからcの関数を呼ぶにはどうしたらいいのですか?
0495デフォルトの名無しさんNGNG
>>494
gcc で C に落としてから、存分に呼んで下さい
0496デフォルトの名無しさんNGNG
>>495
f2cだろ
0497デフォルトの名無しさんNGNG
>>496
gcc = GNU Compiler Collection だから、その中の g77 を使えってことだろう。
その意味では>>495は間違ってはいないのかも。
でも>>496の方がえらい。
0498デフォルトの名無しさんNGNG
>>494
Fortran compilerはどこの奴使ってるか書かないと…
0499デフォルトの名無しさんNGNG
C/C++で、カレントディレクトリをフルパスで取得することって出来ますか?
WinのGetCurrentDirectoryみたいな関数が欲しいんですけど。
dirent?
0500デフォルトの名無しさんNGNG
>>499
system( "pwd");
0501デフォルトの名無しさんNGNG
getcwd
0502デフォルトの名無しさんNGNG
>500&501
thanx!
getcwdの方を使おうと思います。
0503デフォルトの名無しさんNGNG
fork()で起動した子プロセスは、親プロセスのリソースのコピーを引き継ぐと
思っていたのは間違いですか?
子プロセス起動前にmalloc()で獲得していたメモリやfopen()していたファイルを、
子プロセス側で終了時にfree()やfclose()する必要はないのですか?

上司に「そんなことをしてはいけない」と言われました。
0504デフォルトの名無しさんNGNG
>>503
> fork()で起動した子プロセスは、親プロセスのリソースのコピーを引き継ぐと
> 思っていたのは間違いですか?
あってる。

> 子プロセス側で終了時にfree()やfclose()する必要はないのですか?
必要はない。プロセスが終了すれば、全部 OS の手によって後始末されるから。
0505上司NGNG
>>503
そんなことをしてはいけない
0506デフォルトの名無しさんNGNG
デーモンみたいにプロセスが終了しない場合は?
0507デフォルトの名無しさんNGNG
ちゃんとやらなくてはいけない。
0508503NGNG
>504
>505
お答え、どうもありがとうございます。大変参考になりました。

今回のケースは、Cで作ったCGIから子プロセスを起動して、その子プロセスは
CGIが終了しても動いているものなのです。
デーモンではなく、処理が終われば戻るのですが。
0509503NGNG
>508
すいません、間違えました。
処理が終われば、戻るのではなく、終わるのでした。
0510デフォルトの名無しさんNGNG
>>506
デーモンの場合も、親プロセスとの寿命の関係によっては微妙。親の方が
長生きするなら free() や close() 呼んでも意味無い可能性が高い。

とくにメモリに関しては OS の仮想記憶が copy-on-write を実装してある
場合、下手に free() すると余計な copy が発生するし。
0511デフォルトの名無しさんNGNG
スレ違いだとは思うんですが、
UNIXと旧Macとwindowsで動くGUIアプリ作る場合って、
Javaしかないんですかね?
unixとwindowsだけならC++/Qtでいけますよね、
でもマックを含むとなると…
0512shigeNGNG
QtはMac版もあるぞ。
0513デフォルトの名無しさんNGNG
C/C++以外でもよければ、Perl/Tk なら Mac もある。
0514デフォルトの名無しさんNGNG
MacOS X だけでは?
今までの9.xとかじゃ無理だよね多分
0515デフォルトの名無しさんNGNG
>>513
macperlから使うんだよね、
ちゃんと動くかなー
…って、やってみればいいんだけど。
サンクスコ。
…Javaはアリなんだよね?
0516shigeNGNG
mac,unix,windowsで使えて、かつフリーのものならば、wxWindowsがある。
が、Windows版は日本語つかえないはず。
unix版はgtk版は使えるだろうな。
mac版で日本語が通るかは知らない。

0517デフォルトの名無しさんNGNG
> unix版はgtk版は使えるだろうな。

フォントのややこしさが異常

0518デフォルトの名無しさんNGNG
MacでTk
http://www.geocities.co.jp/SiliconValley-SanJose/5014/mpwish.html
0519デフォルトの名無しさんNGNG
あるソースをコンパイルとリンクするときに

gcc -o foo foo.c -la -lb -lc

なら通るのですが( a, b, c は適当なライブラリ名です ), 順番を変えると

gcc -o foo foo.c -lc -lb -la

undefined reference to `.....' エラーが山ほど出るのですが…。

こういうものなんでしょうか?
順番を考えるの面倒なので、前者でも後者でもエラーが出ないようにしたいのですが
良い方法はありますでしょうか?
0520デフォルトの名無しさんNGNG
>500
getenv()だろ
0521 NGNG
>>519
gcc -o foo foo.c -lc -lb -la -lc -lb
0522デフォルトの名無しさんNGNG
>>519
そういうものです。リンクするライブラリ間に依存関係がある場合 (libc が liba を
使ってるとか) には、順序を間違えると解決できないシンボルが残ってしまう。
0523519NGNG
そうなんですか。なかなか面倒ですね。
ウチの gcc では見た感じ末尾から先頭のほうに向かってファイルを
解決しながらシンボルを登録していくような感じでした。
これで1時間くらい悩んでしまいました。(苦笑)
0524デフォルトの名無しさんNGNG
>>523
gcc(というか伝統的unixのld?)は昔からこうだねえ
ダサいというかなんと言うか・・
0525デフォルトの名無しさんNGNG
>>524
いろいろトレードオフがあるから、仕方ないっちゃあ仕方ない。
0526デフォルトの名無しさんNGNG
liba,b,c をまとめて新しいdというライブラリを…
0527デフォルトの名無しさんNGNG
>>526
ワロタ
0528デフォルトの名無しさんNGNG
>>527
っつか、それじゃ解決しないだろ。オブジェクトファイルにばらして lorder かけた
上で libd 作るならともかく。
0529デフォルトの名無しさんNGNG
>>528
素直に再設計した方が後々楽になると思われ
0530デフォルトの名無しさんNGNG
2038年問題ってどうなったのん?
0531デフォルトの名無しさんNGNG
2037年頃までみんな忘れてます。
2000年問題のときもそうだったでしょ?
0532デフォルトの名無しさんNGNG
>>531
どうせ 2038 年には現場に居ないしね、俺たち。
0533デフォルトの名無しさんNGNG
>>532
案外昔の開発環境を知る人がいなくなって駆り出されるかもよ。
かつてのCOBOL技術者みたいに
0534デフォルトの名無しさんNGNG
time_tをint64_tにする方向で進んでるけど、まだ尻に火がついてないからねえ。

とりあえずプログラム書く時はtime_tがintより大きい可能性があることを念頭に
置いとけばいいんじゃないかな。
0535デフォルトの名無しさんNGNG
libc全部書き換え…になるのか?
0536デフォルトの名無しさんNGNG
UNIX系OSでのプログラミングで、みなさんは使いたい関数ってどうやって探してるんでしょうか?
・・・まさか自分で全て実装してるなんてこと・・・ないですよね?
0537デフォルトの名無しさんNGNG
man -k、それでもダメならgrep
0538536NGNG
>>536
使いたい関数名がわかってる場合はそれで良いんでしょうが、
何となく「こんな機能の関数ないかな〜?」って時はどうするんですか?
0539デフォルトの名無しさんNGNG
-kである程度出てくるから、そのmanのSEE ALSOを見る。

# ちなみに俺は学生の頃SunOSのmanual全巻を読破した。あれはいいぞ。
0540デフォルトの名無しさんNGNG
Cならシステムコール一覧表を用意しておけ

C++ならSTL一覧表か関連URIとか

JavaならSunのSDKドキュメント
http://java.sun.com/j2se/1.4/ja/docs/ja/index.html
0541デフォルトの名無しさんNGNG
くだらない質問なんですが、
.aファイルって何ですか?
0542デフォルトの名無しさんNGNG
>>538経験を積むと臭いでわかる。
0543デフォルトの名無しさんNGNG
>>542
あぁ、それっぽい名前適当に入れたらビンゴだったりするね。
0544デフォルトの名無しさんNGNG
>>541
拡張子辞典(http://www.jisyo.com/viewer/)より、
「アセンブラ言語のソースファイル」だそうだ。

漏れの知っているのとは違うけどな。
0545むけNGNG
>>540
あふぉ。
0546  NGNG
UNIXでGUIプログラミングするなら何がおすすめですか?
できるだけ簡単にウィンドウ出せるやつが希望です。
0547名無しさん@カラアゲうまうまNGNG
>>546
Qt か GTK+
0548デフォルトの名無しさんNGNG
>>546
おもしろそうなのは Qt。
MFC みたいなのは Gtk。
簡単そうなのは Kylix。

さて、最後に笑うのは?
0549デフォルトの名無しさんNGNG
>>548
窓を出すだけで良いなら Tcl/Tk が最も楽だとは思うが。ちょっと手の込んだ
プログラムを書こうとすると Tcl っつーのに嫌気がさすけど(w
0550デフォルトの名無しさんNGNG
>>549
Tcl/Tk で窓だすのってどんな感じ?
Athena はこんな感じ... widget が無いと窓が出ない?


#include <stdio.h>
#include <stdlib.h>
#include <X11/Shell.h>
#include <X11/Xaw/Label.h>
#include <X11/Xaw/Form.h>


Widget main_wind;

int main(int argc, char **argv)
{
XtAppContext app_context;
Widget toplevel;
Widget label1;

toplevel = XtAppInitialize(&app_context, "XSample", NULL, 0, &argc, argv, NULL, 0, 0);
XtVaSetValues(toplevel, XtNtitle, "サンプル", NULL);
main_wind = XtVaCreateManagedWidget("main_wind", formWidgetClass, toplevel, NULL);

label1 = XtVaCreateManagedWidget("label1", labelWidgetClass, main_wind, NULL);

XtRealizeWidget(toplevel);
XtAppMainLoop(app_context);
return 0;
}
0551デフォルトの名無しさんNGNG
>>550
google 様のお告げによると、Hello World はこんな感じだそーだ。

#!/usr/local/bin/wish
button .hello -text "Hello, World!" -command { exit }
pack .hello
0552デフォルトの名無しさんNGNG
>>551
Tcl って全く知らんのだけど、これって
% wish hoge
でいいの?

% wish
で出て来る窓ってなんだろ?
ググレってか? (w
0553777NGNG
>>550
そんなにややこしいんだったらMFC覚えたほうがましでは・・
C++知ってればかなり楽だと思うけど←MFC
0554デフォルトの名無しさんNGNG
>>546

Java2
0555デフォルトの名無しさんNGNG
>>553
元の質問の >>546 は *UNIX* でって言っているから、MFCはダメだろう。

>>546
FOXとかFLTKとかいうのもあるらしいが俺はGUIプログラムしたことないから
どんなもんか知らん。
0556デフォルトの名無しさんNGNG
Qt
Gtk
Kylix
この中でCかC++使えるのはどれ?
やっぱKylixはO-Pascalでしょ?
0557デフォルトの名無しさんNGNG
>>555
Tk を使うヤツだと

- Schme + Tk の STk (snow)
- Perl/Tk
- Ruby/Tk

なんかもあるやね。あとは smalltalk 系で Squeak とか。
0558デフォルトの名無しさんNGNG
>>556
google にはお伺い立てましたか?
0559デフォルトの名無しさんNGNG
>>553
MFC は楽じゃぁないよ。

>>556
Kylix 以外は C++
Qt が直感的で分かりやすいと思う、が人気はどうかな?
0560shigeNGNG
>>556
Qt -- C++
Gtk -- Eiffel,C,C++,Ruby,Gtk.Python,Scheme,C# etc...
Kylix -- O-Pascal,C++(>kylix3)
0561559NGNG
>>559
GTK-- を使わないと C++ 出来ないか? (?
0562shigeNGNG
もちろんC++はGtk--の意だ。
schemeはguile-gtkみたいに。
0563棄教者 ◆witdLTi2 NGNG
Visual C++ @Windows(2000/XP/Me) と gcc3.X @UNIX (Debian/GNU Linux) の双方で動く
プログラムを書いています。
カレントディレクトリを取得したいのですが、
MSDN ライブラリ Visual Studio には getcwd でなく _getcwd が書かれています。
google で getcwd POSIX ANSI で探すとヒットしまくりです。
ちなみに VC で getcwd (アンダーバーがついていない) が動きました。

ボクは getcwd と _getcwd のどちらを使うといいでしょう。
0564デフォルトの名無しさんNGNG
>>563
getcwd() で良いんじゃないの?

VC だと ANSI 標準の関数と Win32 API は _ なしの名前が、ANSI 非標準の関数は
_ つきの名前が標準的に使われている。ただ、それだと UNIX 系のプログラムを移植
するときに面倒なんで、OLDNAMES.LIB をリンクすることで _ なしの名前でも呼べる
ようになる。
0565デフォルトの名無しさんNGNG
質問です。

FreeBSD4.6.2 にて、MD5Init() や MD5Update() 等を使用するプログラムを作りました。
これを cygwin でも使いたいと思ったのですが、MD5〜() のリンクが上手く逝きません。

プログラムのソースは1つなので、g++ にリンクもさせています。
-lmd5 を指定しています。
cygwin でコンパイルする時には、
”openssl/md5.h よりも先に openssl/e_os.h をインクルードする”で間違っていませんか?
根拠は、objdump による /usr/lib/libmd5.a のシンボルの出力結果に _MD5Init 等がある事です。

cygwin で動く libmd5.〜 を使うアプリケーションの名前でも構いません、
何方かご教授をお願いします。
0566デフォルトの名無しさんNGNG
>>565
g++でcompileしてるの?
ちゃんとextern "C"されてる?
http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html
0567デフォルトの名無しさんNGNG
>>565
エラーメッセージを Copy & Paste しようよ。
0568565NGNG
レスを頂いたのに、返答が遅れて申し訳御座いません。

>>266
/usr/include/openssl/md5.h では、__cplusplus が定義されている時は、
MD5〜() の extern が extern "C"{ から } で挟まれているのと、
呼び出し個所のアセンブラの call のシンボルには、
引数のアレは付いていなかったので、その問題ではないと思っています。

>>567
失礼致しました。。。

/cygdrive/f/tmp/ccliEcte.o(.text+0x261):crackseed.cpp: undefined reference to `MD5Init'
/cygdrive/f/tmp/ccliEcte.o(.text+0x270):crackseed.cpp: undefined reference to `MD5Update'
/cygdrive/f/tmp/ccliEcte.o(.text+0x285):crackseed.cpp: undefined reference to `MD5Final'
/cygdrive/f/tmp/ccliEcte.o(.text+0x41e):crackseed.cpp: undefined reference to `MD5Init'
/cygdrive/f/tmp/ccliEcte.o(.text+0x435):crackseed.cpp: undefined reference to `MD5Update'
/cygdrive/f/tmp/ccliEcte.o(.text+0x44a):crackseed.cpp: undefined reference to `MD5Final'
collect2: ld returned 1 exit status
0569デフォルトの名無しさんNGNG
最新のソースの冒頭は次の様になっています。
#define NO_MD5
#include <openssl/e_os.h>
#undef NO_MD5
#include <openssl/md5.h>
こうしないと、md5.h の MD5_Init が MD5Init にならないからです。
/lib/libmd5.a の中は MD5_Init ではなく MD5Init なので、こうしました。
しかし、色々と調べる内に NO_MD5 は、文字通り No MD5 だと言う事が分かりました。
レスを頂いたのに、今頃になって申し訳ないのですが、
どうも僕は cygwin での MD5〜() の使い方を勘違いしている様な気がします。

cygwin でも動く、/lib/libmd5.a 等を使用する、良いサンプルがあれば良いのですが、
ぐぐっても漠然とし過ぎていて、僕の知識では絞り込めませんでした。
端的なヒントでも、良いサンプルと成り得る tar ball のファイル名だけ構いません、
宜しくお願いします。
0570デフォルトの名無しさんNGNG
>>569
> こうしないと、md5.h の MD5_Init が MD5Init にならないからです。
> /lib/libmd5.a の中は MD5_Init ではなく MD5Init なので、こうしました。

つーか、library archiveとheaderは同じpackage由来のものを組み合わせよ。
crackseed.cppは、compile時にもwarningあるんじゃねーか?
関数の暗黙の型宣言とか。(しかしなんて名前のファイルだ…)
0571デフォルトの名無しさんNGNG
>>570
>つーか、library archiveとheaderは同じpackage由来のものを組み合わせよ。
/usr/include/openssl/ ですから OpenSSL から探せそうですね。
その線で追って見ます。

>crackseed.cppは、compile時にもwarningあるんじゃねーか?
>関数の暗黙の型宣言とか。(しかしなんて名前のファイルだ…)
いえ、warning は全て潰しました。
暗黙の型宣言の方は、warning ではなく error になるので、色々と小細工していました。

慌ててたのでファイル名とかを伏せ忘れますた。鬱。。。
0572565NGNG
ハイ、一発で見つかりました。。。
/usr/include/openssl/md5.h の MD5_Init() とかは /usr/lib/libssl.a にあったんですね。。。
一方、/usr/lib/libmd5.a は w3c-libwww-devel の物で、
FreeBSD の libmd.* に相当する様な物ではなかったんですね。

/usr/lib/libmd5.a を見て、cygwin でも MD5Init() が使えると思い込んだのが原因でした。。。

>>566様、>>567様、そして特に>>570様、おかげさまで MD5_〜() で先に進めそうです。
ありがとう御座いました。
0573566=570NGNG
>>571
> 暗黙の型宣言の方は、warning ではなく error になるので、

ああ、C++だからerrorか…

> 色々と小細工していました。

それが混乱の原因。Compilerを信ぜよ。
けど、md5(3ssl)には-lsslって書いてないね。混乱納得。
0574565NGNG
>>573
>それが混乱の原因。Compilerを信ぜよ。
はい、Compiler だけではなく、ヘッダも信じる様にします。

お蔭様で [ ほげほげ ] 出来る様になりました。
ありがとう御座いました。
0575565NGNG
沢山書いてすみません、訂正です。。。

_MD5_Init() 等を外部に公開しているのは、libssl.a ではなく、libcrypto.a の方でした。
さっきまで OpenSSL のライブラリを全部(-lssl -lcrypto の2つ)指定していたのと、
objdump -t /lib/libssl.a で _MD5_〜 を見つけて、こっちだと思ったのが原因です。。。

厨丸出し。。。鬱出汁脳。。。
0576デフォルトの名無しさんNGNG
gtkで打ったキーが描画されると言うプログラムを書こうと挑戦してみましたが
上手くイベントが起きてくれません。(key_*_eventが起きない)
int main(int ac, char **av) {
GtkWidget *window, *draw, *box;

  gtk_init(&ac, &av);
  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_signal_connect(GTK_OBJECT(window), "destroy",
      GTK_SIGNAL_FUNC(gtk_exit), NULL);
  gtk_container_border_width(GTK_CONTAINER(window), 100);
  
  box = gtk_event_box_new();
  gtk_container_add(GTK_CONTAINER(window), box);
  gtk_widget_show(box);

  draw = gtk_drawing_area_new();
  gtk_widget_set_events(draw,
    gtk_widget_set_events(draw,GDK_EXPOSURE_MASK|GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK);
  gtk_drawing_area_size(GTK_DRAWING_AREA(draw), 100, 100);
  gtk_container_add(GTK_CONTAINER(box), draw);
  gtk_widget_show(draw);
  gtk_signal_connect(GTK_OBJECT(draw), "expose_event",(GtkSignalFunc)expose_event, NULL);
  gtk_signal_connect(GTK_OBJECT(draw), "configure_event",(GtkSignalFunc)configure_event, NULL);
  gtk_signal_connect(GTK_OBJECT(draw), "key_press_event",(GtkSignalFunc)key_press_event, NULL);
  gtk_signal_connect(GTK_OBJECT(draw), "key_release_event",(GtkSignalFunc)key_release_event, NULL);

  gtk_widget_show(window);
  gtk_main();
}
0577576NGNG
gtkのサンプルのscribble-simple.cではbutton_press_eventはちゃんと起きてるんで
すがkey_press_eventシグナルをdrawing_areaでは起こせないんでしようか?
(実際にコードを追加してみましたが起こっていないようです)
0578デフォルトの名無しさんNGNG
と思ってたら別の方法でできた…。
key_press_eventはgtk_window_newで作られるウィジェットではちゃんと発行される
ので
draw_areaを大域変数にしてやってkey_press_eventが発行された時にkey_press_event
コールバックの中でdraw_stringしてみたらでけた。
0579デフォルトの名無しさんNGNG
cygwinのgccでビルドエラーも出ていないのに
バイナリができません。cygwin\以下を全て削除して
再インストールしても駄目でした。何がいけないのでしょう?
ちょっと前のバージョンではできていました。

bash-2.05b$ cat hello.c
main(){puts("hello.c");}
bash-2.05b$ gcc hello.c <- エラー無し
bash-2.05b$ ls
hello.c  <-a.exeができていない
bash-2.05b$
0580デフォルトの名無しさんNGNG
>>579
とりあえず gcc -v で、実際に何が起きてるかチェック。
0581デフォルトの名無しさんNGNG
m4の4ってなんすか?
0582566=570NGNG
Version番号です。

UNIX Programmer's Supplementary Documents Volume I, 17. M4より

The M4 macro processor is an extension of a macro processor called M3
which was written by D. M. Ritchie for the AP-3 minicomputer; M3 was
in turn based on a macro processor implemented for [1]. Readers
unfamiliar with the basic ideas of macro processing may wish to read
some of the discussion there.

M4 is a suitable front end for Ratfor and C, and has also been used
successfully with Cobol. Besides the straightforward replacement of
one string of text by another, it provides macros with arguments,
conditional macro expansion, arithmetic, file manipulation, and some
specialized string processing functions.

[1] B. W. Kernighan and P. J. Plauger, Software Tools,
Addison-Wesley, Inc., 1976.

ベル研とバークレイ校の人たちが書いた
これらのDocument群はめちゃくちゃ質が高くてお勧めです。
0583581NGNG
>>582
ありがとう!
0584デフォルトの名無しさんNGNG
struct sockaddr_in についてですが、
ネットで調べると、sockaddr_in構造体の中に
sin_familyメンバが存在するようですが、
netinet/in.hを見てみても、そういう記述が無いのですが、
どこに書いてあるんでしょうか?
0585デフォルトの名無しさんNGNG
OS依存じゃないかなあ・・・
/usr/includeディレクトリ以下をgrepしてみれば?
0586デフォルトの名無しさんNGNG
>>584
Linuxなの?
__SOCKADDR_COMMON (sin_); はあるでしょ?
__SOCKADDR_COMMON()は、/usr/include/bits/sockaddr.hに。

このマクロはあんまり意義を感じないけど、
field名がfamilyそれぞれで違うPOSIXもどうかね…
0587デフォルトの名無しさん NGNG
LinuxとSolarisでCOMポートからデータを送出したいのですが、
C言語でそれをするにはどのようにすれば良いのでしょうか?
0588デフォルトの名無しさんNGNG
ドライバ書く
0589デフォルトの名無しさんNGNG
/dev/ttyS0 に write()
0590デフォルトの名無しさんNGNG
>>587
Linuxについては、JFを見れば?
0591デフォルトの名無しさん NGNG
>>588
辛いです(w

>>589
/dev/ttyS0について調べたらなんとなく見えてきました。ありがとうございます。

>>590
見てみます。
0592デフォルトの名無しさん NGNG
シェルスクリプトをCのソース上からコールするにはどうすればいいんですか?
0593デフォルトの名無しさんNGNG
>>592
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/exec.3.html
0594デフォルトの名無しさんNGNG
tmpfileを使ったテクニックとして

FILE* fp = tmpfile();
int fd = fileno();
int mfd = dup(fd);

fclose(fp);
close(fd);

// 以降mfdを使い回す。

こんな方法は有りでしょうか?(エラーチェックとかはおいといて…)
GNU C++ では、ちゃんと動いているように見えるのですが大丈夫なの?
0595デフォルトの名無しさんNGNG
>>594
動作自体には問題無いだろうけど、何がしたいの?
0596デフォルトの名無しさんNGNG
サブディレクトリ以下の全ての*.cファイルの中の
"foo"を含む全ての行をgrepするにはどうすればいいですか?
0597デフォルトの名無しさんNGNG
grep foo *.c
0598596NGNG
↑これをプログラムでやりたいのではなく
コマンドラインで実行したいです。
0599デフォルトの名無しさんNGNG
おっと、サブディレクトリね。
find 使うか grep foo */*.cでも試してみたら?
0600596NGNG
findってファイルの中身まで調べられますか?
goaround grep foo *.c
のような各ディレクトリを巡回する
コマンドがあればいいんですが...
0601デフォルトの名無しさんNGNG
find ./ -name '*.c' | xargs grep foo
0602デフォルトの名無しさんNGNG
grep foo `find ./ -name '*.c'`
0603デフォルトの名無しさんNGNG
>>600
man find
0604デフォルトの名無しさんNGNG
ところでお前らスレ違い。
シェルはプログラミングとは違うだろ?
0605デフォルトの名無しさんNGNG
>>596 関数を探すのによく使うなぁ...
grep foo `find . -name '*.c'`
0606デフォルトの名無しさんNGNG
% find . -name \*.c -exec grep foo {} \;
>>601-602 とか zsh% grep foo **/*.c は展開してから grep なので *.c が多いと無理

>>604 むしろ板違い?
0607デフォルトの名無しさんNGNG
>>604
シェルプログラミング って言いませんか?
そんな本も出てるけど
0608デフォルトの名無しさんNGNG
>>595
何がしたいのかっつ〜と…

class tmpfilebuf : public filebuf
{
public:
tmpfilebuf()
{
FILE* fp = tmpfile();
int fd = fileno();
int mfd = dup(fd);

::fclose(fp);
::close(fd);

this->attach(mfd);
}

tmpfilebuf(const tmpfilebuf& src)
{
int mfd = dup(src.fd());
this->attach(mfd);
}

virtual ~tmpfilebuf()
{
::close(this->fd());
}
};

みたいな?
0609608NGNG
インデントが切れてました失礼…

class tmpfilebuf : public filebuf
{
 public:
  tmpfilebuf()
  {
    FILE* fp = tmpfile();
    int fd = fileno();
    int mfd = dup(fd);

    ::fclose(fp);
    ::close(fd); // これは不要かもしれない…

    this->attach(mfd);
  }

  tmpfilebuf(const tmpfilebuf& src)
  {
    int mfd = dup(src.fd());
    this->attach(mfd);
  }

  virtual ~tmpfilebuf()
  {
    ::close(this->fd());
  }
};

0610デフォルトの名無しさんNGNG
>>607
この板で「UNIXプログラミング」っつったらCとかC++使ってUnix系に依存した
プログラム書く事じゃねーの?スレの雰囲気読めば分かると思うが…。
シェルスクリプトはUNIX板にスレがあるからそっちでやってくださいな。

ていうか、findとgrep組み合わした程度でシェルスクリプトと言える程のもんか?
それくらいの使い方、日常で使ってるじゃん。パイプとかと変わらんし。

ま、何にせよ板違い。
0611デフォルトの名無しさんNGNG
>>610
お前はsystem()禁止!!
0612デフォルトの名無しさんNGNG
始めまして。

標準入力にselectをしたいのですが、うまく行きません。やりたいコトは、
 ユーザに入力されたらソケットに
ソケットに入力されたら標準出力に
データを送りたいのです。で、ユーザの入力をselectで知ることはできるかと思ったんですが…。
0613デフォルトの名無しさんNGNG
ネットワークスレがあるよ
0614デフォルトの名無しさんNGNG
>>612
どうやってどうなったのか書いてくれよう・・・
0615デフォルトの名無しさんNGNG
0を普通にselectできるよお
0616612NGNG
>>613
すみません。けど、問題は「標準入力にselectできない」だったので、
ネットワークスレの方ではないと思ってこっちにしますた。

>>614
あ、ソースですか?気が利かなくてすみません。

>>615
ありがとうございます。自分の環境でもゴニョゴニョやってみました。
で、重大な間違いに気が付きました。
……俺、stdinじゃなくてstdoutにselectしてたんでつ……そりゃできねぇよ。

ごめんなさい、逝ってきます。
0617デフォルトの名無しさんNGNG
>>609
>>594でも問題ないが、mkstemp(3)を使えばより簡単。
準拠
BSD 4.3, POSIX 1003.1-2001
0618デフォルトの名無しさんNGNG
ポカーン
0619デフォルトの名無しさんNGNG
>>610
それじゃってんで、「UNIXシェルプログラミング質問スレ」ってスレ立てて、「UNIXプログラミングでやりゃ良いだろっ」て言われてしまうのに100カノッサ♪
0620609NGNG
>>594
それ使うとファイルを消すタイミングを自前でやらないといけないから面倒なんですよねぇ〜。

dupするたびにカウントアップして…

それぐらい、やれって?(汗;
0621デフォルトの名無しさんNGNG
>>620
OSがやってくれるんだから自前でやる必要ないじゃん。
0622620NGNG
失敬!
>594
もとい
>617
でした。
0623名無しさん@EmacsNGNG
>>619
UNIX板でもシェルスクリプトは基本的にくだ質扱いだよ。
あれをプログラミングとかいうならバッチファイルも
プログラミングなの?そうじゃないよね。
0624デフォルトの名無しさんNGNG
程度の差はあれど
シェルスクリプトもワンライナーもプログラミングだと思うが
0625デフォルトの名無しさんNGNG
HTMLだってWebアプリケーションとかいう。
0626624NGNG
ただのHTMLを人力で書くのをプログラミングというのには同意しかねる
0627デフォルトの名無しさんNGNG
>>624
激シク同意
0628デフォルトの名無しさんNGNG
>>609
どうでもいいが、fclose()したあとでclose()はいらんだろ。
あとfileno()の引数忘れてるぞ。
0629デフォルトの名無しさんNGNG
>>611
execじゃないのか?systemは使ってないだろう…。

>>625
HTMLだけでWebアプリって言うのか?CGIやPHPと組み合わせてWebアプリなんじゃ…。

少なくとも、シェルスクリプトはこっちではない気がするが。
0630デフォルトの名無しさんNGNG
プログラムの中で、CSVファイルみたいなテキストファイルを開けて、
ごにょごにょするときって、 system()とか、popen() 使って、テキストファイルから
必要な部分を切り出す。ってのをよくやっちゃいます。

だって、めんどくさいんだもん。

0631デフォルトの名無しさんNGNG
>>630
結局はすべての処理をawkやsedで書いた方が速いという罠?
0632630NGNG
いや、そこまでは言わないけど、明らかにシェルスクリプト(sed,awk,perl......)の方が
早く作れる部分はそっちに任せてスピードが必要な部分とか、きっちり作りこまなければいけない
部分は、Cなり、C++なりのコンパイラを使う。
んで、スクリプトとのI/Oに、system() やら、popen() を使うっていうスタイルも
UNIXらしいといえば、UNIXらしいとおもいまふ。

漏れ楽したいだけかも。
0633デフォルトの名無しさんNGNG
HSP は屑!
0634デフォルトの名無しさんNGNG
>>633
HSP for UNIX作ってからいえ(藁。
0635デフォルトの名無しさんNGNG
>>634
それだ!

ナイスアイディアです。
今年のソフトウェア大賞はいただきだな。
0636デフォルトの名無しさんNGNG
C言語ならアタシに聞きなさい<36>からこちらに誘導を受けたので、質問させてください。

プロセスの使用メモリ量を調べたいのだが、
int getrusage(int who, struct rusage *usage);
ってものの、rusage構造体のどのメンバーを
調べればよいか知っている方いませんか?
manみても、よくわからんし、
ru_maxrssかなぁなんて思っていたのだが、机上計算と違う値を返すし。
0637デフォルトの名無しさんNGNG
OSとバージョンぐらいは書いたほうが・・・
0638デフォルトの名無しさんNGNG
man getrusage
0639デフォルトの名無しさんNGNG
>>635
HSPスレでは怖くて聞けんのでちょっと教えてくれ。
あそこでBNFといってるのはBackus-Naur Form以外の何かなのか?
0640デフォルトの名無しさんNGNG
>>636
机上計算をどうやったのか
0641デフォルトの名無しさんNGNG
2.4かーねるのコンパイルは
gcc3以上じゃないとだめですか?
0642デフォルトの名無しさんNGNG
>>641
そんなことはない。
0643デフォルトの名無しさんNGNG
>>641
$ gcc -v
Reading specs from /usr/lib/gcc-lib/i586-redhat-linux/2.95.3/specs
gcc version 2.95.3 20010315 (release)
$ uname -sr
Linux 2.4.20-pre11

ですがなにか?
0644デフォルトの名無しさんNGNG
ifconfig
0645デフォルトの名無しさんNGNG
zlibを使っています。
ヘッダーを読み込んでストリーム展開しているのですが、
展開前から展開後のファイルサイズを知る術はありませんでしょうか。
gzipファイルから直接読んでいるわけではないので
gzseekでファイルの終端にもっていってgztellする手も使えずにいます。

gzipファイルのヘッダーは、随分前からちょくちょく調べていたのですが、
どうにも要領が悪いみたいで
しっかりした情報を得られずきちんと把握出来ていません。
ヘッダーのサイズ分読み飛ばしだとかの必要最低限のものしか見付からなくて…。
もしもヘッダーを詳しく解説しているページがありましたら
教えていただけると幸いです。

スレ違いでごめんなさい。
もしもっと適切なスレがありましたら、よろしければ教えてください。
0646デフォルトの名無しさんNGNG
>>645
man zlib すると参考資料へのポインタがいくつか出てくるよ。
RFC1950-1952にgzipのフォーマットが載ってる、とのこと。
0647645NGNG
>>646
おおー! 載ってました!
返事が遅れてごめんなさい。
ありがとうございます!
0648デフォルトの名無しさんNGNG
Windowsで使用しているINIファイルをUNIXでも使用したいんですけど
GetPrivateProfileみたいなAPIってありませんか?
0649rubyist@カラアゲうまうまNGNG
gnome-config
KConfig
自分で書く
0650デフォルトの名無しさんNGNG
grep foo *.c
0651デフォルトの名無しさんNGNG
rubyist@カラアゲうまうま ありがとうございました。
色々調べたのですが、Win/Unixを共通のコードにしよ
うと思い、全部自分で書くことにしました。


0652デフォルトの名無しさんNGNG
age
0653デフォルトの名無しさんNGNG
ホームディレクトリってなんでしょうか?
0654デフォルトの名無しさんNGNG
winの場合
cd %HOME% がホームディレクトリ
unixの場合
ログイン後にpwdした結果がホームディレクトリ
0655デフォルトの名無しさんNGNG
>>653
ありがとう

各メンバーというか,ユーザーに割り当てられた先頭のフォルダという事ですね?
winにもあったのか
0656名無しさん@カラアゲうまうまNGNG
>>655
Win NTだと%HOMEDRIVE%%HOMEPATH%ってのがデフォルトで設定される。
9xだと…My Documentsが一番近いのかなぁ。
0657デフォルトの名無しさんNGNG
学校の課題で、見本を丸写ししてプログラムを実行する課題があるのですが、
set datetoday=`date`
echo "The date is $datetoday."
という部分で失敗します。
dateの変数が表示されないのですが、↑は間違っていますか?
0658デフォルトの名無しさんNGNG
>>657
setじゃないねぇ。見本なのにsetなのかよ…。
0659デフォルトの名無しさんNGNG
>>657
csh/tcsh ならあってる。sh/bash/zsh だと set 要らない。

http://x68000.startshop.co.jp/~68user/unix/shell-variable.html
0660657NGNG
>>658さん
>>659さん
レスありがとうございました。
プログラム全体を見たところcshのようですが、学校のサーバーが定期メンテ中で接続できないので
まだ何も確認してません。
↓に見本のコピペを張りますので、おかしなところを教えて欲しいです。

0661657NGNG
example2スクリプト次のスクリプトを作成し、実行する。
#!/bin/csh
#
# Example 2
#
# More on echo. (echoのさまざまな使用例)
#
echo “You can also use quotation marks.”
# Note the space after the quotation mark and before second.
# (引用符とsecondの間のスペースに注意)
echo –n “first message”
echo “ second message”
# Use a command with echo. (echoの引数の中でコマンドを使用)
echo “The current directory is `pwd`.”
# Use a variable. (変数を使用)
set variable1=”Yow, are we having fun yet?”
echo “The variable is $variable1.”
# Set a variable to a command output (コマンドの出力に変数を設定)
set datetoday=`date`
echo “The date is $datetoday.”

です。多分[Yow]は[You]かと…(汗)
お願いします。
0662デフォルトの名無しさんNGNG
>>661
記号が変。
0663デフォルトの名無しさんNGNG
>>662さん
“”の事ですか?
実際はTera Term上で手打ち入力したので大丈夫だと思うのですが、
見本はWordファイルでした。
教師は「コピペじゃ動かないから」
と嬉しそうでしたよ・・・。
0664657NGNG
↑663=657です
0665デフォルトの名無しさんNGNG
>>663
echo -nの-も実体参照になってる。
>661はWordから貼ったのか? 自分で打ったやつを貼れよ。
じゃないとタイプミスとかあっても分かんないだろ。
0666657NGNG
>>665
すみません。前述の通り、学校のサーバーにアクセスできない状況なので
自分のファイルにアクセスできません。
アクセス出来次第そうさせていただくつもりですが、
>>658-659さんあたりのsetがどうのとかがわからないので教えていただけたらな、と・・・
0667デフォルトの名無しさんNGNG
>>666
少なくとも、>657の二行をファイルに落してcshに喰わせた限りじゃ、正しく
動く。たぶん変数名を打ち間違ってるとかじゃないの。
0668657NGNG
>>665さん
すみません、「さん」わすれてました

>>667さん
そうですか。
今朝4時まで色々試して
set datetoday=`date`
echo "The date is $datetoday."
だけのファイルを実行したりしましたが、結果は
The date is .
だったと思います。後でもう一度試してみます。
0669デフォルトの名無しさんNGNG
うちは sh -> bash, csh -> tcsh なんで csh では試せないけど、
bash, tcsh, zsh で問題なく動いたよ。

$ set datetoday=`date`

した後で、

$ echo $datetoday
$ echo ${datetoday}
$ echo "$datetoday"
$ echo "${datetoday}"

してみてもダメって事だよね?

問題がありそうな時は、打ち間違いを疑うべし。
手打しないでコピペするのは基本。と、偉そうに逝っとく。
0670657NGNG
>>669さん
[$ set]なんですか!?
授業担当の教師がクソで、プログラム文の解説を一切していないので
669さんの書いていただいたものの意味的な違いもわからないです・・・。
まさかとは思っていたのですが、どうも今日明日サーバーが働いてくれない
ようですので、接続でき次第試させていただきます。
0671デフォルトの名無しさんNGNG
>>668
プロンプト`$'系は
export datetoday=`date` か, そのまま datetoday=`date`
0672デフォルトの名無しさんNGNG
>>670
その程度のシェルスクリプトくらいならcygwinでも充分試せるから、それで試してみるというのもあり。
つーか課題でcshって当たりで既にクソ。
0673デフォルトの名無しさんNGNG
>>670
あ、ごめん '$' じゃなくて '>' か。プロンプトの事ね。
csh 系使ってないんでこんがらがっちゃった。

> set datetoday=`date`

した後で、

> echo $datetoday
> echo ${datetoday}
> echo "$datetoday"
> echo "${datetoday}"

プロンプトが > って出てくるでしょ? あれのこと。
入力する必要は無いです。で、${foo} ってのは変数名の
非省略形だよ。$foo と ${foo} は同じ意味です。

最初のうちは上手くいかなかったら打ち間違い、パスが
通っているか、man にどう書いてあるかを確認すべし。
と、また偉そうに書いてしまった。
0674657NGNG
>>671さん >>672さん >>673さん
ありがとうございます。
恥ずかしいんですけど、これでも大学工学部の必修授業です・・・。

今cygwinを試すためDLしてます。88%で5分とまってますけど。
0675デフォルトの名無しさんNGNG
>>672
BSD 使いなんじゃない? bash? あんなモン認めん! みたいな。
zsh? そんなファンシーなもの使えるか! みたいな。

>>670
シェルスクリプトの勉強するなら B Shell 系使った方が良いよ。
sh とか bash とか zsh ね。
0676デフォルトの名無しさんNGNG
>>675
BSDもいいんだけど、なんでいまだにcshなんぞに拘るのかが分からんよ。
実のところ一月くらいしか使ったことないけど、昔のSunOSで。
0677657NGNG
早速cygwinで実行してみました。以下実行文のコピペです。
1.
$ cat > a
set datetoday=`date`
echo $datetoday →→表示されず
同様に
echo ${datetoday}
echo "$datetoday"
echo "${datetoday}"     →→表示されず

2.
$ cat > a
datetoday=`date`
echo "$datetoday" →→成功

でした。もしかしたら学校のシェルも"set"要らないのかもしれないですね。

>>675さん
多分その教師は電気回路専門でUNIXはそんなにできないと思います。
生徒の質問に答えるのはアシスタントの学生ですし。
0678デフォルトの名無しさんNGNG
>>677
>>661の最初の行をいれてみろ。ただしcygwinはtcshしかないので
#!/bin/tcsh

その二行だけだと/bin/shが動く。
もしくはこうしる。
$ cat > a
set datetoday=`date`
echo $datetoday
$ tcsh a
0679657NGNG
>>678さん
実行してみましたが
$ tcsh a
bash: tcsh: command not found
と出てしまいました。
0680デフォルトの名無しさんNGNG
>>679
which tcsh
whereis tcsh
ls -l /bin/tcsh
echo $PATH
0681デフォルトの名無しさんNGNG
>>680
tcshインストールしてないんだろ。
してればcygwinディレクトリの下の/etc/setupにtcsh.lst.gzってファイルがあるはず。
0682デフォルトの名無しさんNGNG
>>679
mld とか dos minix も良いよ。
と言ってみたかっただけです。
0683デフォルトの名無しさんNGNG
pipe→fork→fdopen
    ↓
   dup2→exec
こんな感じで、子プロセスをパイプにつないでる実装を、
forkをやめてspawn使う実装に置き換えることはできるのでしょうか?
0684デフォルトの名無しさんNGNG
>>683
spawnもfork使ってんだけど
0685683NGNG
>>684
え・・・?それじゃぁspawnって意味無いんじゃ・・・。
0686デフォルトの名無しさんNGNG
>>685
つーかそもそも、UNIXで新しくプロセスを作る手段てのはfork以外には基本的
に存在しないわけよ。spawnもfork&execのラッパー。ただしパイプを操作した
りなんだりってのを全部インターフェースに入れちゃうとごちゃごちゃしてし
まうんで、そこまでは提供しませんてこと。
Windowsを知ってるなら、CreateProcess()のパラメータの山を考えてみればい
い。
0687683NGNG
>>686
spawn使ったら効率があがるかもしれないのは、cygwinに限った話みたいですね。
うぅ、>683のやつで正解なのか・・・。
ちょっと、気味が悪い。慣れが必要ってことか。
0688デフォルトの名無しさんNGNG
>>687
あぁ、cygwinの話か。じゃプロセス周りはかなり違う。
でもやはりspawnにはstdioを繋ぎかえるようなインターフェースはない。
理由は>686。

> うぅ、>683のやつで正解なのか・・・。
> ちょっと、気味が悪い。慣れが必要ってことか。
cygwinは>683とかが動くようにするためのものだし。cygwinと普通のUNIXで動
くようにしたいなら、このへんは#ifdefかファイルで分けるしかないだろうな。
0689デフォルトの名無しさんNGNG
C++でexecvするとき、argvの型がchar* ()[]なので、
std::string::c_strが渡せなかったりします。
ここはconst_castの出番として妥当でしょうか?

妥当でないとしたら、文字列リテラルもそのままではなくて、
char配列を確保して渡すべしですか?
0690デフォルトの名無しさんNGNG
>>689
c_str()はconst char*だから、そもそもその値自体のポインタは取れないだろが。
0691689NGNG
>>690
あ、そんな話ではなくて、ですね、
呼び出す側でexecvに渡すためのargvを作るときの、
それぞれの要素をセットするところの話です。
0692デフォルトの名無しさんNGNG
ならいーんじゃねーの、分かってやってんだし。
あんまり教条主義でいくこともないかと思われ。
0693689NGNG
>>692
・・・うん、やっぱその方向で書き換えてみよぅ。
なんか、「大丈夫」っていう根拠になるような文書がないものか・・。
0694デフォルトの名無しさんNGNG
つーかargvになってるのはCのプロモーションの都合なんだから、
それに合わせるとしたらキャストするのは至極真っ当な手段だと思うんだが。
むしろconst_castは本来そういう用途を想定してると思われ。
0695デフォルトの名無しさんNGNG
>>694
> つーかargvになってるのはCのプロモーションの都合なんだから、
s/(?=になってるのは)/がchar *const*/
0696デフォルトの名無しさんNGNG
株式会社アネスト

UNIXでVBが出来る方
2年くらいの経験

給与 時給 2,500円以上
通勤交通費 あり
勤務時間 09:00-18:00 休憩60分
勤務曜日 月、火、水、木、金曜日
期間 長期(3ヶ月以上) 即日 更新あり



                                   誰か応募して真相を確かめて来い
0697デフォルトの名無しさんNGNG
VB = Venture Business の罠
0698デフォルトの名無しさんNGNG
>>697
休日の条件が詳しく書かれてないから嫌だ。
0699デフォルトの名無しさんNGNG
697 ではなく
696 の間違い
ごめんなせい
0700デフォルトの名無しさんNGNG
     ∧_∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ( ´∀`)/<先生!こんなのがありました!
 _ / /   /   \___________
\⊂ノ ̄ ̄ ̄ ̄\
 ||\        \
 ||\|| ̄ ̄ ̄ ̄ ̄||
 ||  || ̄ ̄ ̄ ̄ ̄||
http://muryou.gasuki.com/mona/
0701デフォルトの名無しさんNGNG
保守age
0702デフォルトの名無しさんNGNG
ウィナーですが前からあこがれていました。
そんな僕です。
学校でSunOS+Cしかやったことありません。
一応POP3プロトコルを使って受信メール一覧表示プログラムまでは書いた事あります。
X-ToolKitとForkとシェアードメモリを使ってウィンドウ間チャット作った事あります。
0703デフォルトの名無しさんNGNG
>>702
自己紹介かい?
0704IP記録実験NGNG
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
0705デフォルトの名無しさんNGNG
正月からエロゲするような人間に彼女なんかいるわけない、、


ごめん、僕もやりました。 トリコロールとかいうやつ
0706デフォルトの名無しさんNGNG
どうでもいいけどさ、電波2chでIP保存は128までってトコなんで消したのよ
0707IP記録実験NGNG
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
0708デフォルトの名無しさんNGNG
 ∩∩
( ;θ;)<IP録っても耳は取らないでね
0709デフォルトの名無しさんNGNG
昨日、殺しました。
0710デフォルトの名無しさんNGNG
質問なんですが、大学の課題で自然対数をe=(1+1/n)をn回(n→∞)掛け合わせることで求めると
(ここでnとeはfloat)数が計算結果が不安定になり最後には1に落ち着いてしまうんですがこれはなんで
起こってしまうのか教えてください、お願いします。
0711デフォルトの名無しさんNGNG
>>710
プログラムが間違っている。
n を十分低くして、ちゃんと近似できているか確認したら?
0712デフォルトの名無しさんNGNG
>>711
この課題の目的は変数の型をfloatにすることによって計算した結果を不安定にすることが目的らしい
んですよ。nを千七百万ぐらいにしたら1になりました、その途中ではeが3,8ぐらいにまでなりました。
doubleにすると普通に2.71828・・・・となるんですが。。。。
0713デフォルトの名無しさんNGNG
丸め誤差
0714デフォルトの名無しさんNGNG
73 :ひろゆき ◆3SHRUNYAXA :03/01/08 17:27 ID:rLfxQ17l
   >ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
   ・今までより、サーバが重くなる。
   ・裁判所や警察からの照会があった場合にはIPを提出することがある。

   こんなところでしょうか。

89 :ひろゆき ◆3SHRUNYAXA :03/01/08 17:29 ID:rLfxQ17l
   >一般人からも見れるところ? 〉記録所
   既存のdatとは別に保存してるので、サーバがクラックされない限りはみれません。

   ただ、既存のdatと別なので、書きこみあたりの保存容量がほぼ2倍。
0715デフォルトの名無しさんNGNG
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0716デフォルトの名無しさんNGNG
「ハッキング」から「夜のおかず」までを手広くカバーしすぎた巨大掲示板群です。。。
気兼ねなく、会社、学校、座敷牢からアクセスできないように、発信元はバリバリ記録してますです。
お気楽ご気楽に書き込まないで下さい。お約束・最低限のルールを守ったフリをして、
他人に迷惑をかけまくって騒ごういうことです。ルールを守らないと、祭りになっちゃいます
まず、他人が見て不愉快になることを書きましょう。大勢の読者がいることを意識しないでください。他には、
ひろゆきが、超・不定期にお送りする裏口ネット駄情報。2ちゃんねるヘヴォメールマガジンがあります。
0717デフォルトの名無しさんNGNG
しかし2chがIPをとったから「じゃあ俺も」で他の掲示板もどんどんIP取ると宣言する所が出てくる予感がする、、、
ま、1つぐらいは残るだろうが、、、
0718デフォルトの名無しさんNGNG
>>149
君は何がしたいんだい?(^_^;)
0719デフォルトの名無しさんNGNG
>>145
掲示板の一番下が「2ちゃんねる20030107a」
ってなってる板じゃなかったかな?
0720デフォルトの名無しさんNGNG
CGI使った、サイバー攻撃だったんじゃないか?
0721デフォルトの名無しさんNGNG
■「T動物病院は削除ルールに従ったのか! 2ちゃんには削除ルールがちゃんとあるんだ!」
2ちゃん独自の削除ルールに従わねばならない法的根拠はありません。
また、2ちゃんの削除ルール自体、判決では不十分なものとされています。

■「名誉毀損を知りえた時点で削除しろなんて無茶苦茶だ!」
今回、T動物病院側は内容証明郵便でひろゆきに10日以内の削除要求しました。
2ちゃんの削除ルールに則らずとも、社会通念上においても、法的にも、これは十分な通知です。
0722デフォルトの名無しさんNGNG
>>914

それはやふーとかでも可能だと思いますけど
0723デフォルトの名無しさんNGNG
>530
俺はマンコとかいてるがIPとられても怖くないぞ。もし文句あってもやめないからな!!
0724デフォルトの名無しさんNGNG

883 :名無しさん :02/12/28 10:40 HOST:
メグ ◆TOKIQKfFYAさん このスレ見てるか判らないけどちょっとお呼び出しです・・・

★ボランティアさんと一緒★ Part8
http://qb.2ch.net/test/read.cgi/accuse/1039532593/563-
0725デフォルトの名無しさんNGNG
>アクセスログってなに?

人を馬鹿にするな!
0726デフォルトの名無しさんNGNG
まあ、危なっかしい書き込みの抑制にはなるかな
0727デフォルトの名無しさんNGNG
>>722
今のうちに親戚回りしておきな。
0728デフォルトの名無しさんNGNG
削除しなかったことが問題であって、IP取得は全くの見当違いだと思うんだが
それよかズボラな削除体制どーにかしろって感じだな

どさくさに紛れて都合の良い法律案を盛りこむ議会みたい
管理批判の多い板から記録してるっつーのもなんだかなあ
0729デフォルトの名無しさんNGNG
釣りじゃないのなら実に現実味のない意見だ
0730デフォルトの名無しさんNGNG
今からこのスレッドは87氏を応援するスレッドになりました(^_^;)
0731デフォルトの名無しさんNGNG
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0732デフォルトの名無しさんNGNG
半角住人の大量逮捕もありうるわけですな。
0733デフォルトの名無しさんNGNG
今からこのスレッドは87氏を応援するスレッドになりました(^_^;)
0734デフォルトの名無しさんNGNG
快速タンに少しでも近づこうと、今年のお屠蘇はマッコリ酒にしてみましたが血糖値がずいぶんあがったようです。
0735デフォルトの名無しさんNGNG
もう、マンコとかアナルとか書き込めなくなっちゃうね!
0736デフォルトの名無しさんNGNG
鳴る歩道って。
ログのリンクが無い時点で
信憑性なんかほとんどゼロだろ。
0737デフォルトの名無しさんNGNG
リモホって何?
リモートホストって、用語辞典に載ってないよ
誰かおせーて
0738デフォルトの名無しさんNGNG
普通ってのがわからないんだよ!
0739デフォルトの名無しさんNGNG



           ・・・2ちゃんねるの時代も終わりに近づいてる・・・

0740デフォルトの名無しさんNGNG
ログの保存期間は当然1日だろうな?
0741デフォルトの名無しさんNGNG
         富 山 ワッショイ!!
     \\  魚津市  ワッショイ!! //
 +   + \\蜃 気 楼 ワッショイ!!/+
                            +
.   +   富■山  富■山  富■山  +
      ( ´∀`∩(´∀`∩)( ´ー`)
 +  (( (つ   ノ(つ  丿(つ  つ ))  +
       ヽ  ( ノ ( ノ  ) ) )
       (_)し' し(_) (_)_)
北陸の地方都市富山ワッショイ
         富山ワッショイ
          富山ワッショイ
           コシヒカリワッショイ
            蜃気楼ワッショイ
             魚津市ワッショイ
0742デフォルトの名無しさんNGNG
ごめん、その社長オレだ。


・・・次逝ってみよう!
0743デフォルトの名無しさんNGNG
あげ
0744デフォルトの名無しさんNGNG
それは単に業者への制裁措置じゃ?
0745デフォルトの名無しさんNGNG
通ることもあるわな。

「見なかった」といわれて終わるのは証明の問題であって実体の問題ではない。
0746デフォルトの名無しさんNGNG
2ちゃんねる閲覧専用ブラウザを「2ちゃんブラウザ」「2chブラウザ」と呼ぶのはやめよう。
特定の2ch専用ブラウザと紛らわしいから。
0747デフォルトの名無しさんNGNG
>>710,712n
>>713に答えは書いてあるけど、UNIXプログラミング全然関係ない。
浮動小数点自体の性質。WinやMacでも浮動小数点使えば同じ。
0748山崎渉NGNG
(^^)
0749山崎渉NGNG
(^^)
0750デフォルトの名無しさんNGNG
複数のプロセスからログファイルに書き込みとログローテートを実装させるには
どういう手順を踏めばよいのでしょうか。
既出だとは思いますがお付き合いください。
情報過多でまとまりません。

・ログファイルへの同時書き込みはlockf?セマフォ?
・書き込むごとにファイルのオープン/クローズを繰り返す?
・ログ書き用のプロセスを起動してプロセス間通信で書き込む文字を送る?
・ローテートしている最中に書き込もうとしている文字列はロストしない?
・ログデーモンを用意?
・HUPシグナルで再起動させるには再起動のコードをかく?
思いつくまま記述させていただきました。
0751デフォルトの名無しさんNGNG
>>750
速度を重視せず、お手軽に実装したいなら
> ・ログファイルへの同時書き込みはlockf?セマフォ?
> ・書き込むごとにファイルのオープン/クローズを繰り返す?

速度を重視し、実装が面倒でもよいならば
> ・ログ書き用のプロセスを起動してプロセス間通信で書き込む文字を送る?
> ・ログデーモンを用意?

正しく排他がかけられていれば、下記の事象は発生しない。
> ・ローテートしている最中に書き込もうとしている文字列はロストしない?
0752750NGNG
>>751さん。
ありがとうございます。
勉強します。
0753デフォルトの名無しさんNGNG
>>750
UNIXでしょ?
syslog(3)とlogrotate(8)とcrontab(5)とcrontabに書く若干のshell script。

自分でcode書く必要ないから、以下は蛇足だが、

>・書き込むごとにファイルのオープン/クローズを繰り返す?

排他がちゃんと行なわれていれば、全員が開きっぱなしでもかまわん。
どんどん後ろに追記されていく。
stdioのbufferingがあるから、fflush(3)してやらないと駄目だが。

> ・ローテートしている最中に書き込もうとしている文字列はロストしない?

一度オープンしたファイル(ディスクリプタ)には、
ディレクトリツリー上から消えようが、名前が変えられようが、
クローズするまで書き続けられる。だからなくならない。
書く度にディレクトリツリーから辿るわけではない。
それはopen(2)の時に一度だけ行なわれる。

0754山崎渉NGNG
(^^)
0755デフォルトの名無しさんNGNG
opensshの実装を読んでいて疑問があったので質問します。

実装の中で外部プログラムを呼び出す部分があるのですが、
そこの部分は簡単に書くと
char *cmd="...";
system(cmd);
という形で実装されています。

今回の疑問はこのcmdに渡される文字列なのですが、場所によって
二種類の渡し方をしているようです。たとえば「ls -al」を実行する場合、
ある箇所では

cmd="ls -al";

と実装してあり、また別の箇所では

cmd="exec ls -al";

と呼んでいます。
私にはこの違いがよくわからないのですが、もしかすると
実行されたシェルですでに環境が出来ていて、たとえばパスワードの
入力の必要なくコマンドが実行できる可能性がある場合などのために
execコマンドを使うことによって現在のシェルで実行させているのでは…
と予想しました。

どなたか詳しい方、正確な意味を教えていただけませんか?
よろしくお願いします。
0756デフォルトの名無しさんNGNG
>>755
> 実行されたシェルですでに環境が出来ていて、たとえばパスワードの
> 入力の必要なくコマンドが実行できる可能性がある場合などのために
> execコマンドを使うことによって現在のシェルで実行させているのでは…

execの理解が間違っています。
# UNIXのshell, DOSのcommand.com, NTのcmd.exeは、
# 常駐のサービスサーバじゃないです。

#! /bin/sh
echo "This \c"
echo "is \c"
exec echo "a \c"
echo "test."

を実行してみましょう。

常にexecを書いて問題ないです。
(一つしかprocessを起動しない場合。system(3)の引数に';'を使わない)
execを書けばprocessを一つ節約できます。
0757デフォルトの名無しさんNGNG
>>756
その例ではtestが表示されませんでした。
新しくプロセスを作らず、既存のプロセスの上で走らせるため、
そこでプログラムが終了した場合は処理が戻ってこないという事ですか?

systemを使った場合は戻ってくるのはなぜでしょう??
0758デフォルトの名無しさんNGNG
>>757
>新しくプロセスを作らず、既存のプロセスの上で走らせるため、
>そこでプログラムが終了した場合は処理が戻ってこないという事ですか?
正解。

>systemを使った場合は戻ってくるのはなぜでしょう??
manを読むと分かると思うんだけど、system()は引数のコマンドを/bin/shの
上で実行するから。

つまり、あるプロセスAの中でsystem("ls");ってやると、lsの起動時には
A→/bin/sh→ls
と3つのプロセスが動いてることになる。これがsystem("exec ls");だと、
A→/bin/sh
このshがlsに置き換わって
A→ls
となる。
0759デフォルトの名無しさんNGNG
>>758
なるほど。詳しい説明助かりました。
execを使っているところと使っていないところがあったのは、
完全にプログラマの気まぐれだったわけですね。
理解できました。ありがとうございます。
0760デフォルトの名無しさんNGNG
>>759
気まぐれだと言い切れるかは微妙。
SIGCHLDの関係なんかもあるし。
0761758NGNG
main(){system("ps");}
みたいなプログラムを作って、"ps"と"exec ps"とで出力を比べたら
違いが分かるのではと思ったんだが、ここで面白いことに気が付いた。
FreeBSDだと>>758に書いたようにpsの場合はプロセスが3つ、exec psだと
プロセス2つに見えるんだが、Linuxだとpsでもexec psでもプロセスの数が
変わらない。

Linuxの/bin/shはbashなんだが、bashの場合、引数に与えられたコマンドが
1つしかない場合はexec相当の動作をするようになってるようだ。
コマンドラインで bash -c "ps" と bash -c "ps;ps" の二つの出力を
比べるとよく分かる。前者は、起動したはずのbashがpsの出力に出てこない。
0762デフォルトの名無しさんNGNG
>>760
manには、system関数はSIGCHLDをブロックする、と書いてありました。
見た感じでは単純に実行したいだけの模様ですし、
文脈的にもほぼ同じ意味で使っているので、たぶん気まぐれでしょう。

>>761
最初からメモリを効率化してるんでしょうかね。
bashのソース見てみたけれど具体的にどこでやっているのかは掴めませんでした。
0763デフォルトの名無しさんNGNG
>>760
> SIGCHLDの関係なんかもあるし。

それは何の関係よ?
0764デフォルトの名無しさんNGNG
Winsockと繋げられるソケットはどうやって作ればいいのでしょうか?
0765デフォルトの名無しさんNGNG
>>764
別に何も考える必要は無いよ。普通にTCPだかUDP投げれば良し。
0766デフォルトの名無しさんNGNG
Cで複数の数を比較するマクロはどう書けばいいのでしょうか。
2つの場合:
#define max(a,b) ((a) <= (b)? (b) : (a))
3つの場合:
#define max_in_3(a,b,c) ((a) <= (b)? \
((b) <= (c)? (c) : (b)) : \
((a) <= (c)? (c) : (a)))
とかやってるんですが、これだと数が増えると面倒です。
だれかいい方法知ってたら教えてください。
別に無理にマクロじゃなくてもいいとは思いますが、
気になって。。あとマクロだと便利だし。
0767デフォルトの名無しさんNGNG
激しくスレ違い
0768デフォルトの名無しさんNGNG
可変長引数とテンプレ使え。
0769デフォルトの名無しさんNGNG
768 名前:デフォルトの名無しさん :03/02/02 16:18
       可変長引数とテンプレ使え。
768 名前:デフォルトの名無しさん :03/02/02 16:18
       可変長引数とテンプレ使え。
768 名前:デフォルトの名無しさん :03/02/02 16:18
       可変長引数とテンプレ使え。
768 名前:デフォルトの名無しさん :03/02/02 16:18
       可変長引数とテンプレ使え。
768 名前:デフォルトの名無しさん :03/02/02 16:18
       可変長引数とテンプレ使え。
768 名前:デフォルトの名無しさん :03/02/02 16:18
       可変長引数とテンプレ使え。

              “と”?
0770デフォルトの名無しさんNGNG
たかだか数個でいいならマクロでも簡単に書ける。

ex.)
#define max3(a, b, c) (max(max((a), (b)), (c)))
#define max4(a, b, c) (max(max((a), (b)), max((c), (d))))

数が多い場合は配列に入れて、qsort()でも掛ければいいんでない?
っていうか、10も20も並べたいとは思わないっしょ。
0771デフォルトの名無しさんNGNG
プロセス間での通信ソケットの良い受け渡しの仕方が
あるのなら教えてください
0772デフォルトの名無しさんNGNG
man sendmsg
0773721NGNG
もう少し細かく書きます。

過去にfork()で作った子プロセスAに対して、
親プロセスBがAccept()で取得したソケットのディスクリプタを
既存の子プロセスAに渡すことは可能なのでしょうか?

渡し方知ってる人お願いします。
0774771NGNG
721じゃないよ...スマソ
0775デフォルトの名無しさんNGNG
man recvmsg
0776766NGNG
>770
なるほど。ありがとう。
でも、gccでマクロの展開のされ方をみてみたら
766に書いたマクロの方が770に書いてくれたものより
少し効率がいいみたいです。
# 770の方gは、max((a),(b))が2回評価されてた。

だからmax3くらいなら、770みたく再帰的に書かないほうが
いいのかな。でも4つを越えると770の方がいいですね。

>768
テンプレートってCじゃ使えないですよね。
C++使えないス。
0777デフォルトの名無しさんNGNG
>>773
fork(2)する前にaccept(2)するのが確実。
linuxだったらAF_UNIXのSCM_RIGHTSで出来そう。
未確認です。・・・移植性ってあるのかな?
0778デフォルトの名無しさんNGNG
>>776
おいおい、Cプログラミングスレに行けよ。
それから「副作用」に気をつけろ。>>766は副作用があるとまずい。
gcc依存ならブロッ(以下適当なスレで
0779デフォルトの名無しさんNGNG
ご存じの方教えていただけないでしょうか。
XWindowsの現在の解像度ってどうやって取得すれば良いのでしょう?

xlibをベタに使ったアプリケーションを作っていて、
XCreateWindow(disp, RootWindow(disp, vinfo->screen),
0, 0,
x, y, ...); ← 画面サイズ
つまり、
全画面表示の際に、x, yに代入すべき値を知りたいわけです。
#さして深刻な問題でもないのですが、
#できないと気持ち悪くて気持ち悪くて……

当方が現在使っている環境は、
Linux Redhat 7.3, gnome, sawfish, XFree86-4です。
とりあえず、
何でもヒントになりそうなことを教えていただけると助かります。
0780デフォルトの名無しさんNGNG
DisplayWidth(display, screen_number)
0781779NGNG
>780
さっさり解決しました。ありがたやありがたや。
つーか、調べが足りなくて申し訳ありませんでした。
0782デフォルトの名無しさんNGNG
>767, 768, 769, 770, 778
すんません。別スレに逝きます。
linuxでプログラムを作ってたときの疑問だったんで
このスレかと思ったんですが、違ってました。
ありがとうス。

ところで、780の最後が気になるんですが。。。
>780
それから「副作用」に気をつけろ。>>766は副作用があるとまずい。
gcc依存ならブロッ(以下適当なスレで
0783771NGNG
>772,775,777
sendmsg/sendmsg で四苦八苦しながら解決
情報ありがとうございました。
移植性は現在無視の方向でコーディング中
0784デフォルトの名無しさんNGNG
>>783
アレって移植性ないんだっけ?
0785デフォルトの名無しさんNGNG
test ⅞
0786773NGNG
bsd,solaris,linux,unixなunix系環境なら問題なく動くかと
ただ動作の違いはある(と日記系の記事で見た)
みたいなんで本当に問題無いかはわかりません。
0787デフォルトの名無しさんNGNG
>>781
だまされるな。>>780はX Window Systemの関数であってXWindowsの関数ではない。
0788デフォルトの名無しさんNGNG
>>787
XWindowsの関数ではないって断言できるのかよw
0789デフォルトの名無しさんNGNG
>>788
次回リリースのXWindowsで追加しまつ。
0790デフォルトの名無しさんNGNG
>>789
>>788は「関数」かどうかを問題にしたいんじゃないだろか。
そう言う意味ではXWindowsの関数ではないし、X Window Systemの関数でもないね。

#私んとこのmanはXLIBとしか言ってないなぁ。w
0791デフォルトの名無しさんNGNG
そうじゃなくて、「『XWindows』なんてウィンドウシステムはない!」
「正式名称は『X』または『X Window System』または…でman Xを見よ」
みたいなことを>>787は言いたかったんだろうなあとは思うんだが。

でも正直そういう話は見飽きた。
0792デフォルトの名無しさんNGNG
>>791
そんなことは全員百も承知と思われ。
0793デフォルトの名無しさんNGNG
>>791
たいがいその手のつまらん指摘で悦に入ってるのはBSD厨なんだよな
0794デフォルトの名無しさんNGNG
UNIXでのプログラミングについてわかりやすくまとめたwebページ
ありませんか?
0795デフォルトの名無しさんNGNG
>>794
本買えぼけ
0796デフォルトの名無しさんNGNG
>>794
Stevensを買いなさい。教科書です。
0797デフォルトの名無しさんNGNG
Stevensって教科書だったのか?
てっきり人だと。人を買うわけ無いか。
0798デフォルトの名無しさんNGNG
>>797
おまえアホだろ(藁
0799デフォルトの名無しさんNGNG
>>798
えっ? 人を買うのか?
0800デフォルトの名無しさんNGNG
http://bbs.1oku.com/bbs/bbs.phtml?id=kkgogo
★管理人オススメ★
0801デフォルトの名無しさんNGNG
AI Stevens
0802デフォルトの名無しさんNGNG
>>797
既に死んでるので買えませぬ。
0803デフォルトの名無しさんNGNG
read Stevens とはよくいわれるんだが
0804デフォルトの名無しさんNGNG
lseekのlって何を意味しているの?(*^o^*)
0805デフォルトの名無しさんNGNG
"アルゴリズムとデータ構造"より使える、アルゴリズムの網羅本みたいな
定番の本はありませんか?
perlでいうラクダ本みたいな感じの。
0806デフォルトの名無しさんNGNG
>>804
根拠はないが、logicalではないかなあ。
>>805
スレ違い。
0807デフォルトの名無しさんNGNG
longっしょ。64bitはlong longだからllseek。ダサい。
0808デフォルトの名無しさんNGNG
大昔のCって関数からlong返せなかったって聞いたことがある。
time()が引数と戻り値の両方に値を返す理由がそれらしい。

想像するに、初期のUNIXのシステムコールだとseekはintを返して、
その後longを返せるseekの名前をlseekにしたんじゃないかな?
0809デフォルトの名無しさんNGNG
なんかllseekの戻り値ってlongなんですが・・・
0810デフォルトの名無しさんNGNG
>>809
どこの OS の話? Solaris の llseek は long long を返すよ。
0811デフォルトの名無しさんNGNG
4.3BSDはlongで、4.4BSDからlong longなんだそうだ。
0812デフォルトの名無しさんNGNG
>>811
それはllseekじゃなくてlseekの話だな。BSD系にはllseekはない。

今時のOSは、
・lseek()が最初から64bit値を返す (Tru64 や BSD 系OS)
・cc に下記のオプションを渡すと lseek() が 64bit を返すようになる
 (上記以外のOS):
 `getconf LFS_CFLAGS` `getconf LFS_LDFLAGS` `getconf LFS_LIBS`
のどちらかの筈。
後者の種類のUNIXの場合は、lseek64()も使えるが、その場合は下記の
オプションをつけるのが礼儀:
 -D_LARGEFILE64_SOURCE `getconf LFS64_CFLAGS` \
    `getconf LFS64_LDFLAGS` `getconf LFS64_LIBS`

後者の仕様の詳細は、ここヨメ:
ttp://ftp.sas.com/standards/large.file/x_open.20Mar96.html
0813デフォルトの名無しさんNGNG
>>812
なんかゴチャゴチャしてるね。近寄りたくないな。
0814迷いペンギンちゃんNGNG
次のようなプログラムを組みたいのですが。。。

・自分のPCのIPアドレス(もしくはMACアドレス)を入手
・IPアドレス(もしくはMACアドレス)をキーにファイルAから値BをGET
・ファイルCのとある項目Dの値に、先程の値Bを入力

OSはRedHat7.3、GNU Cを使おうと思っております

ネットワーク関係やってるんですが、
プログラミング、ほとんどやった事無くて・・
何から手を付けたらいいかさっぱりです

(というか、このスレでいいでしょうか? 他行ったほうがいい??
0815迷いペンギンNGNG
次のようなプログラムを組みたいのですが。。。

・自分のPCのIPアドレス(もしくはMACアドレス)を入手
・IPアドレス(もしくはMACアドレス)をキーにファイルAから値BをGET
・ファイルCのとある項目Dの値に、先程の値Bを入力

OSはRedHat7.3、GNU Cを使おうと思っております

ネットワーク関係に従事してるのですが、
プログラミング、ほとんどやった事無いんですよ・・
何から手を付けたらいいかさっぱりです

(そもそもこのスレッドでいいですか?
0816デフォルトの名無しさんNGNG
学校の宿題?
0817デフォルトの名無しさんNGNG
>>814-815
ttp://www.kokone.to/~kgt/diary.shtml?200302#11から#13あたりのような話?
0818迷いペンギンちゃんNGNG
二度書きスマソ
>>816
いや 恥ずかしい話 社会人です。
0819デフォルトの名無しさんNGNG
selectってひとつずつ調べるのとたくさん調べるのはどちらがいいですか?
0820デフォルトの名無しさんNGNG
沢山が望ましい
0821デフォルトの名無しさんNGNG
というか普通ひとつずつ調べるって使い方はしない
0822デフォルトの名無しさんNGNG
社会人にもなって2chで質問て・・・プププ
0823迷いペンギンちゃんNGNG
逝ったほうがいいかな?やっぱ
0824デフォルトの名無しさんNGNG
とりあえずここ
ttp://bookshelves.tripod.co.jp/index.html
ttp://tito.fc2web.com/2ch/tech/index.html
ttp://tito.fc2web.com/2ch/network/index.html
0825デフォルトの名無しさんNGNG
C++で、あるシグナルが送られてきたら終了するっていう感じにしたいのですが、
exit等で終了させるとデストラクタが呼ばれません。
どうすればシグナルハンドラ中でメインスレッドのスタック上のオブジェクトを正常に
破棄させ、かつ終了させる事ができますか?
0826デフォルトの名無しさんNGNG
class system_exit {
 int status;
public:
 system_exit(int s) : status(s) {}
};

int main()
{
 try {
  return hoge();
 }
 catch (system_exit e) {
  return e.status;
 }
 catch (...) {
  return 255;
 }
}
0827デフォルトの名無しさんNGNG
>>826
誰がスローするの?

>>825
シグナルハンドラからは無理。
Win32のような++例外との連携がない。
# __catchだっけ?
0828デフォルトの名無しさんNGNG
>>827
> Win32のような++例外との連携がない。

「C++例外」ね
Win32のは構造化例外処理(SEH)ってやつね。
0829デフォルトの名無しさんNGNG
デストラクタをatexit()で明示的に登録できないかな?
・・・ダメか。
0830デフォルトの名無しさんNGNG
>>827
シグナルハンドラから。
0831デフォルトの名無しさんNGNG
>>830
無理。
0832デフォルトの名無しさんNGNG
試したらヘルパールーチンの中でSEGVしてしまった。ダメだなたしかに。
0833デフォルトの名無しさんNGNG
setjmp/longjmp/シグナルみたいなunix由来のトリックは
c++との相性最悪ですがな。
0834デフォルトの名無しさんNGNG
SIGTERM とかで死ぬ場合はデストラクタは呼ばせられないのか。.
デストラクタで開放処理ができないんじゃC++使う意味が減るなぁ。
0835デフォルトの名無しさんNGNG
死ぬときにデストラクタ呼ばなきゃなんないという要件が意図不明なんだけど。
0836825NGNG
うーん。どうもシグナルハンドラからメインスレッドに例外を投げるのは無理みたいですね。
deflate(&z, Z_FINISH)しないとファイルが壊れちゃうんで SIGINT, SIGHUPで終了させる際に
処理をしたかったのですが、しかたないので開放する必要があるオブジェクトはvectorを
グローバル変数にしてそこに入れて使うことにします。
0837デフォルトの名無しさんNGNG
シグナルって、完全に非同期に起きるから、しょうがないのよね。
new や delete、malloc や free あたりだって async signal safe
じゃないから、使えないし。

イベントループがあるようなプログラムなら、定期的に timeout で
イベントループに戻ってくるようにしておいて、シグナル・ハンドラ
の方ではフラグ立てるだけ、イベントループの方ではそのフラグが
立ってたら例外を投げる… ってのが常套手段じゃないかなあ。
他になんか安全で良い手ってある?

Windows の構造化例外って、どうやってるんだろ? new や delete
でも安全にしようと思ったら、かなり遅くなりそうなもんだけど。
0838デフォルトの名無しさんNGNG
フラグを立てることでselect/poll可能なオブジェクトにイベントを
送るというのはどうでしょう。つまり、シグナルを受けるためだけの
pipe or socketpairを作って、メインループはpipeをselect/pollで
監視し、シグナルハンドラはpipeに(例えば1byte)writeする、と。
カーネルを介してるので安全だとは思う。良いかどうかは知らないが。

あえてシグナルで行くのであれば、sigsetmaskを見るといいかも。
これをうまく使うとシグナルとイベントとするイベントループができる
らしい。やったことないけど。

とか言ってる俺はwin32専門なワケだが。WaitForMultipleObject好き好き。
でもSEHは知らない。アレはc++の例外とは別枠だし。
0839デフォルトの名無しさんNGNG
>>838
VC++の場合、C++例外はSEHを使って実装されてたんじゃなかったか?
0840デフォルトの名無しさんNGNG
>>839
実現方法は知らないけど、混在はできないそうだ。
0841デフォルトの名無しさんNGNG
fork&execで、パイプでつながれた子プロセスを作ってるのですが、
子プロセス側でexecに失敗したときのエラーメッセージと、
親プロセス側で正常に子プロセスと通信できなかったときのエラーメッセージが
ぐちゃぐちゃにまざってしまいます。
fork&execはメジャーな手段だと思うのですが、
この問題について一般的な解決法はありませんか?
0842デフォルトの名無しさんNGNG
forkする前に実行ファイルを探して確認しておくとか。

それでもダメなら子プロセスではエラーメッセージを出さずに、親プロセスに
通知するとか。もう一つ子→親のパイプを作ってFD_CLOEXECしておき、execに
失敗したらそこにerrnoかなんかを送る。そのパイプがEOFになったら、execが
成功したことが親に分かる。
0843841NGNG
>>842
対応しようとすると結構めんどくさいんですね。
ふーむ。
ミナカッタコトニスルカナ
0844デフォルトの名無しさんNGNG
上のほうで malloc/freeが signal safeじゃないって話があったけど
シグナルハンドラでexitやって atexitで malloc/freeってのはOKなの?
0845デフォルトの名無しさんNGNG
>>843
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>

int invokeve(const char *filename, char *const *argv, char *const *envp)
{
  int ep[2], err, pid, n;

  if (pipe(ep)) return -1;
  if (fcntl(ep[0], F_SETFD, FD_CLOEXEC) || fcntl(ep[1], F_SETFD, FD_CLOEXEC) || (pid = fork()) < 0) {
    errno = err; close(ep[0]); close(ep[1]); err = errno; return -1;
  }
  if (pid == 0) {
    close(ep[0]); execve(filename, argv, envp); err = errno;
    write(ep[1], &err, sizeof(err)); _exit(-1);
  }
  close(ep[1]);
  if ((n = read(ep[0], &err, sizeof(err))) < 0) {
    err = errno; close(ep[0]); errno = err; return -1;
  }
  close(ep[0]);
  if (n > 0) {errno = err; return -1;}
  return pid;
}
0846841NGNG
>>845を見ながら組み込んでみたら、うまくいってしまった。
ほんとにこんな対応しかないのかなぁ?
0847デフォルトの名無しさんNGNG
>>846
俺の思い付いたうちでのベストな方法なんだが、どう不満なのか明確に教えて
もらえれば、改善することもできるかも知れない。
0848841NGNG
>>847
fork&execで簡単にぶつかる問題なのに、
「思い付いた」方法で対応しないといけないのが、どうも腑に落ちない。
もっと確立した方法があるような気がしてしまう。
0849デフォルトの名無しさんNGNG
「もっと確立した方法」==「気にしない」
0850デフォルトの名無しさんNGNG
execが失敗する要因って何?
0851841NGNG
>>849
かっこわるいなー。
>>850
存在しないファイル名を指定する、とか。
0852デフォルトの名無しさんNGNG
>>833
つーか、その辺まともに実装しているのはAda環境くらい。
OSと言語の壁はまだ高い。
0853デフォルトの名無しさんNGNG
C++例外とC例外(SEH)
http://www.microsoft.com/japan/developer/library/vccore/_core_exception_handling_differences.htm
0854デフォルトの名無しさんNGNG
>>851
POSIXでは、シェルがコマンドを実行できなかった場合はステータス127ということになるようだ。
で実際シェルではそれで通常問題にはならない。
0855デフォルトの名無しさんNGNG
>>852
Win32環境はわりかしマトモ。
unixみたいなグローバル変数依存のトリックは少ない。
0856デフォルトの名無しさんNGNG
>>855
fs:0にポインタを保存してるのはグローバル変数依存のトリックとはいわない?
0857デフォルトの名無しさんNGNG
>>856
いや、ユーザーにグローバル変数として
目に見えてるかどうか、という意味なんだけど・・・
0858デフォルトの名無しさんNGNG
Kdevelopという開発環境はどうですか?
Linux版のVC++と聞いたのですが本当でしょうか?
0859デフォルトの名無しさんNGNG
永久スリープはどうやればいいんでしょうか。
分からないので無限ループの中でnanosleepを使っていますが・・・
あ、言語はCです。
0860デフォルトの名無しさんNGNG
永久に起きないでいいなら
kill(getpid(), SIGKILL);

外部要因をひたすら待てばいいなら
(例えばsignal待ちとして)
select(0, NULL, NULL, NULL, NULL);
0861デフォルトの名無しさんNGNG
>>860
後者の場合です。

> man 2 select
> もし timeout に NULL (時間切れ(timeout)無し) が指定 さ
> れると、 select は無期限に停止(block)する。


これですね。よくわかりました。
ありがとうございました。
0862デフォルトの名無しさんNGNG
シグナル待ち専用システムコールpause(2)を何故使わないのかと(略
0863860NGNG
>>862
いやさ、入力の監視もあるかと思ったんだけど説明が億劫になって端折ったのよ。
0864デフォルトの名無しさんNGNG
>>863
signalが絡むとselect(2), pselect(2)の方がsigmaskなど考えるべき事が多い。
>>859の要件だけなら、pause(2)がよい。
ただsignalを受けることを考えたら、結局、
for (;;) { if ((pause() == -1) && (ERRNO == EINTR)) { continue; } else { perror("ありえへん"); exit(1); } }
0865デフォルトの名無しさんNGNG
-- age [perl-5.6.1]
#!/usr/bin/perl -w

$r = system("ls");
if ($r != 0) {
  die("system(\"ls\"): $!\n");
}

-- sage [gmake-3.79.1]
a:
  perl -w age | cmp f -

この2つのファイルでmakeを実行した時、
cmpで比較する対象のファイルfが存在しない場合に
age中に書いたdieが実行されるのは、なぜですか?
0866デフォルトの名無しさんNGNG
lsがSIGPIPEで落ちるから。
0867865NGNG
SIGPIPE: パイプ破壊: 読み手の無いパイプへの書き出し

読んだままですね。
どうもありがとう。
0868デフォルトの名無しさんNGNG
UNIXという考え方 とかいう本に testコマンドを使えば 転送元ファイルの存在確認が
必要ない〜みたいなことがかかれてましたが、あれって何をいってるんでしょうか?

結局 test コマンドの終了コードを調べて条件分岐ってことはしないとだめなわけですよね?

testコマンドってシェルスクリプト用だと思ってましたがCで組む場合も使うんでしょうか?


0869デフォルトの名無しさんNGNG
>>868
その本がボロクソなのか、お前の要約がボロクソなのか、読んでない漏れには判断つかん。
0870デフォルトの名無しさんNGNG
>>868
そんな記述あったっけ?
どうでもいいが、その本の作者は
シェルマンセーだと感じたんだが。
0871デフォルトの名無しさんNGNG
fileとか、soketのディスクリプタを、
他のプロセスにで送るにはどうしたら
いいのでしょうか?
 Win32なら、DuplicateHandleとかあるのですが。
0872デフォルトの名無しさんNGNG
>>871
dup/dup2 ?
0873デフォルトの名無しさんNGNG
>>871
>>771-783
過去ログ嫁や。
0874デフォルトの名無しさんNGNG
>>871
stevens (APUE) に書いてある。
0875デフォルトの名無しさんNGNG
UNIXの標準ライブラリのリファレンスは何処にありますか?
もしかしてGNUのglibcのドキュメントがそうですか?
他にありませんか?
0876デフォルトの名無しさんNGNG
>>875
UNIXの標準ライブラリってなんだろう。
manのセクション3にない? man 3 printfとか。
0877デフォルトの名無しさんNGNG
UNIXのAPI標準といったら、
SUSv3 (The Single UNIX Specification Version 3)
http://www.unix-systems.org/version3/
は外せないな。
0878デフォルトの名無しさんNGNG
KDevelopの解説書が和書では一冊も見つからないのです
0879デフォルトの名無しさんNGNG
>>878
洋書を探せば?
0880デフォルトの名無しさんNGNG
とあるアプリでログをとりたいのですがsyslog使うメリットってありますか?
それとも自前でファイルに出力したほうがいいですか?

運用者がsyslog.confで出力先をカスタマイズできること、
別マシンにログを飛ばせることがメリットだと思っていますが。

あと別マシンに送る場合UDPになるということですがTCPに変更することは可能ですか?
0881デフォルトの名無しさんNGNG
>876,877
どうもです。LinuxなのですがCのライブラリにある関数のリファレンス一覧が
見たくてどのような資料があるのかと思っています。
WindowsのCコンパイラを買うと関数のリファレンスが付いてきますがUNIXとwindows
の微妙な違いを知るには一番手っ取り早い気がします。最悪*.hやglibcの中身を
見て見る事もありかも知れませんが、、、
やはりmanしかないでしょうか。以前本を見たような気がするのですが、もう少し探してみます。
0882デフォルトの名無しさんNGNG
>>881
> やはりmanしかないでしょうか。

manしかないのではなくて、manがある。manを読め。
man -kと'See Also'で必要な物は見つかる。

> もしかしてGNUのglibcのドキュメントがそうですか?

違う。これはANSI Cの標準ライブラリ+α。まるで足りない。

ただ概観したいのなら、適当な本を読めばよい。ナットシェル等で出ている。
まあ、一冊じゃ全然足りないとは思うが。

>>880
> TCPに変更することは可能ですか?

・syslog-ngに置き換える。
・|named-pipe を使って、TCPで送るclientに渡す。serverも別途用意。
0883デフォルトの名無しさんNGNG
>>882
関数リファレンスを見たいだけなのにmanの使い方を
覚えなきゃならないなんて効率悪すぎ。

とりあえず、manで目次の使い方を教えれ。
キーワードを知らない状態でどうやって調べるんだ?
0884デフォルトの名無しさんNGNG
manのCのヘルプって日本語版あるのか?
0885デフォルトの名無しさんNGNG
>>883
MANPATH配下のmanページ(ファイル)をfindして中身をgrepすればいいだろう?
0886デフォルトの名無しさんNGNG
http://www.linux.or.jp/JM/index.html#search
0887デフォルトの名無しさんNGNG
>>883
Unix や Linux でCを使った開発をやりたいのなら、
man コマンドの使い方ぐらいは覚えないときついよ。
というか、他のコマンドはちゃんと使えてるのか?
0888デフォルトの名無しさんNGNG
man on WWWしか使ってませんが何か?
man on MS HTML Helpがあればそれを使いたいけど。
0889デフォルトの名無しさんNGNG
man の使い方って何?

man 3 printf
しか知らんが、他に何かすごい使い方でもあるの?
0890デフォルトの名無しさんNGNG
man -k
0891デフォルトの名無しさんNGNG
>>889
-f、-kとか-wくらい覚えておこうよ。
0892デフォルトの名無しさんNGNG
>>883
> とりあえず、manで目次の使い方を教えれ。

man -k ""

> 関数リファレンスを見たいだけなのにmanの使い方を
> 覚えなきゃならないなんて効率悪すぎ。

プログラミングしない方がいいと思う…
0893デフォルトの名無しさんNGNG
$ man -k ""
usage: apropos keyword ...
Error executing formatting or display command.
System command /usr/bin/apropos exited with status 256.
0894デフォルトの名無しさんNGNG
$ man -k ""
BUS_PRINT_CHILD(9) - print information about a device
BUS_READ_IVAR(9), BUS_WRITE_IVAR(9) - manipulate bus-specific device instance variables
BUS_SETUP_INTR(9) - create and attach to an interrupt handler
DECLARE_MODULE(9) - kernel module declaration macro
DELAY(9) - busy loop for an interval
DEVICE_ATTACH(9) - attach a device
DEVICE_DETACH(9) - detach a device
DEVICE_IDENTIFY(9) - identify a device, register it
DEVICE_PROBE(9) - probe for device existence
DEVICE_SHUTDOWN(9) - called during system shutdown
DEV_MODULE(9) - device driver module declaration macro
DRIVER_MODULE(9) - kernel driver declaration macro
IPXrouted(8) - IPX Routing Information Protocol daemon
KASSERT(9) - kernel expression verification macro
MAKEDEV(8) - create system and device special files
(snip)
0895デフォルトの名無しさんNGNG
漏れもman -k ""だと、>>893みたいなエラーになる。
いろいろとぐぐってみたんだけど、どういうワードで探せばいいか曖昧で、
結局のところ、分からずじまいで終わりました。
ただversionが古いとか、そんな話かな。

ゴミくさいけど、せっかく作ったんで上げとく。
http://cgi.members.interq.or.jp/hokkaido/asato/upload/jam3ddr/OB000769.txt
0896895NGNG
FreeBSD apropos(1)より:
> keyword は実際には拡張正規表現です。この書式に関する詳細は grep(1) マニュ
> アルページを参照してください。

man -k .
なんかすごくショックだ、今。
Linuxのapropos(1)には書いてなかったのに。
aproposのソースなりマニュアルなり、調べなかった漏れが悪いわけだが。
0897デフォルトの名無しさんNGNG
FreeBSD 4.5-RELEASEはman -k, apropos共に""渡しても平気だよ。

/usr/bin/aproposはshell scriptで、grepを呼び出しているだけだ。
grepの拡張正規表現はもちろん空語(形式言語のいうλあるいはφ)を含むから、
manかaproposの引数の扱い、たぶん引数/変数展開に問題があるのだろう。
Bugだから誰かfixしたら? (わしゃFreeBSD使いじゃないから嫌)

# man -k "file descriptor"とか大丈夫?
0898895NGNG
>897
即レスありがとう。
風呂入ってたから気付かなかったよ。

それで、環境を書いてなかった漏れが悪いわけだが、
漏れが使ってるのはLinuxのman-1.5jで、FreeBSDじゃないよ。
なんとなくFreeBSDのmanから検索して、man -k .を試してみたら動いた、と。
# Solarisのdirnameは引数無しだと'.'だけど、Linuxは引数が1つ必要だったりするような、
# そういう環境の違いかなと思って。

> man -k "file descriptor"
どうやら、だめみたい。unsafeが無いって怒られた。
んで、apropos "file descriptor"だと、fileとdescriptorに分割されました。
# /usr/sbin/makewhatisの53行目も怪しいわけで。
# ヘタレだから、恐くて試してないけど。
# 最新版は直ってるといいんだけど、manの入れ換えなんて、やったことないな。
0899デフォルトの名無しさんNGNG
最近、gccでLinuxプログラミングをはじめたものです。
DOSのlibファイルに相当するものはLinux・UNIXにもあるのでしょうか?
お願いします。
0900デフォルトの名無しさんNGNG
a
0901デフォルトの名無しさんNGNG
>>899
DOSのlibファイルなんてもうなんだったか覚えてない…
/usr/lib/lib*.a, /usr/lib/lib*.soが相当するのかな?
0902デフォルトの名無しさんNGNG
横からすまんが、
>>901
「おぼえていない」というのはなぜですか?
もうlibなんて使わない?dllでも普通はlibを使うんじゃ?
0903デフォルトの名無しさんNGNG
>>900
>>901
ありがとうございます。

続けて質問すみません。
名前さえわかれば検索できるかと思ったんですが、やっぱりわかりませんでした。
.aファイルは何で作るのでしょうか?
0904デフォルトの名無しさんNGNG
>>903
man libtool
0905デフォルトの名無しさんNGNG
>>903
http://www.linux.or.jp/JF/JFdocs/Program-Library-HOWTO/
0906デフォルトの名無しさんNGNG
.c
↓cc
.o
↓ar
.a
0907903NGNG
>>904
>>905
>>906
レスありがとうございます。
これならなんとかなりそうです。がんばります。
0908デフォルトの名無しさんNGNG

OS:Solaris8
コンパイラ:Sun WorkShopUP2

上記環境で、UCS4->SJISの変換の関数を作成していますが、どーしてもうまくいきません。
(wcstombs()==-1 になってしまいます。)

具体的には(全然具体的じゃないけど)
setlocale(LC_ALL,"");
wcstombs(sjis,ucs4,sjisLength);

この順番で呼び出しています。
LANG=jp_JP.PCKに設定してあり、setlocale()の返値もnilじゃなく、PCKになっています。
(/usr/lib/locale/にPCKがあるのも確認...)
setlocale(LC_ALL,"jp_JP.PCK")としてもダメでした。

Windowsだと上記手順で動くんですが、Solaris上だとうまく動いてくれません。

どなたか解決策をご存じありませんか?




0909デフォルトの名無しさんNGNG
>>908
まずerrnoを調べよ。全てはそれからだ。
0910デフォルトの名無しさんNGNG
>>908
Solarisのwchar_tってUCS4だっけ?
0911デフォルトの名無しさんNGNG
>>910
違う。だから908がうまくいかないのは当たり前。

>>908
iconv(3) で、まず "UCS-4" を "UTF-8" に変換してから、
次に "UTF-8" を "SJIS" に変換するってのはどうよ?
iconv_open(3c) や iconv_unicode(5) を参照。
0912デフォルトの名無しさんNGNG
>>911
iconv()があるなら直接UCS-4をSJISに変換すりゃーいいだろに。
0913911NGNG
>>912

少なくとも Solaris 8 だと、直接変換はサポートされてないんよ。
iconv_unicode(5) にはそう載ってるし、試してもそうなる。
0914デフォルトの名無しさんNGNG
>>913
Solaris 9でもそうだよ。
全ての組合わせ用意するのは辛いわな。/usr/lib/iconv/*.soが爆発しちゃう。
0915デフォルトの名無しさんNGNG
助言ありがとうです。ヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノ
無事うまくいきました(UCS4->UTF-8->SJIS)

コードの流用ばっかり考えてました。
iconv()って便利ですね。(恥ずかしながら、今回初めてしりました。
文字コード処理は初めてだったので)



0916デフォルトの名無しさんNGNG
awk '$1 ! /[a-z]/ {}' で syntax error っていわれるんですが、どこがおかしいのでしょうか?
GNU Awk 3.1.2(Cygwin)を使用しています。
0917デフォルトの名無しさんNGNG
激しくスレ違いな気が。
0918デフォルトの名無しさんNGNG
こっちか?
awkについて語るスレ
http://pc2.2ch.net/test/read.cgi/tech/1023556171/

あるいは UNIX/Linux 板か。
0919デフォルトの名無しさんNGNG
>>916です。
スレ違いのようなので >>918 に書き込みました。
どうもすみませんでした。
0920デフォルトの名無しさんNGNG
>>913,914に文句をいうわけではないが。

計算可能なもの直接、できなければUCS-4経由とすればいいと思うが。少なく
ともglibcやFreeBSDのはそうなってたはず。とくにUTF-8からは変換できるの
にUTC-4からはできないというのは、手抜き?
0921デフォルトの名無しさんNGNG
libiconvを使ってみるとか。
http://www.gnu.org/software/libiconv/
0922デフォルトの名無しさんNGNG
unix環境でC言語のコンパイルしているんだけど、
socket.hっていうファイルがどこにあるか分かる?
0923デフォルトの名無しさんNGNG
>> 922
/usr/include/sys/socket.h とか?
0924デフォルトの名無しさんNGNG
>>923
ありました!ありがとうございます!
0925デフォルトの名無しさんNGNG
C で system() や popen() からバックグラウンドでプログラムを起動した際
そのプログラムのプロセスIDを得る方法ありませんか?
ps | grep hoge | sed 's/ *//' | cut -f1 -d' ' > /tmp/fuga とか
ファイルに一々書き出してる始末なんですが、直接得る方法があったら教えて頂けませんか。
0926デフォルトの名無しさんNGNG
>>925
一般的な方法は無い。pidが欲しけりゃ自分で fork & exec せよ。
0927デフォルトの名無しさんNGNG
>>926
そうですか、わかりました。アドバイスの通り fork して exec することにします。
どうもありがとうございました。
0928デフォルトの名無しさんNGNG
>>925
どうせfileに書くなら、
system("foo & echo $! > /tmp/foo.pid");

psするとしてもfileに書くくらいなら、popen(3)して読め。
0929デフォルトの名無しさんNGNG
>>928
うわ、echo $! なんてできたんですね。これで popen で読む事にしました。
助かりました、どうもありがとうございます。
0930デフォルトの名無しさんNGNG
>>929
popen("foo & echo $!", "r")するなら、fooのstdout処理に要注意な。
popen("foo >/dev/null & echo $!", "r")とか
0931デフォルトの名無しさんNGNG
gccでANSI標準のspawn()が使えないのは
どうにかしてほしい
0932デフォルトの名無しさんNGNG
spawnってANSI標準だったのか。初耳だな。
gccってライブラリだったのか。

どうにもしないで下さい。
0933デフォルトの名無しさんNGNG
うわぁぁあん
0934デフォルトの名無しさんNGNG
>>931
ANSI Cの中の人も大変ですね。
glibcの中の人なら、posix_spawn(3)を持ってますが…
0935デフォルトの名無しさんNGNG
ストリーム入出力使ってた場合はゾンビになるには
fclose(stdin); fclose(stdout); fclose(stderr);
になるんですか?
0936デフォルトの名無しさんNGNG
ソンビになるには自殺して親に死亡確認をしてもらわないことになります。
0937デフォルトの名無しさんNGNG
>>936
いわずもがなながら、他殺でもOK。

>>935
もしかして、no controlling terminalな状態になるには、と聞きたいの?
0938デフォルトの名無しさんNGNG
>>937
デーモンになりたいって言いたかったんでは?
0939デフォルトの名無しさんNGNG
>>938
合体しづらいので、ます理性をなくす。
0940デフォルトの名無しさんNGNG
悪魔人間ですな。
0941デフォルトの名無しさんNGNG
SIGCHLD って、子が終了した時だけじゃなくて、とにかく
なにかシグナルを受けた時に呼ばれるんですか?
子に SIGSTOP/SIGCONT とか送っても呼ばれるので
子の終了を知りたいので困ってるんですが、普通は
どのようにするのでしょうか。
0942デフォルトの名無しさんNGNG
>>941
man waitpid
0943デフォルトの名無しさんNGNG
>>942
試してみます、どうもありがとうございます。
0944デフォルトの名無しさんNGNG
>>941
> SIGCHLD って、子が終了した時だけじゃなくて、とにかく
> なにかシグナルを受けた時に呼ばれるんですか?

Q: wait(2)って子が終了した時だけじゃなくて、
とにかくなにかシグナルを受けた時に復帰するんですか?

A: はい、そうです。そのsignalを受けた時の振る舞いが、
processが終了する、あるいはsignal handlerが呼び出される、
の場合、wait(2)は復帰します。SIG_IGNの時は復帰しません。
0945デフォルトの名無しさんNGNG
>>944
Q: waitpid(2)はどうでしょう?

A: 同じです。

Q: 私はどうすればいいのでしょう。

A: 自分の受け入れたい条件になるまでloopしてwait(2)し続けなさい。
0946ヽ(´ー`)ノNGNG
slab allocator について、良く分かるサンプルはありますか?
0947デフォルトの名無しさんNGNG
「良く分かる」がどういうことか良く分からないけど、
http://www.csn.ul.ie/~mel/projects/vm/
0948ヽ(´ー`)ノNGNG
>>947
えと、知りたかったのは「どういう使い方をするか」だったんです。
カーネルのソースを読んでたら何となく分かりました。ありがとう。
0949山崎渉NGNG
(^^)
0950デフォルトの名無しさんNGNG
アドレスからそのアドレスに割り当てられている変数名(文字列)が
取得したのですがどうすればいいですか?

int a;
int b;
int c;
:
:
printf("a=%d",a);
printf("b=%d",b);
printf("c=%d",c); ←こいつらをLOOPさせて1行にできないか?

0951デフォルトの名無しさんNGNG
>>950
くだらない質問を、マルチすんな!詩ね!
0952山崎渉NGNG
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0953堕天使NGNG
http://life.fam.cx/
0954デフォルトの名無しさんNGNG
XLIBのイベントの受け取りについて質問させてください。
XNextEvent(display, &event)の代わりに(ブロッキングさせたくないので)
XCheckWindowEvent(display, window, KeyPressMask | StructureNotifyMask | ExposureMask, &event)
を使おうとすれば、

switch(event.type){
case ClientMessage:
……

このClientMessageを拾えなくなるのですが、なんとかする方法はないでしょうか?
やりたいことは、単に
windowの×をクリックしたときに正常終了させたいだけなのですが……。
0955954NGNG
書き込んだ後に気がついたのですが、
いろいろ調べていると、webのソースコードのコメントに

ttp://wuarchive.wustl.edu/mirrors/NetBSD/NetBSD-current/xsrc/xfree/xc/programs/ico/ico.c
/*
* Unfortunately we can not use XWindowEvent and XCheckWindowEvent to get
* ClientMessage events, because there is no corresponding event mask. We must
* use XIfEvent and XCheckIfEvent and this function as a predicate. Better if
* Xlib had some kind of XWindowAnyEvent and XCheckWindowEvent. -- Casantos.
*/
XCheckWindowEventの代わりにXCheckIfEventを使えと、書かれてます。
わたしにはユーザー定義のXCheckIfEventは少し敷居が高いっす。
手元のX-Window プログラミング (日刊工業新聞社)には詳しく載ってませんし。

なにかXCheckIfEventの分かり易いサンプルないし、
XCheckWindowEventのまま小細工を施して
終了フラグを拾う方法はないでしょうか?
0956デフォルトの名無しさんNGNG
>>954
その君が探しあてた ico.c が、まさにサンプルになってないかい?
0957954NGNG
>956
実は、小細工の仕方を伝授してほしい、と消極的にアピールしたつもりだったのです。

キーボード入力でも終了させられるのに、
マウスのクリックでクローズしたいがためだけに、
XCheckWindowEventから、XCheckIfEvent
へ(あちこちと)変更する気力が湧かなくて……

もしくは、XCheckIfEventのもっと分かり易い(資料の揃った)サイトないっすか?

たしかに、マウスのクリックでクローズできないアプリなんぞは
欠陥品だと自嘲しつつsage。
0958デフォルトの名無しさんNGNG
man -k でエラーが出るやつはrootに頼んでindex作ってもらえ。
catman -? とかそんなかんじ。オプションは忘れた。
http://www.google.com/search?num=50&hl=ja&ie=Shift_JIS&q=catman%81@man%81@-k&lr=lang_ja
0959デフォルトの名無しさんNGNG
>>957
> もしくは、XCheckIfEventのもっと分かり易い(資料の揃った)サイトないっすか?

www.xfree86.orgのドキュメント。英語だけど詳しいよ。

> わたしにはユーザー定義のXCheckIfEventは少し敷居が高いっす。

Xlibはそういう人向けのinterfaceじゃないよ。
Widget作る人のためのinterface。xwininfoとかさ。
0960デフォルトの名無しさんNGNG
>>957
Toolkit(Motifなど)を使わない理由は?
>>959が言うように、敷居が高いならXlibでそこまでやらない方がいいと思うが。
0961954NGNG
>957
>www.xfree86.orgのドキュメント。英語だけど詳しいよ。
あ、そういやそうですね。サンクス。

>958
>Toolkit(Motifなど)を使わない理由は?
window枠無しの表示のために、
最初はシンプルにXLIBを使っていたのだけど、
window枠もつけようと、
そのままXLIBで書いていたら、嵌ってしまった。
0962ヽ(´ー`)ノNGNG
Toolkit でも、モノによっては枠無しの window を作れると思うのだが…。
0963デフォルトの名無しさんNGNG
Motifならリソースの設定のみ。<枠なし
0964デフォルトの名無しさんNGNG
枠なしにするなんて、XLIBかToolkitかとは関係ないだろ。
0965デフォルトの名無しさんNGNG
FreeBSD で j と k だけの less みたいのを作ってみたいのですが、
ioctl の使い方がよく分かりません。どうすればよいのでしょうか。
0966デフォルトの名無しさんNGNG
>>965
man 4 tty
0967山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0968デフォルトの名無しさんNGNG
Linux/Sun/BSD ベースで、PDFを生成するライブラリは
あるでしょうか?有償、無償でも構いませんが、ドキュメ
ントの品質に定評があるものを探しています。

用途は、店頭POP/チラシの印刷を考えてます。

スレ違いかなぁ・・・?だったらごめんなさいませ。
0969デフォルトの名無しさんNGNG
>>968
pdflibで検索。
質は作り方によるんじゃない?
0970デフォルトの名無しさんNGNG
970!!!

次スレ?
0971デフォルトの名無しさんNGNG
次スレ
http://game4.2ch.net/test/read.cgi/arc/1051156581/
0972デフォルトの名無しさんNGNG
>>970
立てる?
テンプレ案募集。

<タイトル>
UNIXプログラミング質問すれ (2)
</タイトル>

<1>
UNIXおよびUNIX clone環境一般のプログラミングに関する質問スレッド。

前スレ:
UNIXプログラミング質問すれ
http://pc2.2ch.net/test/read.cgi/tech/992057422/
</1>
0973デフォルトの名無しさんNGNG
unistd.hはwinのwindows.hみたいなもの?とりあえずインクルードしておけという・・・
0974デフォルトの名無しさんNGNG
>>973
そう思うなら取り敢えずunistd.hの中を見てみればいいだろ?
0975デフォルトの名無しさんNGNG
0976デフォルトの名無しさんNGNG
0977デフォルトの名無しさんNGNG
0978デフォルトの名無しさんNGNG
0979デフォルトの名無しさんNGNG
0980デフォルトの名無しさんNGNG
0981デフォルトの名無しさんNGNG
0982デフォルトの名無しさんNGNG
0983デフォルトの名無しさんNGNG
0984デフォルトの名無しさんNGNG
0985デフォルトの名無しさんNGNG
0986デフォルトの名無しさんNGNG
0987デフォルトの名無しさんNGNG
0988デフォルトの名無しさんNGNG
0989デフォルトの名無しさんNGNG
0990デフォルトの名無しさんNGNG
0991デフォルトの名無しさんNGNG
0992デフォルトの名無しさんNGNG
0993デフォルトの名無しさんNGNG
0994デフォルトの名無しさんNGNG
0995デフォルトの名無しさんNGNG
0996デフォルトの名無しさんNGNG
0997デフォルトの名無しさんNGNG
0998デフォルトの名無しさんNGNG
0999デフォルトの名無しさんNGNG
1000デフォルトの名無しさんNGNG
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。