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

このエントリーをはてなブックマークに追加
269デフォルトの名無しさん
UNIX のプログラムの設定ファイルって、プレーンテキストですよね?
こういうプレーンテキストを読み込む部分って、みなさん毎回作ってますか?
俺は今まで Win 厨で、設定はレジストリに保存していたので、
いままでUNIX でも設定をバイナリファイルに保存してました。
Berkeley DB のライブラリつかって。

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

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

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

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

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

cat /dev/serial > file

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

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

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

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

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


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

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

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

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

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
















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

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

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

あいうえお   春夏秋冬

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

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

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

もし他に何か方法をご存知の方いましたら是非教えてください。よろしくお願いします。
308名無しさん@お腹いっぱい。:02/05/06 13:48
>>306さん
私の説明不足でした。環境はSolaris8(SPARC)版で、TeraTermでtelnetして、
そこから開発しています。
309デフォルトの名無しさん:02/05/06 14:23
>>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使ってるんだろうな。
310デフォルトの名無しさん:02/05/06 14:32
>307
一応補足
nkfはShiftJis、JIS、EUCを"相互に"変換できるよ。
んで、それ以外にも色々機能もある。
一度 nkf --version を見てみると良いかも。
311名無しさん@お腹いっぱい。:02/05/06 14:35
>>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と、二つ帰ってきました。
>>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
だと思う。
313デフォルトの名無しさん:02/05/06 15:50
>>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 パッケージ名
あるの?
314デフォルトの名無しさん:02/05/06 15:55
>>312
> /usr/lib/locale/ja* は、いろんなコマンドで表示されるメッセージ
> が入ってる。LANG=jaならEUC。

locale情報全般。
他にもcoding system情報なんかが入ってる。shared libraryになって。
315311:02/05/06 19:04
お返事有難うございます。

以下が私の/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つ付けた意味です。

質問続きで申し訳ありません、もう一度何かアドバイスを頂けたら幸いです。どうかよろしく
お願いします。
316デフォルトの名無しさん:02/05/06 19:45
>>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でも可。
317311:02/05/07 01:35
大変有難うございます。皆様のご教授のおかげでやっと出来ました。
ちなみに環境は以下のようにしました。
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とするには、何か方法が
あるのでしょうか。再度質問し申し訳ありませんが、どうか皆様アドバ
イスをください。
>>317
nkf -e data | tr -d '\200-\377'
319デフォルトの名無しさん:02/05/07 08:39
>>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
あたりを読んどいた方がいいかもね。
320デフォルトの名無しさん:02/05/13 23:03
シグナルハンドラからC++ exceptionをthrowできませんか?
試してみろ
322320:02/05/13 23:09
unexpected() にたどりついて氏んだよ on debian woody, Linux-2.4
じゃあ駄目ってことだな
324320:02/05/13 23:16
そもそもシグナルハンドラのコンテキストと
gccにおける例外の実装を知らないんでなんとも言えない
んだが、なんとなくできなさそうな気がしててやっぱりできなかった

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

回答の予想
「longjmp()でも使っとけ」
>>324
例外出すのは良いとしてどこでtryしてcatchするの?別スレッドで無限ループ?
326320:02/05/13 23:20
やりたかったのは
tcpのread(2)とかでSIGPIPEを処理すること
だったのね

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

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

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

で、それぞれ数字が並んでいるんだけど、第4の項目で整列ってのは販売個数で整列って考えてもいいですか?
課題の意味が判らない場合は教官に聞く。
マジで困ってます。

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

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

UNIXプログラミングと何の関係もないだろがボケがぁ
>>339

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


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

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


zsh: command not found: data
だが何か?

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

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

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

unix初心者で全くわかりません。どなたか教えていただけないでしょうか?
>>350
C言語初心者といえ。UNIX初心者に失礼だ。
後、すれ違い。
>>350

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

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

% ls -l /dev/js0

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

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

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

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

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

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

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

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

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

つか、ふつー、GTKとかQTとかつかうっしょ。
いまどきXLIB生は……
386デフォルトの名無しさん:02/06/17 21:28
>>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

ちみのやりたいことは、こん中にあるのかな〜。
387デフォルトの名無しさん:02/06/17 21:41
Linuxでグラフィックプログラミングするなら、Java2あたりが手軽
かも....。XやGTKだとハマりまくる「任意の色形式のフレームバッファ」
が簡単に使える(BufferedImage)からね。
Java糞重い
>>386
グラフィック関係のライブラリってこんなにあるんだ。
ちょっと感動。
390デフォルトの名無しさん:02/06/18 00:05
質問です。自分自身の実行ファイルのパスを知る方法ってありますか?
argv[0]というのはシェルから渡されるパラメータに過ぎないですよね。
削除されてもinodeは生きてると思うんですが・・・
システムによる。
たとえばprocファイルシステムを有効にしてあるLinuxなら、
/proc/self/exeをreadlink()すれば分かる。
SDLでは駄目かね?
393384:02/06/18 17:17
>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ありましたらお願いします。
>>393
寝ろ。C言語の参考書でも抱いて。
>>390
> 削除されてもinodeは生きてると思うんですが・・・

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

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

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

UNIXには慣れていないので苦戦していますが、
現在試しているところです。
ありがとうございます。

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

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

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

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

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

/* 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
403 は可能・不可能の話はしてないと思われ。
/proc/$PID/exeとか/proc/$PID/fd/*は普通のsymlinkじゃないから、
元のファイルを削除してもアクセスもexecもできる。
ということをいってるんですが、>>403を読んでますか?
407デフォルトの名無しさん:02/06/20 20:52
ホームディレクトリのパスとかユーザー名とかを調べる関数が
あったと思うんだけど、どっかに一覧表があるところ無い?
>>407
man intro とか /usr/share/man/man2 とかか? たぶん探しているのは
getpwent() とか getpwnam() だと思うが。
> /proc/$PID/exeとか/proc/$PID/fd/*は普通のsymlinkじゃないから、
> 元のファイルを削除してもアクセスもexecもできる。

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

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

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

いえ、実現できるなら依存しようが構いません。
unix標準(?)の方法があるなら、それにしようと思ったまでです。
>>417
同期非同期
421名無しさん:02/06/21 23:54
>>418
ごめんなさい。
UNIXで考えていたものでここでも良いかと。

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

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

お願いいたします.
>>425
文字コード書いてないので2バイトコードの変則的な扱い方。

char a[2];

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

fprintf(fp2, "%s\n", ch)
で、NUL terminateされてないchar*を渡してSEGVと。
>>427
書いててなんか違和感あったんだよなぁ・・・w
>>425
fgetc()の戻り値はint。
430425 :02/06/27 23:34
>>426
あ,すいません
文字コードはEUCの筈です

>>429
だから,int chで宣言するんですね!
1つ賢くなりました
>>430
> だから,int chで宣言するんですね!

違う。EOFがあるから。
EOF \x1a
433名無資産@ヘタレ部:02/06/28 14:31
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に変換するのは面倒っちいけどな。
>>433
> UCS-2(2バイトユニコード)は、状態がないのでやや扱いやすい。
UCS-2とUTF-16の区別のつかない奴にサロゲート喰わされて落ちる罠。
435425 :02/06/28 20:57
すいません,レスを読んでいて自分の無知が恥ずかしくなりました...
どうやらC言語で私のやりたいことをする為には,スキル不足のようです

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

vmwareを作りたいのですが、どうやればいいんでしょうか?
>>437
UNIXのシステムコール全部Widows新居食。
439通りすがりのキティ:02/06/28 21:18
だれかdonutPみたいなの作って。マウスでコマンド入力できるやつ。
お前が作れとは言わないで。作れないし。
>>438
それは Cygwin だろ。UNIX つーか POSIX だが。

>>437
VMWARE は仮想 AT コンパチマシンを作ってる。
Bochs というオープンソースのものがあるので、
関連資料とソースを読むといい。
plex86というのもあったような。
>>439
マウスでコマンド入力ってなによ?
マウスジェスチャーのこと?

http://optimoz.mozdev.org/gestures/
こんなの?
443435:02/06/28 22:11
>>436

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

ありがとう!
444通りすがりのキティ:02/06/28 23:57
>>442 そうです。
445デフォルトの名無しさん:02/07/03 02:36
galeonにすでに実装されてますた。
446デフォルトの名無しさん:02/07/03 13:32
>>436
あいうえお数えるの大変でない? kaとa。
ローマ字にこだわらなきゃいいのかな

私ならperlかなにかで1文字を1文字+改行に置き換えて
sortしてuniqすると思うけど、でもそれじゃプログラム板っぽくないね。
こんなんで。
$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
448ピルゲイツ:02/07/03 16:40
Motifの良い参考書って無いですか?
本屋巡ってもQtとかGTKの参考書しか無いし・・・
>>446
unixな人たちは気づきにくいかもしれませんが
ハンカクカナというものがあるのです。

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

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

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

ctrl+d が必要ですが
452名無し:02/07/05 09:47

>450
さんくす
>>450
set a=$<
gtkとかいくつかあるようだけど、
LinuxでGUIやるなら何がいいですか。
GUIイランというのはなしでお願いします。
455デフォルトの名無しさん:02/07/09 01:52
Kylix
456shige:02/07/09 01:58
>>454
何が書きたい?
457デフォルトの名無しさん:02/07/09 02:06
Qt
Xlib
459デフォルトの名無しさん:02/07/09 09:56
LinuxでMIDI関係のソフト開発しようとしています。
それで、Linuxで秒未満の時間管理をする方法を調べています。
Windows APIのtimeGetTime()相当の機能が欲しいのです。

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

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

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

厨なんで質問の意図わかりにくいかとは思いますが
何卒オナガイシマス
>>463
基本的にキューってのは一方通行。

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

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

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

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

>>つーかその前にポインタが違うだろ。
ということはメッセージキューを使った場合、文字列は送れないのですか?
468465:02/07/11 14:55
あ、char型配列にすればいいのか。
スマソ。
>>465
marshalingについて調べてみ。
470463:02/07/11 22:42
みなさんありがとうございます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

> unix版はgtk版は使えるだろうな。

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

519デフォルトの名無しさん:02/08/20 23:57
あるソースをコンパイルとリンクするときに

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

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

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

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

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

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

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

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

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

漏れの知っているのとは違うけどな。
545むけ:02/08/30 01:14
>>540
あふぉ。
546  :02/08/30 13:29
UNIXでGUIプログラミングするなら何がおすすめですか?
できるだけ簡単にウィンドウ出せるやつが希望です。
>>546
Qt か GTK+
>>546
おもしろそうなのは Qt。
MFC みたいなのは Gtk。
簡単そうなのは Kylix。

さて、最後に笑うのは?
>>548
窓を出すだけで良いなら Tcl/Tk が最も楽だとは思うが。ちょっと手の込んだ
プログラムを書こうとすると Tcl っつーのに嫌気がさすけど(w
>>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;
}
>>550
google 様のお告げによると、Hello World はこんな感じだそーだ。

#!/usr/local/bin/wish
button .hello -text "Hello, World!" -command { exit }
pack .hello
>>551
Tcl って全く知らんのだけど、これって
% wish hoge
でいいの?

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

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

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

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

なんかもあるやね。あとは smalltalk 系で Squeak とか。
>>556
google にはお伺い立てましたか?
>>553
MFC は楽じゃぁないよ。

>>556
Kylix 以外は C++
Qt が直感的で分かりやすいと思う、が人気はどうかな?
560shige:02/08/30 18:28
>>556
Qt -- C++
Gtk -- Eiffel,C,C++,Ruby,Gtk.Python,Scheme,C# etc...
Kylix -- O-Pascal,C++(>kylix3)
561559:02/08/30 18:30
>>559
GTK-- を使わないと C++ 出来ないか? (?
562shige:02/08/30 18:35
もちろんC++はGtk--の意だ。
schemeはguile-gtkみたいに。
563棄教者 ◆witdLTi2 :02/09/06 18:01
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 のどちらを使うといいでしょう。
>>563
getcwd() で良いんじゃないの?

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

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.〜 を使うアプリケーションの名前でも構いません、
何方かご教授をお願いします。
>>565
g++でcompileしてるの?
ちゃんとextern "C"されてる?
http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html
>>565
エラーメッセージを Copy & Paste しようよ。
568565:02/09/18 07:24
レスを頂いたのに、返答が遅れて申し訳御座いません。

>>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
最新のソースの冒頭は次の様になっています。
#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 のファイル名だけ構いません、
宜しくお願いします。
>>569
> こうしないと、md5.h の MD5_Init が MD5Init にならないからです。
> /lib/libmd5.a の中は MD5_Init ではなく MD5Init なので、こうしました。

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

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

慌ててたのでファイル名とかを伏せ忘れますた。鬱。。。
572565:02/09/18 09:22
ハイ、一発で見つかりました。。。
/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_〜() で先に進めそうです。
ありがとう御座いました。
573566=570:02/09/18 15:39
>>571
> 暗黙の型宣言の方は、warning ではなく error になるので、

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

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

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

お蔭様で [ ほげほげ ] 出来る様になりました。
ありがとう御座いました。
575565:02/09/18 19:43
沢山書いてすみません、訂正です。。。

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

厨丸出し。。。鬱出汁脳。。。
576デフォルトの名無しさん:02/09/24 07:52
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();
}
577576:02/09/24 07:58
gtkのサンプルのscribble-simple.cではbutton_press_eventはちゃんと起きてるんで
すがkey_press_eventシグナルをdrawing_areaでは起こせないんでしようか?
(実際にコードを追加してみましたが起こっていないようです)
578デフォルトの名無しさん:02/09/24 08:28
と思ってたら別の方法でできた…。
key_press_eventはgtk_window_newで作られるウィジェットではちゃんと発行される
ので
draw_areaを大域変数にしてやってkey_press_eventが発行された時にkey_press_event
コールバックの中でdraw_stringしてみたらでけた。
579デフォルトの名無しさん:02/10/03 13:22
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$
>>579
とりあえず gcc -v で、実際に何が起きてるかチェック。
581デフォルトの名無しさん:02/10/11 17:03
m4の4ってなんすか?
582566=570:02/10/11 21:43
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群はめちゃくちゃ質が高くてお勧めです。
583581:02/10/11 22:40
>>582
ありがとう!
584デフォルトの名無しさん:02/10/13 12:45
struct sockaddr_in についてですが、
ネットで調べると、sockaddr_in構造体の中に
sin_familyメンバが存在するようですが、
netinet/in.hを見てみても、そういう記述が無いのですが、
どこに書いてあるんでしょうか?
OS依存じゃないかなあ・・・
/usr/includeディレクトリ以下をgrepしてみれば?
586デフォルトの名無しさん:02/10/13 13:33
>>584
Linuxなの?
__SOCKADDR_COMMON (sin_); はあるでしょ?
__SOCKADDR_COMMON()は、/usr/include/bits/sockaddr.hに。

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

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

>>590
見てみます。
592デフォルトの名無しさん :02/10/17 14:52
シェルスクリプトをCのソース上からコールするにはどうすればいいんですか?
tmpfileを使ったテクニックとして

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

fclose(fp);
close(fd);

// 以降mfdを使い回す。

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

>>604 むしろ板違い?
607デフォルトの名無しさん:02/10/17 17:49
>>604
シェルプログラミング って言いませんか?
そんな本も出てるけど
608デフォルトの名無しさん:02/10/17 17:53
>>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());
}
};

みたいな?
609608:02/10/17 18:00
インデントが切れてました失礼…

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());
  }
};

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

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

ま、何にせよ板違い。
>>610
お前はsystem()禁止!!
始めまして。

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

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

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

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

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

それぐらい、やれって?(汗;
>>620
OSがやってくれるんだから自前でやる必要ないじゃん。
622620:02/10/18 12:21
失敬!
>594
もとい
>617
でした。
>>619
UNIX板でもシェルスクリプトは基本的にくだ質扱いだよ。
あれをプログラミングとかいうならバッチファイルも
プログラミングなの?そうじゃないよね。
程度の差はあれど
シェルスクリプトもワンライナーもプログラミングだと思うが
HTMLだってWebアプリケーションとかいう。
626624:02/10/18 16:04
ただのHTMLを人力で書くのをプログラミングというのには同意しかねる
>>624
激シク同意
>>609
どうでもいいが、fclose()したあとでclose()はいらんだろ。
あとfileno()の引数忘れてるぞ。
>>611
execじゃないのか?systemは使ってないだろう…。

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

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

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

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

漏れ楽したいだけかも。
HSP は屑!
>>633
HSP for UNIX作ってからいえ(藁。
>>634
それだ!

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

プロセスの使用メモリ量を調べたいのだが、
int getrusage(int who, struct rusage *usage);
ってものの、rusage構造体のどのメンバーを
調べればよいか知っている方いませんか?
manみても、よくわからんし、
ru_maxrssかなぁなんて思っていたのだが、机上計算と違う値を返すし。
OSとバージョンぐらいは書いたほうが・・・
man getrusage
>>635
HSPスレでは怖くて聞けんのでちょっと教えてくれ。
あそこでBNFといってるのはBackus-Naur Form以外の何かなのか?
>>636
机上計算をどうやったのか
2.4かーねるのコンパイルは
gcc3以上じゃないとだめですか?
>>641
そんなことはない。
>>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

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

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

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


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

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

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

661657:02/12/07 14:09
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]かと…(汗)
お願いします。
>>661
記号が変。
>>662さん
“”の事ですか?
実際はTera Term上で手打ち入力したので大丈夫だと思うのですが、
見本はWordファイルでした。
教師は「コピペじゃ動かないから」
と嬉しそうでしたよ・・・。
664657:02/12/07 15:06
↑663=657です
>>663
echo -nの-も実体参照になってる。
>661はWordから貼ったのか? 自分で打ったやつを貼れよ。
じゃないとタイプミスとかあっても分かんないだろ。
666657:02/12/07 15:22
>>665
すみません。前述の通り、学校のサーバーにアクセスできない状況なので
自分のファイルにアクセスできません。
アクセス出来次第そうさせていただくつもりですが、
>>658-659さんあたりのsetがどうのとかがわからないので教えていただけたらな、と・・・
>>666
少なくとも、>657の二行をファイルに落してcshに喰わせた限りじゃ、正しく
動く。たぶん変数名を打ち間違ってるとかじゃないの。
668657:02/12/07 15:37
>>665さん
すみません、「さん」わすれてました

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

$ set datetoday=`date`

した後で、

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

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

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

> set datetoday=`date`

した後で、

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

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

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

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

>>670
シェルスクリプトの勉強するなら B Shell 系使った方が良いよ。
sh とか bash とか zsh ね。
>>675
BSDもいいんだけど、なんでいまだにcshなんぞに拘るのかが分からんよ。
実のところ一月くらいしか使ったことないけど、昔のSunOSで。
677657:02/12/07 18:54
早速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はそんなにできないと思います。
生徒の質問に答えるのはアシスタントの学生ですし。
>>677
>>661の最初の行をいれてみろ。ただしcygwinはtcshしかないので
#!/bin/tcsh

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

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

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

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

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



                                   誰か応募して真相を確かめて来い
697デフォルトの名無しさん:02/12/30 15:02
VB = Venture Business の罠
698デフォルトの名無しさん:02/12/30 15:06
>>697
休日の条件が詳しく書かれてないから嫌だ。
699デフォルトの名無しさん:02/12/30 15:08
697 ではなく
696 の間違い
ごめんなせい
700デフォルトの名無しさん:02/12/30 15:23
     ∧_∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ( ´∀`)/<先生!こんなのがありました!
 _ / /   /   \___________
\⊂ノ ̄ ̄ ̄ ̄\
 ||\        \
 ||\|| ̄ ̄ ̄ ̄ ̄||
 ||  || ̄ ̄ ̄ ̄ ̄||
http://muryou.gasuki.com/mona/
701デフォルトの名無しさん:03/01/05 15:50
保守age
702デフォルトの名無しさん:03/01/05 15:55
ウィナーですが前からあこがれていました。
そんな僕です。
学校でSunOS+Cしかやったことありません。
一応POP3プロトコルを使って受信メール一覧表示プログラムまでは書いた事あります。
X-ToolKitとForkとシェアードメモリを使ってウィンドウ間チャット作った事あります。
>>702
自己紹介かい?
704IP記録実験:03/01/08 21:53
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を提出することがある。
正月からエロゲするような人間に彼女なんかいるわけない、、


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

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

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

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

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

それはやふーとかでも可能だと思いますけど
>530
俺はマンコとかいてるがIPとられても怖くないぞ。もし文句あってもやめないからな!!

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

★ボランティアさんと一緒★ Part8
http://qb.2ch.net/test/read.cgi/accuse/1039532593/563-
>アクセスログってなに?

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

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

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

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

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

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

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

んじゃ!

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



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

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


・・・次逝ってみよう!
あげ
それは単に業者への制裁措置じゃ?
通ることもあるわな。

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

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

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

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

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

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

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

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

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

754山崎渉:03/01/23 20:04
(^^)
755デフォルトの名無しさん:03/01/26 22:02
opensshの実装を読んでいて疑問があったので質問します。

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

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

cmd="ls -al";

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

cmd="exec ls -al";

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

どなたか詳しい方、正確な意味を教えていただけませんか?
よろしくお願いします。
756デフォルトの名無しさん:03/01/26 22:40
>>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を一つ節約できます。
757デフォルトの名無しさん:03/01/30 19:22
>>756
その例ではtestが表示されませんでした。
新しくプロセスを作らず、既存のプロセスの上で走らせるため、
そこでプログラムが終了した場合は処理が戻ってこないという事ですか?

systemを使った場合は戻ってくるのはなぜでしょう??
>>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
となる。
>>758
なるほど。詳しい説明助かりました。
execを使っているところと使っていないところがあったのは、
完全にプログラマの気まぐれだったわけですね。
理解できました。ありがとうございます。
>>759
気まぐれだと言い切れるかは微妙。
SIGCHLDの関係なんかもあるし。
761758:03/01/31 11:20
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の出力に出てこない。
>>760
manには、system関数はSIGCHLDをブロックする、と書いてありました。
見た感じでは単純に実行したいだけの模様ですし、
文脈的にもほぼ同じ意味で使っているので、たぶん気まぐれでしょう。

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

それは何の関係よ?
764デフォルトの名無しさん:03/02/02 13:57
Winsockと繋げられるソケットはどうやって作ればいいのでしょうか?
>>764
別に何も考える必要は無いよ。普通にTCPだかUDP投げれば良し。
766デフォルトの名無しさん:03/02/02 15:57
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)))
とかやってるんですが、これだと数が増えると面倒です。
だれかいい方法知ってたら教えてください。
別に無理にマクロじゃなくてもいいとは思いますが、
気になって。。あとマクロだと便利だし。
767デフォルトの名無しさん:03/02/02 16:17
激しくスレ違い
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
       可変長引数とテンプレ使え。
768 名前:デフォルトの名無しさん :03/02/02 16:18
       可変長引数とテンプレ使え。

              “と”?
たかだか数個でいいならマクロでも簡単に書ける。

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も並べたいとは思わないっしょ。
プロセス間での通信ソケットの良い受け渡しの仕方が
あるのなら教えてください
man sendmsg
773721:03/02/02 22:06
もう少し細かく書きます。

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

渡し方知ってる人お願いします。
774771:03/02/02 22:08
721じゃないよ...スマソ
man recvmsg
776766:03/02/02 23:06
>770
なるほど。ありがとう。
でも、gccでマクロの展開のされ方をみてみたら
766に書いたマクロの方が770に書いてくれたものより
少し効率がいいみたいです。
# 770の方gは、max((a),(b))が2回評価されてた。

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

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

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

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

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

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

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

想像するに、初期のUNIXのシステムコールだとseekはintを返して、
その後longを返せるseekの名前をlseekにしたんじゃないかな?
なんかllseekの戻り値ってlongなんですが・・・
>>809
どこの OS の話? Solaris の llseek は long long を返すよ。
4.3BSDはlongで、4.4BSDからlong longなんだそうだ。
>>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
>>812
なんかゴチャゴチャしてるね。近寄りたくないな。
814迷いペンギンちゃん:03/02/17 14:05
次のようなプログラムを組みたいのですが。。。

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

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

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

(というか、このスレでいいでしょうか? 他行ったほうがいい??
815迷いペンギン:03/02/17 14:06
次のようなプログラムを組みたいのですが。。。

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

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

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

(そもそもこのスレッドでいいですか?
学校の宿題?
818迷いペンギンちゃん:03/02/17 19:24
二度書きスマソ
>>816
いや 恥ずかしい話 社会人です。
selectってひとつずつ調べるのとたくさん調べるのはどちらがいいですか?
沢山が望ましい
というか普通ひとつずつ調べるって使い方はしない
822デフォルトの名無しさん:03/02/18 00:14
社会人にもなって2chで質問て・・・プププ
823迷いペンギンちゃん:03/02/18 00:25
逝ったほうがいいかな?やっぱ
C++で、あるシグナルが送られてきたら終了するっていう感じにしたいのですが、
exit等で終了させるとデストラクタが呼ばれません。
どうすればシグナルハンドラ中でメインスレッドのスタック上のオブジェクトを正常に
破棄させ、かつ終了させる事ができますか?
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;
 }
}
827デフォルトの名無しさん:03/02/18 13:53
>>826
誰がスローするの?

>>825
シグナルハンドラからは無理。
Win32のような++例外との連携がない。
# __catchだっけ?
>>827
> Win32のような++例外との連携がない。

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

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

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

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

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

それでもダメなら子プロセスではエラーメッセージを出さずに、親プロセスに
通知するとか。もう一つ子→親のパイプを作ってFD_CLOEXECしておき、execに
失敗したらそこにerrnoかなんかを送る。そのパイプがEOFになったら、execが
成功したことが親に分かる。
843841:03/02/21 00:39
>>842
対応しようとすると結構めんどくさいんですね。
ふーむ。
ミナカッタコトニスルカナ
上のほうで malloc/freeが signal safeじゃないって話があったけど
シグナルハンドラでexitやって atexitで malloc/freeってのはOKなの?
>>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;
}
846841:03/02/22 17:16
>>845を見ながら組み込んでみたら、うまくいってしまった。
ほんとにこんな対応しかないのかなぁ?
>>846
俺の思い付いたうちでのベストな方法なんだが、どう不満なのか明確に教えて
もらえれば、改善することもできるかも知れない。
848841:03/02/22 22:13
>>847
fork&execで簡単にぶつかる問題なのに、
「思い付いた」方法で対応しないといけないのが、どうも腑に落ちない。
もっと確立した方法があるような気がしてしまう。
「もっと確立した方法」==「気にしない」
execが失敗する要因って何?
851841:03/02/23 00:38
>>849
かっこわるいなー。
>>850
存在しないファイル名を指定する、とか。
>>833
つーか、その辺まともに実装しているのはAda環境くらい。
OSと言語の壁はまだ高い。
>>851
POSIXでは、シェルがコマンドを実行できなかった場合はステータス127ということになるようだ。
で実際シェルではそれで通常問題にはならない。
>>852
Win32環境はわりかしマトモ。
unixみたいなグローバル変数依存のトリックは少ない。
>>855
fs:0にポインタを保存してるのはグローバル変数依存のトリックとはいわない?
>>856
いや、ユーザーにグローバル変数として
目に見えてるかどうか、という意味なんだけど・・・
858デフォルトの名無しさん:03/02/24 23:53
Kdevelopという開発環境はどうですか?
Linux版のVC++と聞いたのですが本当でしょうか?
859デフォルトの名無しさん:03/02/25 14:17
永久スリープはどうやればいいんでしょうか。
分からないので無限ループの中でnanosleepを使っていますが・・・
あ、言語はCです。
永久に起きないでいいなら
kill(getpid(), SIGKILL);

外部要因をひたすら待てばいいなら
(例えばsignal待ちとして)
select(0, NULL, NULL, NULL, NULL);
>>860
後者の場合です。

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


これですね。よくわかりました。
ありがとうございました。
シグナル待ち専用システムコールpause(2)を何故使わないのかと(略
863860:03/02/25 17:20
>>862
いやさ、入力の監視もあるかと思ったんだけど説明が億劫になって端折ったのよ。
864デフォルトの名無しさん:03/02/26 02:37
>>863
signalが絡むとselect(2), pselect(2)の方がsigmaskなど考えるべき事が多い。
>>859の要件だけなら、pause(2)がよい。
ただsignalを受けることを考えたら、結局、
for (;;) { if ((pause() == -1) && (ERRNO == EINTR)) { continue; } else { perror("ありえへん"); exit(1); } }
865デフォルトの名無しさん:03/03/02 03:40
-- 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が実行されるのは、なぜですか?
lsがSIGPIPEで落ちるから。
867865:03/03/02 17:59
SIGPIPE: パイプ破壊: 読み手の無いパイプへの書き出し

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

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

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


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

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

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

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

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

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

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

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

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

とりあえず、manで目次の使い方を教えれ。
キーワードを知らない状態でどうやって調べるんだ?
manのCのヘルプって日本語版あるのか?
>>883
MANPATH配下のmanページ(ファイル)をfindして中身をgrepすればいいだろう?
>>883
Unix や Linux でCを使った開発をやりたいのなら、
man コマンドの使い方ぐらいは覚えないときついよ。
というか、他のコマンドはちゃんと使えてるのか?
man on WWWしか使ってませんが何か?
man on MS HTML Helpがあればそれを使いたいけど。
man の使い方って何?

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

man -k ""

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

プログラミングしない方がいいと思う…
$ man -k ""
usage: apropos keyword ...
Error executing formatting or display command.
System command /usr/bin/apropos exited with status 256.
$ 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)
漏れもman -k ""だと、>>893みたいなエラーになる。
いろいろとぐぐってみたんだけど、どういうワードで探せばいいか曖昧で、
結局のところ、分からずじまいで終わりました。
ただversionが古いとか、そんな話かな。

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

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

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

# man -k "file descriptor"とか大丈夫?
898895:03/03/25 04:50
>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の入れ換えなんて、やったことないな。
899デフォルトの名無しさん:03/03/25 18:06
最近、gccでLinuxプログラミングをはじめたものです。
DOSのlibファイルに相当するものはLinux・UNIXにもあるのでしょうか?
お願いします。
a
>>899
DOSのlibファイルなんてもうなんだったか覚えてない…
/usr/lib/lib*.a, /usr/lib/lib*.soが相当するのかな?
横からすまんが、
>>901
「おぼえていない」というのはなぜですか?
もうlibなんて使わない?dllでも普通はlibを使うんじゃ?
903デフォルトの名無しさん:03/03/25 18:31
>>900
>>901
ありがとうございます。

続けて質問すみません。
名前さえわかれば検索できるかと思ったんですが、やっぱりわかりませんでした。
.aファイルは何で作るのでしょうか?
>>903
man libtool
.c
↓cc
.o
↓ar
.a
907903:03/03/25 21:17
>>904
>>905
>>906
レスありがとうございます。
これならなんとかなりそうです。がんばります。
908デフォルトの名無しさん:03/03/26 00:08

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上だとうまく動いてくれません。

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




>>908
まずerrnoを調べよ。全てはそれからだ。
>>908
Solarisのwchar_tってUCS4だっけ?
>>910
違う。だから908がうまくいかないのは当たり前。

>>908
iconv(3) で、まず "UCS-4" を "UTF-8" に変換してから、
次に "UTF-8" を "SJIS" に変換するってのはどうよ?
iconv_open(3c) や iconv_unicode(5) を参照。
>>911
iconv()があるなら直接UCS-4をSJISに変換すりゃーいいだろに。
913911:03/03/27 20:34
>>912

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

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



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

あるいは UNIX/Linux 板か。
>>916です。
スレ違いのようなので >>918 に書き込みました。
どうもすみませんでした。
>>913,914に文句をいうわけではないが。

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

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

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

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

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

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

A: 同じです。

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

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

int a;
int b;
int c;


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

>>950
くだらない質問を、マルチすんな!詩ね!
952山崎渉:03/04/20 03:48
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
953堕天使:03/04/20 19:32
954デフォルトの名無しさん:03/05/07 14:02
XLIBのイベントの受け取りについて質問させてください。
XNextEvent(display, &event)の代わりに(ブロッキングさせたくないので)
XCheckWindowEvent(display, window, KeyPressMask | StructureNotifyMask | ExposureMask, &event)
を使おうとすれば、

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

このClientMessageを拾えなくなるのですが、なんとかする方法はないでしょうか?
やりたいことは、単に
windowの×をクリックしたときに正常終了させたいだけなのですが……。
955954:03/05/07 14:17
書き込んだ後に気がついたのですが、
いろいろ調べていると、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のまま小細工を施して
終了フラグを拾う方法はないでしょうか?
>>954
その君が探しあてた ico.c が、まさにサンプルになってないかい?
957954:03/05/07 23:37
>956
実は、小細工の仕方を伝授してほしい、と消極的にアピールしたつもりだったのです。

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

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

たしかに、マウスのクリックでクローズできないアプリなんぞは
欠陥品だと自嘲しつつsage。
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
>>957
> もしくは、XCheckIfEventのもっと分かり易い(資料の揃った)サイトないっすか?

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

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

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

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

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

スレ違いかなぁ・・・?だったらごめんなさいませ。
>>968
pdflibで検索。
質は作り方によるんじゃない?
970!!!

次スレ?
971デフォルトの名無しさん:03/06/01 13:57
>>970
立てる?
テンプレ案募集。

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

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

前スレ:
UNIXプログラミング質問すれ
http://pc2.2ch.net/test/read.cgi/tech/992057422/
</1>
973デフォルトの名無しさん:03/06/06 16:22
unistd.hはwinのwindows.hみたいなもの?とりあえずインクルードしておけという・・・
>>973
そう思うなら取り敢えずunistd.hの中を見てみればいいだろ?
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。