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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
UNIXおよびUNIX clone環境一般のプログラミングに関する質問スレッド

前スレ:
UNIXプログラミング質問すれ
http://pc2.2ch.net/test/read.cgi/tech/992057422/

>>2 関連スレ
0002デフォルトの名無しさんNGNG
関連スレ
Cygwin使っている人いますか? その8
http://pc.2ch.net/test/read.cgi/unix/1047489645/
Cygwin使っている人いますか? Part2
http://pc2.2ch.net/test/read.cgi/win/1052361218/

関連板
http://pc.2ch.net/unix/
http://pc.2ch.net/linux/
0003デフォルトの名無しさんNGNG
3
0004デフォルトの名無しさんNGNG
http://www.twc-wrestle.com/inoki.html
0005デフォルトの名無しさんNGNG
乙。
無理に埋立することもなかったんじゃないかとは思うけどな。
0006デフォルトの名無しさんNGNG
初歩的な質問で恐縮ですが質問させてください。m(_ _)m
gccでのCのプログラムを書いてるのですが、ログインユーザのホームディレクトリと、
実行ファイルのあるディレクトリパスを取得したい場合どのようにすればよいのでしょうか?
# チルダをつけるとホームのファイルを開けるのかと思ったのですが駄目でした…。
0007デフォルトの名無しさんNGNG
環境変数HOMEから取得
00086NGNG
>>7さん
環境変数HOMEで取得できました。
実行ファイルの方は自分で調べようと思います。
レスありがとうございました。m(_ _)m
0009デフォルトの名無しさんNGNG
>>8
> 実行ファイルの方は自分で調べようと思います。

1. argv[0]がfull pathかどうか?
  yes → それ
2. argv[0]が'/'入りでかつ相対パスか?
  yes → getcwd と それ を連結
3. $PATHの中を順番に、argv[0]を探す。
found → それ

確か、GNU dldはこんなことをやっていた。(そこからcodeを盗んでもいい)
0010デフォルトの名無しさんNGNG
>>9
Unix系じゃ100%確実な取得方法はないね。

execve(2)の引数で簡単に嘘付けるし、
/proc見たとしてもマウントされてない可能性もある。
chroot(2)なんかした日にゃ、そもそもパスが無意味。

そんなの気にする必要はまったくないがw
0011デフォルトの名無しさんNGNG
FAQ的には、「気ニスルナ!」が正解。
どっかのFAQにそんな記述があった。
0012ヽ(´ー`)ノNGNG
てーか、フルパスが知りたい時ってどんな時?
0013デフォルトの名無しさんNGNG
Windowsと勘違いした香具師がプログラミングしてるとき、かな。
0014デフォルトの名無しさんNGNG
C++のライブラリをdlopenから使いたいんですが、
クラス関数の呼び出し規約とか載ってるサイトないですか?
0015デフォルトの名無しさんNGNG
>>6
getpwnam(3)
0016デフォルトの名無しさんNGNG
C++のsource codeで、
extern "C" T1 F(T2 arg1) {
    // C++を呼び出すんじゃー
};
とwrapper関数を定義して、Cのprogramから使う。

Cのsource codeで、
    extern "C++" {
        // C++を呼び出すんじゃー
    }
とlinkageを指定して呼び出す。

いじょ

あ、それスレ違いな。
0017デフォルトの名無しさんNGNG
>>16
> Cのsource codeで、
>     extern "C++" {
>         // C++を呼び出すんじゃー
>     }

できんだろ。
0018デフォルトの名無しさんNGNG
extern "Lisp" {
     // Lispを呼び出すんじゃー
}
001914NGNG
C言語での方法は知ってます。
0020デフォルトの名無しさんNGNG
extern "Java" {
     // Javaを呼び出すんじゃー
}
extern "C#" {
     // C#を呼び出すんじゃー
}

なんか最強だなおい
0021デフォルトの名無しさんNGNG
>>12
SIGHUP を受けたときに再起動して、設定ファイルを読み直すとき。
0022デフォルトの名無しさんNGNG
>>21
execve("自分のパス", ...);とかやるわけ?
0023デフォルトの名無しさんNGNG
UNIXでは設定ファイルのパスは通常ハードコードだよ
必要ならconfigureのオプションで変更。
そもそも設定ファイルはバイナリとはかけ離れた位置にあるのが
普通なのに自分の位置なんかわかって役に立つのか?
0024デフォルトの名無しさんNGNG
>>21
それもやっぱり絶対パスでハードコード推奨だろうな。
とくにsuidなんかだと、ファイル名のような外部から与えられるものは危なすぎる。
0025ヽ(´ー`)ノNGNG
>>21
そういう使い方は目からウロコだった。アリガトン。
0026デフォルトの名無しさんNGNG
>>23
あんた何言ってんの?
0027デフォルトの名無しさんNGNG
curses ライブラリについて質問なんですが、標準入力をパイプでつなぐと
getch がパイプから入力をとってきてしまいます。
しかし less は標準入力からデータをもらいつつ、かつキーボードからも入力を
受け付けますよね。こういうことは curses ではできないのでしょうか。
0028デフォルトの名無しさんNGNG
>>27
まずlessってパイプとキー入力を同時に受けつけてるの?
main()
{
 int buf;
 while((buf=fgetc(stdin))!=EOF){
  fputc(buf,stdout);
 }
}

これだけでも、パイプからの入力中にいくらキーボード叩いても、
ごちゃまぜにはならんが。
0029デフォルトの名無しさんNGNG
>>28
moreの逆戻りが出来る版ですよ。
003027NGNG
>>28
パイプとキー入力を同時に受けつけてるか分かりませんが(tail -f file | less
とかやるとちょっとおかしくなる)、パイプつないでキー入力を受けつける方法が
分からないんです。
0031デフォルトの名無しさんNGNG
dupでうまくできないかな?
0032デフォルトの名無しさんNGNG
less は別途 /dev/tty を開いてるんじゃないの?
0033デフォルトの名無しさんNGNG
ごちゃごちゃ言う前にソース見るのが早い気がした。
0034デフォルトの名無しさんNGNG
つーか、/dev/ttyじゃなくて、stdinを入力対象とするcurses library,
そんなもん存在するの? 一体なぜ???

>>28
あんた、何言ってんの?
003527NGNG
>>34
よく分かりませんが getch って stdin 読むものじゃないんですかね。
echo j | ./a.out
で ./a.out して j 押したのと同じ状態になります。その後キー入力効きませんが。
0036デフォルトの名無しさんNGNG
>>35
ごちゃごちゃ言わんとソース読め。嫌ならUNIXなんぞさっさと止めてしまえ。
0037デフォルトの名無しさんNGNG
>>35
getch()なんて関数どこにある?
0038デフォルトの名無しさんNGNG
>>37
cursesて知ってる?

lessのソース眺めたけど、やっぱ/dev/ttyを開いてたね。
0039デフォルトの名無しさんNGNG
陰湿
0040デフォルトの名無しさんNGNG
ファイル入出力でやっている
カーネルバッファリングのバッファサイズを0にするために,
ioctl関数をどのように使用すればいいですか?
0041デフォルトの名無しさんNGNG
OSによる。環境書けよ。

つうかioctlでread/writeのバッファサイズの変更なんてできるのか?
そもそもファイルシステムに依存するぞ。

もしstdioのことを言ってるならバッファリングはカーネルでなく
ライブラリがやってる。man setbuf すれ
0042デフォルトの名無しさんNGNG
>>41
すいません.

OS: Redhat 9.0

ユーザバッファリングではなく
カーネルバッファリングです.

ioctlでできるそうなんですが
以下のサイトでできると書いてあるんですが
やりかたがわからないんです.
ttp://search.luky.org/linux-users.6/msg07811.html
0043デフォルトの名無しさんNGNG
fflushする代わりにって言ってるんだからstdioのことで、
setbufで必要十分だろ。ioctlなんて使わないよ。
何がしたいの? なぜioctlにこだわるの?
0044デフォルトの名無しさんNGNG
>>42
まずカーネルバッファリングとか不明確な単語は使わないほうが良い。
それからファイル入出力じゃなくて端末出力でしょ。
さらにioctlはドライバ毎に用意されるものでドライバI/Fを調べるのが普通。

で、TTYドライバに対する設定はlinuxの場合は以下のURIでできるようだが
バッファサイズ変更の機能は見つからない。
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/termios.3.html
元ネタが嘘?
0045デフォルトの名無しさんNGNG
>>26
日本語が読めないんですか?
0046デフォルトの名無しさんNGNG
>>44
元ネタはinをrawにすれって事じゃないのか?
0047デフォルトの名無しさんNGNG
>>45
>>21,22の意味が分からないの?
004840NGNG
>>43 43
うちの師匠がioctlでできるはずだから
やっておけって言われたものですから.

目的はwrite/readは
カーネルでバッファ(ブロック?)に溜めて,
溜まったら出力しますよね?
そのバッファサイズを0にすれば使用するマシンの
ファイル入出力に掛かる正確な時間が計れるのではと言われました.
わかりにくい文ですいません.
0049デフォルトの名無しさんNGNG
O_SYNCとかそういう話か?
0050デフォルトの名無しさんNGNG
writeした後にfsyncでもすれば?
005140NGNG
>>49 50
それも考慮しましたが,
師匠がいってるのでioctlにこだわりを.
すいません.
0052デフォルトの名無しさんNGNG
師匠にいわれたら死ねるのか?
005340NGNG
>>52
それはいいすぎでしょう.
0054デフォルトの名無しさんNGNG
>>51
と、言うか普通に師匠に聞けばいい話だと思われ。
0055デフォルトの名無しさんNGNG
>>48
言ってること滅茶苦茶だな。
ファイルIOなら >>49 がお望みのものじゃないの?
ただし、それで計った値に意味があるかは別だけどな。
師匠も師匠なら弟子も弟子・・・。
0056デフォルトの名無しさんNGNG
>>48
> そのバッファサイズを0にすれば使用するマシンの
> ファイル入出力に掛かる正確な時間が計れるのではと言われました.

fsyncにしてもO_SYNCにしても、
いつもの入出力のやり方と違うわけだが、そんな調査でもいいのか?
005740NGNG
マシンごとにバッファのサイズが違うために
マシン毎の性能を性格に計測するためには
バッファサイズを同じにしなければならないらしいです.
0058デフォルトの名無しさんNGNG
C++のライブラリをdlopenから使いたいんですが、
クラス関数の呼び出し規約とか載ってるサイトないですか?
知りたいのはC++製のsoライブラリへのアクセス方法で、
Cの場合については判ってます。
0059デフォルトの名無しさんNGNG
シングルユーザーモードにして、
巨大ファイルコピー;syncを数回実行して平均を出すべきだろうね。
# cp TESTDATA /mnt/target;sync;sync
実使用とかけ離れたドライブ単体の性能を測るのであれば。

実使用状態ではHDDとプログラムはできる限り並列に動作させようとして
カーネルががんばっちまう結果、
書き込み終了より先にプログラムが終了しちまう。
0060デフォルトの名無しさんNGNG
>>58
シンボルの変換方法、仮想関数テーブル、例外処理、static initializerの扱い
などがコンパイラベンダ毎にマチマチなので、コンパイラとバージョン限定
しないと話にならんと思うよ。
0061デフォルトの名無しさんNGNG
指定したディレクトリのファイルを列挙するプログラムを教えて?

※いや、サクっとできそうで本当にできなかった。カレントDirなら
列挙できたのだけど、その下がなぜか、かからない・・・libc5使ってるのだけどね。

おしえてちょ。

0062デフォルトの名無しさんNGNG
> libc5使ってるのだけどね
(´-`).。oO(…価値のある情報だろうか?)
0063デフォルトの名無しさんNGNG
>>61
再帰。スタックあふれに注意。
0064デフォルトの名無しさんNGNG
>>57
マシンごとに違うのは、バッファだけじゃないのに、
バッファだけ同じにするのは意味がわからんな。
実メモリが多いマシンには不利な条件だ。
# I/O cacheへのmemory割り当てが可変のOSに限るが。

>>58
extern "C" {
宣言;
}
した、Cのwrapper関数を定義。

>>61
FILE *f = popen("find . -print");
Cで完結したければftw(3)を。
opendir/readdir/closedir(3)使って駄目なのは、頑張れとしか(ry
0065デフォルトの名無しさんNGNG
>>64
popenの引数はひとつなの?
0066デフォルトの名無しさんNGNG
違うよ、御免よ。"r"を付け足してねん。
0067デフォルトの名無しさんNGNG
現在、無線LANでクライアントPCから数ミリsecでリアルタイムにデータ受信をしていますが、
サーバPCからキー入力をして無線LANを使ってクライアントPCに文字信号を送信したいと思っています。
どのようにしたらリアルタイムキー入力ができるのか教えてください。
ちなみにsysytem("stty raw");関数を使ったらキー入力待ち状態になりリアルタイムデータ受信が止まってしまいました。
OSはlinuxです。よろしく御願い致します。
0068デフォルトの名無しさんNGNG
>>67
RealtimeのOSに変えたらどうだ?
0069デフォルトの名無しさんNGNG
>>67
・O_NONBLOCKでopenする
・poll/selectでデータがある事を確認する
・スレッドで入力待ち

>>68
単純に変えても同じ事になるぞ。
0070デフォルトの名無しさんNGNG
>>69
数ミリsecでリアルタイム処理できないOSだと指摘してるだけでしょ。
受信処理だけでたまたまリアルタイム処理できていたとしても
送信処理が入ることでダメになる可能性もある。
0071デフォルトの名無しさんNGNG
リダイレクトを取得する方法は?
たとえば ls とうって、その結果の標準出力を受け取る方法。

自分は今のところ、泥臭い方法で
system( "ls > ./tmp" ); みたいにテンポラリに吐き出して
それをあとから参照する方法使ってるけど、なんだかねぇーという
感じで
0072デフォルトの名無しさんNGNG
>>71
>>64-65
0073デフォルトの名無しさんNGNG
>>68=>>70
恥ずかしいやつ
0074デフォルトの名無しさんNGNG
>>47
>>23,24が読めないんですね。
0075デフォルトの名無しさんNGNG
>>71
>>64-65

をー!そうやってやるのか!サンクス
0076デフォルトの名無しさんNGNG
ソフトリアルタイムとハードリアルタイムの違いが分からないんですな。
0077デフォルトの名無しさんNGNG
>>42
結局URLにあるioctlのやりかたって
どうやるの??
0078デフォルトの名無しさんNGNG
>>77
脳内
0079ageNGNG
質問です。
Linux gcc で実行ファイル(自分自身)があるディレクトリを
知りたいんですが、どうやるんでしょうか。
0080デフォルトの名無しさんNGNG
>>79 無理。
0081デフォルトの名無しさんNGNG
>>79
procfsが有効なら、/proc/self/exeをreadlink(2)してdirname(3)。
008277NGNG
>>44
おそらく端末i/oじゃなくて
ファイルi/oだから違うでしょ
システムコールに関する本を読むと
カーネルバッファリングって記述はあって
やりたいことはわかるけど、
どうやるかは不明。
008379NGNG
>>81
大変遅くなりました。
あっしも >>80 さんと同じに考えてましたが
教えて頂いた方法でできました。
ありがとうございました。
0084デフォルトの名無しさんNGNG
こんなコードがあったもので、質問です。

fd = open("/dev/hdc1", O_RDWR);
…
fdatasync(fd);

これで/dev/hdc1の全てのキャッシュされたファイルについて同期がとれますか?
0085デフォルトの名無しさんNGNG
PerlかRubyでシェルもどきを作りたいのですが、
いい例、解説サイトはありますか?
0086デフォルトの名無しさんNGNG
Perlの例は知らないが、Rubyだとirbshってのがある。
0087デフォルトの名無しさんNGNG
PerlやRubyをなめるな。もどきじゃなくて本物がつくれる。
0088デフォルトの名無しさんNGNG
>>84
ファイルつーかファイルの中身な。ファイルの属性の同期はとれない。
実装されてないシステムもある。(関数は呼び出せるのに:-)
008984NGNG
>>88 サンクスです。
動くかどうか気いつけて使え、ということですな。
つーことは、一般的には使わんほうがええですな。
009085NGNG
自作のツリー状データ構造上でcdとかlsをしたいのですが
ファイル名に空白が入っていた時の対処とかいろいろ行き詰まってしまって・・・
0091デフォルトの名無しさんNGNG
'や"で囲んで入力させればいいと思うけど
0092デフォルトの名無しさんNGNG
ふつう、カーネルにバッファリングされたくなかったら raw デバイスを
使うでしょ。これなら、どの UNIX でも通用する。
linux も kernel 2.4 以降なら、raw コマンドを使って raw デバイスを
割り当てられるよ。
もっとも、パーティションを直に読み書きすることになるから、書き込み
書き込みに関しては、未使用のパーティションがないとテストできないが。

あと、xfs なら O_DIRECT も使えるかもしれん。
009384NGNG
>>92
私に対するレスですよね?
バッファリングされたくないというのではなくて、
任意時点で同期をとる意図をもった他人のコードにああいう記述があったので、
質問してみたわけです。

とはいえ、>>92のレスは私にとっての示唆に富んでいました。
ありがとうございます。
0094質問ageNGNG
質問です。
Linux g++ で pthread を使ってみたいんですが、
thread の実装(C++化?)ってどうやってます?
すでにあったらメンゴです。
0095デフォルトの名無しさんNGNG
腐るほどあるんじゃない?
0096デフォルトの名無しさんNGNG
>>94
#include <boost/thread.hpp>
009794NGNG
>>96
boost ライブラリですか。
検索してもあまり見つからないですね。
RedHat 用 rpmがあったんで、ちょっと試してみます。
ありがとうございます。
0098デフォルトの名無しさんNGNG
Linuxのシステムコールって、int呼び出しだったのか!
ちょっと昔のMSDOSを思い出して感動した!
0099デフォルトの名無しさんNGNG
ユーザモードからカーネルモードにする手段は限られてるから、
まぁ大抵intになると思うが。

#BSD/OSはillegal instruction使ってたかも。
0100デフォルトの名無しさんNGNG
>>98>>99
WindowsもFreeBSDもINT呼び出しだよ。引数の扱いがLinuxと違うけど。

Windows NT/2000/XPがINT 2EHで、FreeBSDがLinuxと同じINT 80H。

SolarisやUnixwareはコールゲート。
0101デフォルトの名無しさんNGNG
はつみみです
0102デフォルトの名無しさんNGNG
>>100
ではINT 2EHでどのようにして呼び出しているのかコードを書いてください(w
0103デフォルトの名無しさんNGNG
お願いですからintと書かないで下さい。なんのこっちゃと思ったよ・・・。

やはり基本はINT86x()でつか?
0104デフォルトの名無しさんNGNG
>>102
http://www.sysinternals.com/ntw2k/info/ntdll.shtml
http://www.securityfocus.com/library/1584
http://www.securityfocus.com/data/library/ntkern.doc (Word形式)
あたりを参照。
0105デフォルトの名無しさんNGNG
>>104
http://www.securityfocus.com/data/library/ntkern.doc (Word形式)
これ、Word形式じゃないじゃん。

補足しておくと、Native APIというのがUNIXのシステムコールに相当するもの。
Native API(ntdll.dll)を使ったプログラムの例は
http://www.sysinternals.com/ntw2k/info/native.shtml
0106デフォルトの名無しさんNGNG
INT と int じゃ激しく違うと思うんだがどうか。
0107デフォルトの名無しさんNGNG
>>106
INTRRUPTとintegerだからなぁ
0108デフォルトの名無しさんNGNG
INTRRUPTってしらねーなあ。INTERRUPTなら知っているが。
0109デフォルトの名無しさんNGNG
揚げ足鳥揚げ
0110デフォルトの名無しさんNGNG
腹減った
0111デフォルトの名無しさんNGNG
>>100
Solarisで、kernel にトラップするのは ta 命令。
Solaris for x86 は知らん。
0112デフォルトの名無しさんNGNG
>>98>>100
Linuxは、標準では、引数を直接レジスタに入れてINT 80Hを呼び出す形で
システムコールを実装しているけど、Linuxには実行ドメインという概念と
personalityというシステムコールがあって、プロセス単位でソフトウェア
割り込みやコールゲートの扱いを変更できる。

BSDのLinuxエミュレーション機能の方が有名だし、最近はほとんど使われて
いないけど、LinuxにはiBCSというSolarisやUnixwareなどのバイナリを実行
する機能があって、それの実現のために使われている。

iBCSのサイトや
http://www.purplet.demon.co.uk/linux/ibcs/
Linuxのソースの
linux/kernel/exec_domain.c
linux/include/linux/personality.h
あたりを見ると面白いかも。
0113デフォルトの名無しさんNGNG
初歩的な質問で恥ずかしいのですが、
UNIXでファイルの削除をする方法(プログラム)がわかりません。

ご教授おねがいします。
0114デフォルトの名無しさんNGNG
>>113
man unlink
0115デフォルトの名無しさんNGNG
>>114
ありがとうございます。
あまりに盲目な自分がちょっと悔しいくらいです。
0116デフォルトの名無しさんNGNG
>>115
ちなみに、removeならCの標準関数だからUNIXに限らず使える。
0117デフォルトの名無しさんNGNG
>>112

iBCS/Solaris/UnixWare(SVR4)互換機能も、実行ドメイン/personality に
相当する機構も、どちらも *BSD にだってあるだろ。
FreeBSD だと sysentvec (<sys/sysent.h>)、
NetBSD だと execsw (<sys/exec.h>) だな。

NetBSDもint 0x80なわけだが、実はFreeBSD/NetBSDが386BSDから別れた頃は、
コールゲートの方を使っていた。トラップゲートに切り替えた理由は、少な
くとも当時のマシンでは、コールゲートよりもトラップゲートの方が速かっ
たかららしい。これはFreeBSDでは1996年頃、NetBSDでは1994年頃の話。
当時からのcvsツリーが公開されているってのは便利だのう。
0118デフォルトの名無しさんNGNG
Pen4からはsyscallですかねぇ
0119デフォルトの名無しさんNGNG
最近C#をはじめたのですが、GDI+がWindowsXPでは遅いそうです。
LinuxではC#とGDI+はどのくらいの早さで動きますか?
0120デフォルトの名無しさんNGNG
>>119
LinuxでC#とGDI+がサポートされているのかどうかを聞きたい。
てゆーか、動いているところを見てみたい。
0121デフォルトの名無しさんNGNG
Lindows?
0122デフォルトの名無しさんNGNG
GDI+はよくしらんが、LinuxでC#はできてると思うが。
0123デフォルトの名無しさんNGNG
LinuxのカーネルがC#でかかれるのはいつぐらいになるだろう。
三年後ぐらい?
0124デフォルトの名無しさんNGNG
Linuxのカーネルがjavaでかかれるのはいつぐらいになるだろう。
0125デフォルトの名無しさんNGNG
で、そのVMを動かすために別なOSが必要になって…
それをC# or javaで実装して…
以下繰り返しとか。

そういえば、Linuxカーネルをjavaで実装するのはどこかで見たような記憶があるなあ。
0126デフォルトの名無しさんNGNG
javaはjava CHIPが普及すれば可能と思ってるんだけどね
0127デフォルトの名無しさんNGNG
でも、もはや利権の喰い物にしか見えないなぁ
0128デフォルトの名無しさんNGNG
>>126
Java chip の OS って Java じゃないよ。(あたりまえだけど。)
まさか、Java chip って Java しか動かないと思ってるのか ?
0129126NGNG
>>128
よう知らんけど、Linuxカーネルをjavaで実装って、それ以外にどうやってやんの?
Java chipってVMそのものだと思ったんだが・・・。
0130デフォルトの名無しさんNGNG
>>128
>まさか、Java chip って Java しか動かないと思ってるのか ?

純粋なものだとそうだろうな。
バイトコード解釈できないCPUはJavaChipじゃないわけで。

なんか組込用VMと勘違いしてないか?
0131デフォルトの名無しさんNGNG
>>129
VM 書いて、その上で動くカーネルソースを書けばいいだけだと思うけど。
もちろんメモリー管理とか、割り込み処理なんかは Java じゃ書けないけどね。
Unix だって、100% C ではない。
それとおんなじで、90% (値はてきとー) Java のカーネルとかなるんだろうな。

>>130
> バイトコード解釈できないCPUはJavaChipじゃないわけで。

これは、正しいけど、バイトコード (* も *) 解釈できる CPU だよ、普通の Java chip って。
100% Pure Java chip (=バイトコードしか解釈できない CPU) と言うのも作れるだろうけど、IO とかどうするの ?
自分だけじゃでブートもできないのは、ちょっと応用範囲が限られまくりだよね。
0132デフォルトの名無しさんNGNG
>>131
>IO とかどうするの ?

出来ない理由が何かあったっけか?
0133デフォルトの名無しさんNGNG
Inferno?
0134デフォルトの名無しさんNGNG
>>132
もしかして...
println() ってやったら、出力できるやん。何が問題 ?
って言う理解なの ?

デバイスドライバって知ってるか ?
0135126NGNG
>>131
なんか現状のJava chip実装に依存したこと書いてない?

メモリー管理や割り込み処理だってVMから下に実装すればいいだけで、
それをソフトウェアで実装する必要はないよね。
全部含めてJava chipとすれば、バイトコードのLinuxカーネルだって
動くと思うんだけどなあ。
0136デフォルトの名無しさんNGNG
>>135
> それをソフトウェアで実装する必要はないよね。

ハードで実装しろと...、まあがんばってください。

まさか、μプログラムなんてソフトっぽい方法はとらないよね。
それなら、20年前に LISP でやったことあるから。
(μプログラムレベルで CG 動くと、割り込みも受けられないんだ...、よく考えたらあたりまえだけど。)
0137126NGNG
ハードで実装する必要はないけどね。
クルーソーみたいな実装でもいいし。
pentiumだってソフトは載ってるし。
0138デフォルトの名無しさんNGNG
>>137
天然なのかなぁ...。

> クルーソーみたいな実装でもいいし。

CMS の 'S' が何を意味するか知ってて言ってるのか ?
それとも、>>135 で「ソフトウェアで実装する必要はないよね。」と言ったことを忘れてるのか ?
0139デフォルトの名無しさんNGNG
なんか非ノイマン型CPUが流行りだしても、ノイマンの常識で物を語ろうとするんだろうなぁ・・・
0140デフォルトの名無しさんNGNG
UNIX系OSのカーネルって、「ここをこう直したら3%速くなりました。ヤター」
とかやってる世界なんだから、わざわざJavaで書き直して遅くするアホはい
ないと思われ…

と当たり前のことを言ってみるのはヤボですかそうですか。
0141デフォルトの名無しさんNGNG
>>140
別に高速化の手段としてJavaを採用しているわけではないわけで。

じゃあ、JavaとかHSPでにちゃんねるビューア作った奴はアホなわけで。
0142デフォルトの名無しさんNGNG
別に現在Javaが使われているような応用において、
Javaを否定してるわけじゃない。

> じゃあ、JavaとかHSPでにちゃんねるビューア作った奴はアホなわけで。

なんで? HSP とかビューアって、性能が第一に評価されるソフトウェア
じゃないでしょ?

UNIX系カーネルって、ほぼ同一の仕様で実装が異なるもの、わんさか
あり(Solaris,Linux,*BSD,...)、速度が遅いとあっさり見捨てられて
他に乗り換えられる運命にあるから、今のJavaには向かんよ。

JavaでCと全く同等の性能が出る時代になるか、カーネルの
性能なんてどうでもいい時代になったら話は別かもしれんが、
当分そういう時代は来ないだろうし、そういう遥か未来には、別の
言語が流行ってるんじゃないの?
0143デフォルトの名無しさんNGNG
>>142
OSの評価基準はその上で動くソフトウェアやドライバがいくらあるかだと思われ。
0144デフォルトの名無しさんNGNG
で、Java に書き換えたらどうなる?

利用可能なソフトウェアの数は変わらない。
カーネルの提供するインターフェース(システムコール)は
実装言語がCであろうとJavaであろうと同じだからね。

動くドライバの数は、書き換え作業の間は極端に減る。
デバイスドライバの場合、生のハードウェアにアクセス
するわけだから、Javaで書くよりも、Cで書いた方が
むしろ簡単だしな。アプリケーションと違って、Java
で書いても、バグがあればメモリ破壊とか簡単に起きる
ので、全然安全にならないし。

で、速度は、明らかに遅くなる。
そんなもの、誰が使うの?
0145デフォルトの名無しさんNGNG
>>144
じゃあ、JavaとかHSPでにちゃんねるビューア作った奴はアホなわけで。
0146デフォルトの名無しさんNGNG
C言語で既に存在するソフトウェアと、全く同じ仕様のものを、
JavaやHSPで書く奴は、アホかもしれんな。(勉強目的は除く)
遅くなるだけだから。

でも、JavaやHSPで書いたバージョンは、実は仕様が違う(使い
勝手が異なる)んじゃないのか?

UNIXカーネルの場合、仕様(システムコール・インターフェース)は
どのカーネルでもほぼ全く同じなの。POSIX.1で決まってるからな。
0147デフォルトの名無しさんNGNG
>>146
>(勉強目的は除く)

では、Java-Linuxは肯定されるわけだ。
0148デフォルトの名無しさんNGNG
勉強のためだけに100万行を越えるプログラムを書くほど
元気のある奴はおらんよ。(断言)

俺、これまで結構Javaを気に入っていたんだが、Java厨を
嫌う奴の気持ちがなんとなくわかってきてぞ。(wr
0149デフォルトの名無しさんNGNG
>>148
独りよがり。
0150デフォルトの名無しさんNGNG
>>139
はぁ ? もうちょっと具体的に言ってくれ。それとも単に話をはぐらかしたいだけなの ?

>>140
そういう側面もあるが、そういう方向は極論すればフルアセンブラでカリカリチューニングすればいい。

ってならないのは、当然移植性とかのバランスを考えてるからだよ。

どんなに速くたって、Cray-MP のみサポートと言われても困るだろ。

>>146
> C言語で既に存在するソフトウェアと、全く同じ仕様のものを、
> JavaやHSPで書く奴は、アホかもしれんな。(勉強目的は除く)
> 遅くなるだけだから。

速度はハードでカバー + どこでも動く (Sun の言うとおりなら...) → ウマー

を狙ってんでしょ。現実はなかなか厳しいものがあるけどさ。
0151デフォルトの名無しさんNGNG
> 速度はハードでカバー + どこでも動く (Sun の言うとおりなら...) → ウマー
> を狙ってんでしょ。

「どこでも動く」ってのは、それ自体、ソフトウェアの仕様の一部だよ。

C で書かれていて、かつ、Java が動く全てのプラットフォームで
動作する 2ch ブラウザがあるなら、それと全く同じものを Java で
書いても、単に遅いだけで、メリット・ゼロじゃん。

話を戻すと、UNIX カーネルの場合、Java で書いても、どこでも
動くなんてことにはなりえない。というのは、Java がどこでも動くの
は、Java VM が機種依存性を吸収してくれるからだが、OS のカーネル
の仕事のかなりの部分が機種依存性の吸収に割かれているわけだから、
もしカーネルモードで動く Java VM に機種依存性を吸収させるので
あれば、結局、カーネルのかなりの部分を、Java で書いたパートで
はなく、Java VM の一部として書かざるを得なくなる。すなわちカーネル
のかなりの部分は、結局 C で書く (実用 Java VM のほとんどは C で
書かれているよな?) ことになっちまうからだな。

スピードは遅い、どこでも動くわけでもない、じゃ、いったいメリット
は何なんだい?
0152デフォルトの名無しさんNGNG
selectでうまくゆきました。ありがとうございました。
0153デフォルトの名無しさんNGNG
なんか一人だけデムパがいることがわかった
0154デフォルトの名無しさんNGNG
まあ、プログラマだしな。
自分がバカなのを知らないんだろ。
0155デフォルトの名無しさんNGNG
いつものJava厨の妄想ってことで。
0156デフォルトの名無しさんNGNG
123と124が異なる人物だとすると、デンパは1人じゃなくて2人
かもしれん。ガクガクブルブル
0157デフォルトの名無しさんNGNG
>>156
お前も含めて3人だ。
0158デフォルトの名無しさんNGNG
JavaOSってのは、既存のframeworkにのっとったOSを、
単にJavaで書いたものではなくて、
class verifierとかappletとかservletとかJiniとか、
そういった概念で新しいOS frameworkを編み出すものなので、
そこんとこよろしく。
0159デフォルトの名無しさんNGNG
大容量ファイルを読み込むためには
どうすればいいですか?
2G以上ぐらいだとhexdumpでもfopenでも見れないんですけど.
Cでどうすればいいですか?
0160デフォルトの名無しさんNGNG
>>159
またここにも・・・
いまどうやっているのかな?
OSは?ファイルフォーマットは?使っている関数は?
また見れないとはどういうことなのかな?
fopenで失敗する、freadd失敗する?
そのときのerrnoは?
とにかく状況を細かく分析することが大事です。
0161デフォルトの名無しさんNGNG
>>159

それって、Linux カーネルを C#/Java で書き直すって話とは
直接関係ないのでは?

>>160

ここ参照。
http://ftp.sas.com/standards/large.file/x_open.20Mar96.html

簡単に言うと、cc のオプションに
`getconf LFS_CFLAGS` `getconf LFS_LDFLAGS` `getconf LFS_LIBS`
をつける必要がある。ただし、リンクする全てのモジュールの
コンパイルオプションにつけておかないと悲惨な目に会いかねない
から注意。
(single quotation じゃなくて back quotation であることにも注意。
それから、Tru64と*BSDは、オプションなしで最初から2GB以上の
ファイルをオープンできるため、このオプションは存在しない。)

あと、もしもOSがLinuxで、カーネルが2.2以前の場合、カーネルの
2.4以降に更新する他ないので、諦めるしかないこともある。
0162159NGNG
>>160 161
どうもありがとうございます.
OSは Red Hat Linux 9.0です.

とりあえず試してみます.
0163159NGNG
>>160
書き忘れましたが,
errnoの確認してませんが,
fopenの時点でNULLが返ってきます.


>161
gcc `getconf LFS_CFLAGS` `getconf LFS_LDFLAGS` `getconf LFS_LIBS` foo.c
みたいな感じですか?
Mac OS X (10.2.6)で試したんですけど
getconfがないみたいです.
またRed Hatで試したら報告します.
0164160NGNG
>>159
LFS(Large File Summit)の対応は各UNIXによって違うようですね。
RedHatのサポートに聞くのが一番早いと思うのですが。
要は従来ファイル内のオフセットをlong(int)で持っていたのだが、
これだと最大オフセットが2^31=2Gで、それを超えるサイズのファイル
はアクセスできない。なんかファイルサイズの2000年問題みたいですね。
パッチとかも必要そうだし、やっぱりベンダーに聞くのが一番かな?
参考turbolinux
http://www.turbolinux.co.jp/knowledge/public/360.html
0165デフォルトの名無しさんNGNG
>>164
サポートを受けられるとは限らないと思うけど・・・
0166 NGNG
>>159

fopen系の関数を全てラージファイル対応にするには、-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
あたりのオプションをつけてコンパイルすべし。ファイルオフセットは long じゃたりなくなるので、
fpos_t ね。

既存のコードとのコンパチビリティ等が気になるなら、必要な部分だけ fopen64 とか fread64 とか
使っても良い。
0167デフォルトの名無しさんNGNG
>>166
sageてください
0168デフォルトの名無しさんNGNG
64bit値をprintfしたいんですけど、どうすれば?
0169デフォルトの名無しさんNGNG
man printf
0170デフォルトの名無しさんNGNG
>>163
MacOS XのUNIX部分は、*BSD系だと聞いているから(使ったことないけど)
何もオプションをつけなくても、2GB以上のファイルが使えるんじゃない
かな。

>>163,164
RedHat 9.0 なら、161 の方法で大丈夫な筈。

>>166
それよりは、161の方が移植性が高いんじゃないかな?
あと、細かいことを言うと、明示的に -D_LARGEFILE_SOURCE を指定する
必要があるのは、fseeko() と ftello() が使いたい場合ぐらいで、もし
この2つの関数が不要ならば -D_LARGEFILE_SOURCE は要らない筈。
(もっとも Solaris で `getconf LFS_CFLAGS` すると、デフォールトで
-D_LARGEFILE_SOURCE も有効になるけど。でも、こうならないプラット
フォームもある。)

で、もし -D_LARGEFILE_SOURCE と -D_FILE_OFFSET_BITS=64 の両方が
有効なプラットフォームなら、この2つを定義した段階で、off_t が
64ビットになるので、fpos_t を使わずに、fseeko() と ftello() に
off_t を渡すという手もある。

> 既存のコードとのコンパチビリティ等が気になるなら、必要な部分だけ
> fopen64 とか fread64 とか使っても良い。

このAPIを使いたい場合、cc のオプションに
-D_LARGEFILE64_SOURCE `getconf LFS64_CFLAGS` `getconf LFS64_LDFLAGS` `getconf LFS64_LIBS`
をつけないと、移植性がなくなると思う。
あと、この場合オープンなど全ての関数をfopen64()のように書き換えないと
まずいので注意。それに、標準入力が2GBを越えた場合の動作保証とかもない
んじゃないかな。
0171デフォルトの名無しさんNGNG
>>170
Mac OS X 10.2.6は、

/usr/include/sys/types.h:typedef int64_t quad_t;
/usr/include/sys/types.h:typedef quad_t off_t; /* file offset */

で、/usr/include/stdio.hで、

#if !defined(_ANSI_SOURCE) && !defined(__STRICT_ANSI__)
typedef off_t fpos_t;
#else
typedef struct __sfpos {
char _pos[8];
} fpos_t;
#endif

よ。
0172デフォルトの名無しさんNGNG
>、*BSD系だと聞いている
例えばNetBSDとFreeBSDは全くの別物ですが。
0173山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0174159NGNG
みなさま激しい討論どうもです.

163で書いたように
gcc `getconf LFS_CFLAGS` `getconf LFS_LDFLAGS` `getconf LFS_LIBS` foo.c
でコンパイルしてみました.
最初の6バイトぐらいは読むことができましたが
それ以降はセクメントエラーになりまして,
なおかつ値が違っています.

使用した関数はfopenとfreadとfseekです.
-D_LARGEFILE_SOURCE と -D_FILE_OFFSET_BITS=64
をコンパイルオプションにしてfopen64, fread64の使用を試みましたが,
fread64が見つからず,
fopen64とfreadの組み合わせでも同じくセグメントエラーになりました.
ちなみにOSはRed Hat 9.0で試しました.
0175デフォルトの名無しさんNGNG
> 例えばNetBSDとFreeBSDは全くの別物ですが。

おいおい。

NetBSDとFreeBSDが別れてからは、当然違いも出てきているが、
4.4-lite時代から引き継いでいる部分は同じだろ。それに別れて
からも、相互にimportしあっているため、同じ部分も多いだろ。
最近だと、rc.dとかrescueとかはNetBSDからFreeBSDへのimport
だし、逆にkqueueはFreeBSDからNetBSDへのimportだしな。

今回話題のoff_tが64bitである件については、4.4-liteからの
流れだから、NetBSD、FreeBSD、OpenBSD全てで同じ。また
171を見る限り、MacOS Xも、同じ流れを組んでいて、最初から
off_tが64bit。

つまり、この話題に関しては、NetBSDとFreeBSDはほぼ全く同じ
と考えれば良い筈だ。
0176デフォルトの名無しさんNGNG
>>174
おかしいなあ。
RedHat-8.0 だが、下記のプログラムを
gcc `getconf LFS_CFLAGS` `getconf LFS_LDFLAGS` `getconf LFS_LIBS` -o hoge hoge.c
でコンパイルして、2GBを越えるファイルに対して
  ./hoge ファイル名 | cmp - ファイル名
したが、ちゃんと動いているぞ。
ちなみに、オプションなしでコンパイルすると
  ファイル名: File too large
になる。
Redhat-8.0→9.0で、バグが入ったとも思えんのだが。

#include <stdio.h>

main(int argc, char **argv)
{
 int i, c;
 FILE *fp;

 for (i = 1; i < argc; i++) {
  fp = fopen(argv[i], "r");
  if (fp == NULL) {
   perror(argv[i]);
   return 1;
  }
  while ((c = getc(fp)) != EOF)
   putchar(c);
 }
 return 0;
}
0177デフォルトの名無しさんNGNG
>>174
まず1kBくらいのファイルで試してデバッグしろ。
0178159NGNG
>176, 177
176とほとんど同じプログラムですよ。
0179159NGNG
#include <stdio.h>
#include <stdlib.h>

int
main (int argc, char *argv[]) {
unsigned short s;
if (argc > 1) {
filename = argv[1];
if ((fp = fopen (filename, "rb"))==NULL) {
fprintf (stderr, "Can't open %s.\n", filename);
exit (1);
}

fread (&s, sizeof (unsigned short), 1, fp);
fprintf (stdout, "s = %d\n", s);
}
return (0);
}

バイナリなのでこんな感じです.
0180デフォルトの名無しさんNGNG
バイナリってなんだ、、、
0181デフォルトの名無しさんNGNG
>>179
> fprintf (stdout,

printfをしらんのか?
0182デフォルトの名無しさんNGNG
>>180
主にCR+LF→LF変換抑止のための、"rb"の'b'ですよ。
0183デフォルトの名無しさんNGNG
>>179
細かいツッコミはともかく、filenameとfpが未定義だし、
それを定義してもIA32なら2byteしか読まんあたり、
そのまんまのコードとは思えん。
0184デフォルトの名無しさんNGNG
>>182
真性かよ
0185デフォルトの名無しさんNGNG
glibcはbついてても無視するだけだから、この際関係ないはず。
0186デフォルトの名無しさんNGNG
>>182
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/fopen.3.html
知っててやってるならいいがな。
0187159NGNG
>>183
確かに未定義でしたね。

hexdump -v -C ファイル名 | less
だと、
25 cc 00 ・・・。
とあったので 2バイトしか読んでないです。
本当はもっとfread以降も書いてますよ。

そして値は10進数に変換すると、
9676になるはずですが、
上のプログラムでは値が異なってました。
0188デフォルトの名無しさんNGNG
glibc の fopen テキストモードは
`\r\n' を `\n' に変換しましたっけ…?
0189デフォルトの名無しさんNGNG
もうネタはいいよ。勘弁してくれ
0190デフォルトの名無しさんNGNG
>>159
OSを疑う前に、まず

unsigned short s;
を
unsigned char s[2];
に変更し、

fread (&s, sizeof (unsigned short), 1, fp);
fprintf (stdout, "s = %d\n", s);
を
fread (s, sizeof(s), 1, fp);
printf("s[] = 0x%02x:0x%02x\n", s[0], s[1]);
に変更して、試してみるように。

> 値は10進数に変換すると、
> 9676になるはずですが、
> 上のプログラムでは値が異なってました。

どうせ52261って表示されたんだろ? それで合ってるんだよ。
「big endian」と「little endian」でぐぐれ。

まず自分のミスを疑えっていうのは、プログラミングを
勉強する上での基本だ。
0191159NGNG
>>190

そのとおりです m(_ _)m
ぐぐって解決します。
0192デフォルトの名無しさんNGNG
ぐぐるよりまず、まともに動くプログラムでテストしろ。
0193デフォルトの名無しさんNGNG
てっきり以前に(同じ環境で)short変数の中身をfwriteしたものを読んでいるんだと思っていた・・・

それにしても190がひっそりとprintfに直しているところにワラタ
0194159NGNG
>>192
Macでは動いてたんで安易に考えすぎましたわ
0195デフォルトの名無しさんNGNG
>>194
問題を理解できてるの? かなり不安な一行レスなんだけども…

MacでつくったデータをMacでよむのはOK,
Linux for x86でつくったデータをLinux for x86でよむのはOK.
全然over 2Gbyteの問題じゃない。Byte orderの問題。
0196デフォルトの名無しさんNGNG
>>195
いつからバイトオーダの違うファイルが読めなくなったんだ?
0197デフォルトの名無しさんNGNG
読めないんじゃなくて、正しく読めないと勘違いしたんだろ。159が
0198デフォルトの名無しさんNGNG
いつまでも入門者をいじめるなよ・・・
↓次の質問どぞー
0199デフォルトの名無しさんNGNG
188が、ネタなのか、それともUNIXでテキストモードとバイナリモードの
区別があると思っているのか、どちらなのか教えてください。おながい
します。
0200デフォルトの名無しさんNGNG
とりあえず200
0201デフォルトの名無しさんNGNG
linuxのgccでs-sjisのコードをビルドすることはできますか?
普通にやるとエスケープコードがどーたらこーたらという警告が出ます。
0202デフォルトの名無しさんNGNG
コードは普通ASCIIで書くもんだ。
0203デフォルトの名無しさんNGNG
>>202
文字列定数はコードの一部じゃないの?
0204デフォルトの名無しさんNGNG
>>201
文字定数、文字列定数、コメントだけでいいですか?

./configure --enable-c-mbcharでcompileして、(gcc -vで確認可能)
環境変数LANGをC-SJISかな?
0205201NGNG
>>204
>文字定数、文字列定数、コメントだけでいいですか?
これでいいですが、キーワードを検索したところ

ビルドオプション --enable-c-mbchar の仕様の問題
一部方面で「configureに --enable-c-mbchar を指定してmakeしなおしたgccを用い,
環境変数 LANG=C-SJIS を指定すると,gccをSJIS対応にできる」という情報がありますが,
これは限りなく誤報に近いです。
http://homepage1.nifty.com/kuuku/gcc-sjis/

とありますがどうしたものでしょう。警告箇所に\を入れて回るのが無難ですかね。
0206デフォルトの名無しさんNGNG
プログラムの設定ファイルって、どこに置けば言いの?
できればプログラムをインストールした同じ所におきたいんですが。

あと、
fopen("~/hoge" "r");
とかしても開けないみたいです。こういう場合はどうするんですか?
(自分のホームの絶対パスが必要なのかな?)
0207_NGNG
http://homepage.mac.com/hiroyuki44/
0208デフォルトの名無しさんNGNG
>>206
~/hogeの~をなにが展開するか考えればできない理由がわかるはず。
ホームディレクトリならgetenv("HOME")で得られるんじゃないかな?
0209デフォルトの名無しさんNGNG
>>205
どうでもいいけど差分を置いて欲しいよ。
0210デフォルトの名無しさんNGNG
>>205
> http://homepage1.nifty.com/kuuku/gcc-sjis/
かなりad hocな改造だからこのまま取り込まれることはあり得ないだろうが、
対応は必要だろうな。

ただ、--enable-c-mbcharがあまり使われてないのは、文化がどうこうよりも
gettextizeの方が主流になって来てるからじゃないかと思う。
0211デフォルトの名無しさんNGNG
めんどくさいから漏れはSJIS文字を\xxx\xxxと展開するフィルタを
かますだけにしてる。
includeとかは知らん。
0212_NGNG
http://homepage.mac.com/hiroyuki44/
0213デフォルトの名無しさんNGNG
>>206
> できればプログラムをインストールした同じ所におきたいんですが。
プログラムのある場所が自由に書けるなんてものすごい設定が標準の
Windowsににかぶれすぎ
0214デフォルトの名無しさんNGNG
>>213
はいはい。日本語が話せないやつは帰った帰った。
0215デフォルトの名無しさんNGNG
>>210
「どう考えても馬鹿げてる」のはソースに直接日本語文字列を
埋め込むことのほうだよな。
で、GNU信者が感情的だとか日本は三流の国だとかに至っては
ほとんどデンパだ
0216デフォルトの名無しさんNGNG
>>214
日本語読めない奴は帰れ
0217正しい日本語晒しあげwNGNG
プログラムのある場所が自由に書けるなんてものすごい設定が標準の
Windowsににかぶれすぎ
プログラムのある場所が自由に書けるなんてものすごい設定が標準の
Windowsににかぶれすぎ
プログラムのある場所が自由に書けるなんてものすごい設定が標準の
Windowsににかぶれすぎ
プログラムのある場所が自由に書けるなんてものすごい設定が標準の
Windowsににかぶれすぎ
プログラムのある場所が自由に書けるなんてものすごい設定が標準の
Windowsににかぶれすぎ
プログラムのある場所が自由に書けるなんてものすごい設定が標準の
Windowsににかぶれすぎ
0218デフォルトの名無しさんNGNG
後々面倒だからEUCでやっちゃったほうがいい
0219デフォルトの名無しさんNGNG
Windowsの場合も、

>>206
> プログラムの設定ファイルって、どこに置けば言いの?
> できればプログラムをインストールした同じ所におきたいんですが。

としてしまうと、multi user対応guildelineに適合しなくなってしまうわけだが…
0220デフォルトの名無しさんNGNG
>>219
guildelineって何?
0221デフォルトの名無しさんNGNG
ギルドの線。
0222デフォルトの名無しさんNGNG
設定ファイルを配置するディレクトリの
定番はやはり$HOMEですかね
0223デフォルトの名無しさんNGNG
~/Application Data/<APPNAME>/
が基本だろ。
0224デフォルトの名無しさんNGNG
レジストリに入れるのはどうだろう?
0225デフォルトの名無しさんNGNG
~/.gnome/apps/ か?
0226デフォルトの名無しさんNGNG
>>219
Microsoftの方針はともかく、実運用レベルではいまだに
プライベートini派が勢力を保ってるんで。
http://pc2.2ch.net/test/read.cgi/software/1048216458/l50
0227デフォルトの名無しさんNGNG
「2ちゃんのとあるスレでは」でしょ。
0228デフォルトの名無しさんNGNG
Mac OS Xは、~/Library/Preferences/の下に、
例えばnet.2ch.tech.plistってXML plist fileだな。
0229デフォルトの名無しさんNGNG
>>227
スレは例としてあげただけでレジストリ嫌い発言はいたるところで見かけるが
確かに母集団は偏ってるかもな
0230デフォルトの名無しさんNGNG
Linuxにレジストリを導入しようという声が強いから、じきにSolarisとかでも
レジストリが使えるようになるよ、きっと。
0231デフォルトの名無しさんNGNG
>Linuxにレジストリを導入しようという声が強いから、

初めて聞いた。
0232デフォルトの名無しさんNGNG
>>230
ハハ
0233デフォルトの名無しさんNGNG
ほんとになりそうで怖い。
0234デフォルトの名無しさんNGNG
かんべんしてくれ
0235デフォルトの名無しさんNGNG
それじゃあ、UNIXでも移動プロファイル導入ですね。
0236デフォルトの名無しさんNGNG
>>230
AIXを使え。
ODMっていうレジストリっぽいのがあるぞ。
0237デフォルトの名無しさんNGNG
真の革新は常にWindowsに有り。
Unix/Linuxは常に後追いだな。
0238デフォルトの名無しさんNGNG
>>235
$HOMEをNFSマウントすりゃ、似たようなもんだろ。
0239デフォルトの名無しさんNGNG
>>237
標準入出力はUNIXの方が先ですが。
0240デフォルトの名無しさんNGNG
>>238
やっぱり設定ファイルだけログオン/ログオフ時にコピーしないと…
同じ不具合が楽しめません。
0241デフォルトの名無しさんNGNG
Windowsがいつも最初と思ってるとは
おめでたいにもほどがありますな
0242デフォルトの名無しさんNGNG
標準入出力が革新だと思ってるとは
おめでたいにもほどがありますな
0243デフォルトの名無しさんNGNG
Linux + gccなんですが、
コマンドラインでargv[1]に"*"を渡すと、なぜか"2m"という文字列が入ります。
どうしてですか?
0244デフォルトの名無しさんNGNG
そのディレクトリに2mという名前のファイルがあるから
0245デフォルトの名無しさんNGNG
>>243
> argv[1]に"*"を渡すと、

渡していない。
0246243NGNG
>>244,245
すんません、ワイルドカードを忘れていたとは...恥ずかしい
0247デフォルトの名無しさんNGNG
./command '*'
0248COBOLerNGNG
>>242
えっ何を言ってるんですか
革新的に決まってるじゃないですか
0249デフォルトの名無しさんNGNG
*って誰が展開するの?スタートアップルーチン?
0250デフォルトの名無しさんNGNG
シェル
0251デフォルトの名無しさんNGNG
>>249-250

ワラタ
0252デフォルトの名無しさんNGNG
どこが面白いんだ?
0253デフォルトの名無しさんNGNG
たぶん>>251の顔。
0254デフォルトの名無しさんNGNG
デーモン型のようなサーバプログラムは、どうやって作るのが一般的なのでしょうか?

ぱっと思いついたのは、
起動後system関数を用いて常駐専用のプロセスを起動、
以後はパイプ経由でその常駐プログラムを操作・・といった形式なのですが、
ぶっちゃけ、これで良いのでしょうか?




0255デフォルトの名無しさんNGNG
regexを使っているのですが、"^"を使っても文字列の先頭にはマッチしますが、
行頭にはマッチしてくれません。行頭にマッチさせる方法はないものでしょうか?
0256デフォルトの名無しさんNGNG
REG_NEWLINE
0257255NGNG
非常に申し上げにくいのですが、間違ってregexecにREG_NEWLINEと書いていました。
regcompの方にちゃんと書いたら当たり前のように動きました。
どうもありがとうございました。
0258デフォルトの名無しさんNGNG
>>254
daemon自身がfork()し、親はすぐ終了。子は養子縁組に出されて動き続ける。
controling terminalをdetachする。
/tmp,/dev,/var/run辺りにあるnamed pipeを使う。(e.g. lpd, syslog)
が古典的。
0259デフォルトの名無しさんNGNG
>>254
自分で fork() などせずに daemontools にまかせるのが djb 信者的
0260デフォルトの名無しさんNGNG
daemon()呼ぶ
0261デフォルトの名無しさんNGNG
daemonを殺す関数、amon()。
0262デフォルトの名無しさんNGNG
常駐型のサーバプロセスってデーモンにした方がいいんですか?
デーモンにすると何が嬉しいんですか?
0263デフォルトの名無しさんNGNG
amen()じゃなかったっけ。
0264デフォルトの名無しさんNGNG
端末にぶらさがってたら不便だろう。
0265254NGNG
>>258-262

さんきゅー、とりあえずキーワードを元に色々調べて見ます。

0266デフォルトの名無しさんNGNG
>>261,263
abon()
0267デフォルトの名無しさんNGNG
>>264
ふつー inetd 経由で起動させるか、スタンドアロンにするかの選択だろう。
0268デフォルトの名無しさんNGNG
>>267
スタンドアロンにした時に、
コントローリング・ターミナル持ったままだとうざいことを>>264は言ってんでしょ?
シェルのジョブ・コントロールか何かと勘違いしてませんか?
0269デフォルトの名無しさんNGNG
/bin/daemonize はどうよ?
0270名無しさん@EmacsNGNG
XIMがらみのプログラムをC++でいつかは創りたいなぁと思ってるのですが、
GUIのライブラリはどれが便利なんでしょうか?

gtk, qtはなんか使いたくないので、
そうするとMotif, Xtあたりしか残ってないですかねぇ?
0271デフォルトの名無しさんNGNG
お、釣りだ。
0272デフォルトの名無しさんNGNG
>>270
http://pc2.2ch.net/test/read.cgi/tech/1052481777/
0273デフォルトの名無しさんNGNG
>>270
Fox wx
0274デフォルトの名無しさんNGNG
>>270
http://home.pacbell.net/atai/guitool/
http://sal.linet.gr.jp/F/5/index.shtml
0275山崎 渉NGNG
(^^)
0276デフォルトの名無しさんNGNG
前スレがなくなっとる・・・
0277デフォルトの名無しさんNGNG
999999999番以下のスレッドは倉庫行き処理のバグで行方不明になります
0278デフォルトの名無しさんNGNG
読めるぞ。
と思ったらnavi2chのキャッシュか。
0279デフォルトの名無しさんNGNG
>>278
アップきぼーん
0280デフォルトの名無しさんNGNG
>>279
俺もあるがどこへしたらいい?
ウプロダとか言うところにウプすればいいのか?
0281デフォルトの名無しさんNGNG
>>280
それでよろしく頼みます。
http://link.ziyu.net/html/uplink.html
0282デフォルトの名無しさんNGNG
PCゲームってのはコア層がやるもんだよ。
過去の現象見ても、事務機としての普及が第一だろうね。

はっきり言ってLinux/UNIXは汎用的な事務機としてはロクなもんじゃない。
基本的に計算機の玄人が使うようにできてるからな。
事務屋にゃ扱える代物じゃねーんだよ。

ただ、つけいる隙はあると思うね。
Linux/UNIXはUIの取り換えがきくから、専用機として作り込むのにはWindows
なんかより断然いいだろう。
そこらへんのじじばばが何気に街角で触ってる機械が実は誰も知らないけど
Linuxでしたなんて現象はこれからどんどん増えるだろうね。
事務機としてもマルチウィンドウが必要なところってのは実はあんまり無い。
その証拠にほとんどのWindowsユーザはアプリケーションを最大化して使って
るじゃない。
Xなんか使わなくてもDOS時代のUIを思い出せば充分使えるものになるだろうね。
むしろその方が混乱が無いだろう。アクティブウィンドウが切り替わっただけ
で「パソコン壊れたー!」ってパニック起こす連中を嫌と言うほど見て来た。

パソコンとしてもそれに適したUIが出て来れば使う人はいるだろうね。
そのへん頑張ってるのがKDEやGnomeだが、こっちはさほど利点が無いから難し
いな。
NECや富士通が気合い入れて自社UIを作って出しゃいいんだがな。KDEやGnome
ベースでもいいからさ。


0283デフォルトの名無しさんNGNG
>282
>Linux/UNIXはUIの取り換えがきくから、専用機として作り込むのにはWindows
作ってから言え

>Linuxでしたなんて現象はこれからどんどん増えるだろうね。
作ってから言え



>282
作ってから言え
0284デフォルトの名無しさんNGNG
>>283
コピペにマジレスですか?
0285デフォルトの名無しさんNGNG
>284
どこのコピペだよ
0286デフォルトの名無しさんNGNG
>>285
Linux板
UNIX板にもコピペされている
0287デフォルトの名無しさんNGNG
>286
コピペにレスしたって別にいいじゃねーか
いちいち反応すんなボケ
0288デフォルトの名無しさんNGNG
>>287
ごめんね
0289デフォルトの名無しさんNGNG
コピペにマジレスと指摘されて「どこの」と絡むも、
あっさり反論されたので開き直った287に萌え
0290デフォルトの名無しさんNGNG
ある意味、男らしい。
0291デフォルトの名無しさんNGNG
>NECや富士通が気合い入れて自社UIを作って出しゃいいんだがな。KDEやGnome
>ベースでもいいからさ。
悪夢。
0292デフォルトの名無しさんNGNG
童夢君。
0293デフォルトの名無しさんNGNG
たまにはあげるか。
0294278NGNG
>>280
アップした?
0295デフォルトの名無しさんNGNG
>>291
誰も使わないです。
0296デフォルトの名無しさんNGNG
★★★★★★★★★★★★★★★★★★★★
★  激安アダルトDVDショップ   ★
★  お買い得セール1枚500円〜!急げ!★
★★★★★★★★★★★★★★★★★★★★
        激安でDVDをGET!
      http://www.get-dvd.com
   何と! 1枚 500円〜 セール中!

   インターネット初!「きたぐに割引」
  北海道・東北の皆様は送料も激安!!
      http://www.get-dvd.com
       ゲットDVDドットコム!
   
    今すぐアクセス  Let's go !!!!!!!
0297_NGNG
http://homepage.mac.com/hiroyuki45/hankaku03.html
0298_NGNG
http://homepage.mac.com/hiroyuki45/
0299デフォルトの名無しさんNGNG
>>276
●板で捜索願いを出したらhtml化してもらえました。
http://pc2.2ch.net/tech/kako/992/992057422.html
0300デフォルトの名無しさんNGNG
>>299
激しく感謝します。

そのフォーマット(?)にしたがってURLをつくれば行方不明のスレッドも見つけられるのか。
0301デフォルトの名無しさんNGNG
html化されてなきゃ無駄。
0302山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0303デフォルトの名無しさんNGNG
age
0304名無しさん@EmacsNGNG
hogeさんが、"/home/hoge/sock_afuinx"のパス名で
AF_UNIXソケットで通信するサーバを作った時に、

hoge以外のローカルなユーザーmogeが内部ソケットの通信内容を傍受する事は可能でしょうか?
また、mogeが"/home/hoge/sock_afuinx"を用いたクライアントを使って、
こちらのサーバとやりとりされる事ってあるのでしょうか?

なんか日本語になってなくてすいません。
0305デフォルトの名無しさんNGNG
日本語になってない以前に、UNIXソケットについてちっとは
調べた方がよいと思われ。
0306デフォルトの名無しさんNGNG
>>304
rootならできる。
0307デフォルトの名無しさんNGNG
C言語なら俺に聞け!スレから誘導されました。

exec系関数というのを詳しく教えてください。
いくつか種類があるのは分かったんですが、どういう違いがあって
どう使うのか分かりません。
0308デフォルトの名無しさんNGNG
man execve
man execv
0309デフォルトの名無しさんNGNG
execve(2) 最後はこれが下請
execvp(3) PATH検索版
execle(3) 可変引数版
あたりに限定して調べてみては?
0310デフォルトの名無しさんNGNG
根本的にコマンドライン引数とかpathとか環境変数が解っていないという可能性は?
0311デフォルトの名無しさんNGNG
とりあえず、execlp(3)から試してみれば、分かるようになるだろ。
0312デフォルトの名無しさんNGNG
forkから教えてやらんといらん誤解を招きそうだ。
0313307NGNG
forkは知ってます。exec系のどれを使うべきなのか
何を根拠に選べばいいのか、と
それぞれの場合で、引数に何を書いていけばいいのかが分からないんです。
例えば、「cd」を実行させようとするならば、どのように書けばよろしいのですか?
0314デフォルトの名無しさんNGNG
>>313
chdir()
0315デフォルトの名無しさんNGNG
どうしても exec 使って cd を実行したいなら
execl("/bin/sh", "sh", "-c", "cd", 0);
かなあ。なんの意味もないけど。
0316デフォルトの名無しさんNGNG
>>313
shellの内部関数は、>>314のように自分でやれ。
shellに実行させてもshell内だけでしか有効ではない。
0317デフォルトの名無しさんNGNG
内部関数→内部コマンド
0318307NGNG
>>315
ありがとうございます。
execl("ディレクトリ","コマンド",・・・,ヌルポインタ);
ということですか?
パス検索版というほうの場合はどう書けばいいのでしょう?
0319デフォルトの名無しさんNGNG
man読めよ・・・マジで。
0320デフォルトの名無しさんNGNG
>>318 ガッ
0321デフォルトの名無しさんNGNG
system使っちゃえよ。
0322デフォルトの名無しさんNGNG
パス検索版は、例えば"ls"をコマンドとしたときに
環境変数PATHを参照して/binや/usr/binなどを検索してくれる。
逆に、非検索版は正しい相対パスか絶対パスを指定する必要がある。
例えば、"/bin/ls"など。

まぁ、プロセス間の連携を考えない用途では大抵は
system()かpopen()で事が足りるのでfork()/exec()しないわけだが。
0323307NGNG
>>319
そうですね、分かりました。ありがとうございました。
0324デフォルトの名無しさんNGNG
>>322
ラッピングされてるだけだけどね。
0325デフォルトの名無しさんNGNG
>>321
system は shell のメタ文字の処理が面倒くさいからなあ。
0326デフォルトの名無しさんNGNG
Solarisのpthreadを今激しく疑っているのですが、
スレッド関数の内で、fprintfを呼び出すのはやめた方が良いのでしょうか?
1年間普通に動いていたプログラムが、fprintfでcoreを吐いてしまいました。
どなたかpthreadを熟知している方、ご指導よろしくお願いします。
0327デフォルトの名無しさんNGNG
○  ヘコヘコ     ★ 無修正裏DVD ★      ○  ドピュ
( ヽ  ○   注文後2日でお手元へお届けします ( ヽ.。   ○
)))」 ̄[     http://www.d-para.com       )))」 ̄[
0328デフォルトの名無しさんNGNG
Solarisのバージョンも分からずに答えられる香具師は神。

おそらくこっちの方が詳しいのが多いと思われ。
pthread地獄
http://pc.2ch.net/test/read.cgi/unix/1010933537/
0329デフォルトの名無しさんNGNG
>>326
> スレッド関数の内で、fprintfを呼び出すのはやめた方が良いのでしょうか?

マニュアル読んでMT-Safeかどうか調べなよ。Solaris 9はそう。

> Solarisのpthreadを今激しく疑っているのですが、

その前にマニュアルは読めるのか?
0330デフォルトの名無しさんNGNG
FILE構造体のポインタをどこかで上書きしてしまっているにも関わらず
fprintfに与えているか、FILE構造体がNULLだとか。

該当する関数をスレッドとして起動せずに、単純に関数として起動して
みては?
sigsegvをトラップしてみるのもアレかと。
0331デフォルトの名無しさんNGNG
>>330
>FILE構造体がNULL

重箱をつつくようだけどな。変にかっこつけてファイルポインタと言う単語を使わなかったのが敗因か。
0332デフォルトの名無しさんNGNG
構造体がNULLなんてありえないよな。構造体へのポインタがNULLだよな。
0333デフォルトの名無しさんNGNG
FORTRANのプログラムでRAND()を使って1から10までの
乱数を発生させるのってどうやるんですか?かなり初心者
なもので誰か教えていただけませんか?
0334デフォルトの名無しさんNGNG
>>333
>かなり初心者なもので誰か教えていただけませんか?
教えていただけません。
0335デフォルトの名無しさんNGNG
g77のinfoからコピペ。あとは自助努力するよし。

Rand Intrinsic
..............

Rand(FLAG)

Rand: `REAL(KIND=1)' function.

FLAG: `INTEGER'; OPTIONAL; scalar; INTENT(IN).

Intrinsic groups: `unix'.

Description:

Returns a uniform quasi-random number between 0 and 1. If FLAG is
0, the next number in sequence is returned; if FLAG is 1, the generator
is restarted by calling `srand(0)'; if FLAG has any other value, it is
used as a new seed with `srand'.

*Note SRand Intrinsic::.

_Note:_ As typically implemented (by the routine of the same name in
the C library), this random number generator is a very poor one, though
the BSD and GNU libraries provide a much better implementation than the
`traditional' one. On a different system you almost certainly want to
use something better.
0336デフォルトの名無しさんNGNG
age
0337デフォルトの名無しさんNGNG
gccでc++の話なんですが、EUCで書かれたソースにおいて、
文字列部分をSJISエンコードでビルドすることは可能ですか?
SJIS処理系のプリンタに、ハードコーディングした文字列をそのまま渡せないかな、と
考えているのですが。
#pragmaかなにかで何とかならないものでしょうか。
0338デフォルトの名無しさんNGNG
お前さんがそういうpragma処理をgccに組み込みゃ、できるかもな。
普通はもうちっとましなことを考えるもんだが、お前さんはユニークだな。
0339デフォルトの名無しさんNGNG
>>337
変換関数一個用意するだけだべ。
0340デフォルトの名無しさんNGNG
別ファイルにでも#defineしておいて
それをSJISで保存しておいてincludeして使えば
0341337NGNG
レスありがとございます。
自分で書くコードは問題ないんですが、
プロジェクトにSJISもEUCも半角カナもOS依存文字も気にしない人がいるんで、
これで動くんだからいーじゃん、てな感じなんです。
で、ソースファイルはそのままに、なんとか対応できないか考えてるわけで。
気苦労してるわけなのです。
0342デフォルトの名無しさんNGNG
> プロジェクトにSJISもEUCも半角カナもOS依存文字も気にしない人がいるんで、
> これで動くんだからいーじゃん、てな感じなんです。
> で、ソースファイルはそのままに、なんとか対応できないか考えてるわけで。
馬鹿には馬鹿と言ってくれ。
0343337NGNG
>>342
…上司なんで。
愚痴っても始まらないので、何とかなんないもんかと。
話が変な流れにならないうちに、この辺で失礼します。
0344デフォルトの名無しさんNGNG
>>343
イリーガルな文字が含まれているとソースの管理ができないとでも言えないのかな?
0345デフォルトの名無しさんNGNG
Linuxでtmpfileを使って一時ファイルを作っても、P_tmpdir以下にそれらしいファイルが見つからないのはオープンしたままunlinkしたからですか?
0346デフォルトの名無しさんNGNG
unix系では、unlinkしたらディレクトエントリは削除される。
ただし、openしたままのプロセスからは、相変わらず普通にアクセスできる。
なお、そのプロセスがcloseしたら、実体もなくなる(ように見える)。

つまり、createしておいてすぐにunlinkすると、見られずにディスクを使える。
#つーか、覗かれたくない一時ファイルでこの手を使ったことある。
0347デフォルトの名無しさんNGNG
>>346
なかなか面白い手法だね、それ
一時ファイルを確実に残さない方法として有効そう。
0348デフォルトの名無しさんNGNG
>>346,347
定跡だよもん。

0349デフォルトの名無しさんNGNG
>>347
激しくガイシュツなんだが…。
0350347NGNG
>>348,349
UNIXがそういう挙動するのは知ってるが、それを
積極的に使ってる例は知らなかった。
SolarisとかLinuxとかで標準で入ってるプログラムでも
そういうことしてる?

面白いとは思うが、ディスク容量が見た目と一致しなかったり
unmountできなくなったりするので、素人には勧められない

0351デフォルトの名無しさんNGNG
> なかなか面白い手法だね、それ
と言っておいて
> UNIXがそういう挙動するのは知ってるが
ってのはアホ?
0352デフォルトの名無しさんNGNG
>>350
単に自分が不勉強なだけのくせに、何気取ってんだよ。
0353デフォルトの名無しさんNGNG
>面白いとは思うが、ディスク容量が見た目と一致しなかったり
>unmountできなくなったりするので、素人には勧められない

至極普通のふるまいですが? 素人にも勧めますが?
一生DOSでも使っててください。


fd=creat("foo",0644);
lseek(fd,1024*1024*1024,0);
write(fd,"bar",3);

が1G容量食うと思ってる人種なんだろうな。
0354んなわけないNGNG
>unmountできなくなったりするので、

File system treeから辿れると、openしててもumount出来るんだろうか…
0355ヽ(´ー`)ノNGNG
他のプロセスからは開けないけど、使ってる事は確かなんだから、
umount できないのは当り前だと思うのだが。
0356デフォルトの名無しさんNGNG
APUEをちゃんと読みましょう。
0357デフォルトの名無しさんNGNG
実はNT4でも同じことができる。
なぜか2000からできなくなったけどリネームはまだできる
0358デフォルトの名無しさんNGNG
>>357
ヘェーとでも言ってほしいの?
0359デフォルトの名無しさんNGNG
>>357 = 0ヘェ〜
0360デフォルトの名無しさんNGNG
高精度のタイマーを使いたいのですが、
nanosleepとusleepのどちらを使ったらいいでしょうか。
マニュアルによると、nanosleepはPOSIX.4準拠、usleepは4.3BSD準拠となっています。
性能的にはマイクロ秒の精度でいいので、どちらでもかまいませんが、互換性が高いのはどちらですか?
0361デフォルトの名無しさんNGNG
>>360
nanosleep
0362デフォルトの名無しさんNGNG
一般には
POSIX>>>>>>>>>4.3BSDなんですか?
0363デフォルトの名無しさんNGNG
その不等号で何を意味したいのかがわからんが、たぶん数的には

 nanosleepしかもってないOS > 両方実装してあるOS > usleepしかもってないOS

ではなかろうか。
0364デフォルトの名無しさんNGNG
じゃあgettimeofdayとclock_gettimeではどちらの方が汎用性が高い?
0365デフォルトの名無しさんNGNG
nanosleepはLinuxだと精度が悪いな。最高で10ミリ秒程度の精度しかない。
10ミリ秒以下の時間眠るようにに指定しても、かならず10ミリ秒眠ってしまう。
0366デフォルトの名無しさんNGNG
>>365
Alphaなら1msで戻ってくるんじゃないかと。
2.6もそうなるかな。
0367デフォルトの名無しさんNGNG
nanosleep(2)のバグのところに書いてあるね。
0368デフォルトの名無しさんNGNG
>>365
スケジューラが10ms刻みだからな。
カーネルコンフィグしなおせばたぶんそれ以上の精度も可能。
0369デフォルトの名無しさんNGNG
>>368
10msってのは386のハードの制約じゃないの?
0370デフォルトの名無しさんNGNG
制約があるとしても386とは関係なく
使っているハードウェアタイマーによるもの
0371デフォルトの名無しさんNGNG
昔は、それ位にしておかないとタイマ割り込みの処理に時間食いすぎて、
アプリケーションが使える時間が短くなってしまったのですよ。
タイマ自体はもっと短い周期で動かせます。
0372デフォルトの名無しさんNGNG
BSDだとoptions HZ=500 で分解能2msになる。
犬は知らん。
0373デフォルトの名無しさんNGNG
犬はinclude/asm-${ARCH}/param.hの
#define HZ ほげ
同じく500で分解能2ms。
0374デフォルトの名無しさんNGNG
自分が現在いるディレクトリを表示するにはどうすればいいんですか?
0375デフォルトの名無しさんNGNG
環境変数を見る。
0376デフォルトの名無しさんNGNG
getcwd(3)
0377デフォルトの名無しさんNGNG
>>375
プ

>>376
ありがとうございました。それでできました。
0378デフォルトの名無しさんNGNG
目的にあった関数の探す方法は/usr/share/man/man[23]/*をしらみ潰しに
調べればいいのはわかりましたが、それがどのsoファイルに含まれているのかは、
どうやって調べますか? 一般的な手順があれば教えてください。
0379デフォルトの名無しさんNGNG
>>378
そういう順番になってしまうこと自体、既に筋が悪いと思われ。

それはそれとして、*.soの中のシンボルを知りたいならnmを使え。
0380デフォルトの名無しさんNGNG
>>379
では筋のいいひとはどうするんですか?

>それはそれとして、*.soの中のシンボルを知りたいならnmを使え。
ということは必要な関数が分ってもどのファイルをリンクしたらよいか
分らないときは、/lib,/usr/libを全てnmで調べてるんですか?
0381デフォルトの名無しさんNGNG
>>378
必要なライブラリって、普通man pageに書いてない?
0382デフォルトの名無しさんNGNG
>>381
LinuxのGNU関連のには載ってなかったりします。
./configureのプリフィックスでライブラリファイル名も
任意に代えられるから載せられないってのもあるのかも
しれませんが。
0383デフォルトの名無しさんNGNG
>>381
今久しぶりにPC-BSDを起動してみたら、これには
LIBRARYというセクションがちゃんと入ってました。
0384デフォルトの名無しさんNGNG
>>380
google
0385デフォルトの名無しさんNGNG
>>384
インターネットに接続できないときはどうするんですか?
0386デフォルトの名無しさんNGNG
周りの人に聞く。
0387デフォルトの名無しさんNGNG
>>380
筋のいいひとは目的にあった関数を探す方法として/usr/share/man/man[23]/*を
しらみ潰しにしたりしない。
体系的な知識を当たれば当然必要なライブラリはその過程でわかっている。
manをしらみ潰しする程度の人にはnmで全てのライブラリのシンボルを調べるの
が相当だろう。

0388デフォルトの名無しさんNGNG
QDBM ってどう?

http://qdbm.sourceforge.net/
0389デフォルトの名無しさんNGNG
>>380
ライブラリのシンボル調べるよりソースコードを調べる方がいい
0390デフォルトの名無しさんNGNG
>>378
-lなんとか、を知るだけでは不満で、(通常manualに記述)
soの絶対パスが知りたいわけですか?
-lなんとか、分かればlocate, gcc -v, その他でなんとかなるでしょ。

Darwinだと、Framework(libraryのrich版)を組み合わせてFrameworkを作れるから、
この辺の調査がもう一手間いることになる。
0391デフォルトの名無しさんNGNG
>>388
http://pc2.2ch.net/test/read.cgi/db/1057023401/l50
0392デフォルトの名無しさんNGNG
>>380
for name in /usr/lib/lib*.so; do nm $name | grep $symbol >/dev/null 2>&1 && echo $name;done

全部調べるのだってこの程度だ。
筋の良くない >>380 は,この種のことにも疎いのだろう。
0393デフォルトの名無しさんNGNG
最近、直リンクしただけで規制されるようになったらしいんですけ
ど、http://という書き込みを自動的にttp://に直すように出来ま
せんか? 例えば以下のように。

http://www.example.com/
  ↓
ttp://www.example.com/


【広告】新機能 Rock54【自動排除】
ttp://qb3.2ch.net/test/read.cgi/operate/1066291585/l50
0394デフォルトの名無しさんNGNG
UNIXプログラミング質問すれ Part2

1 :デフォルトの名無しさん :03/06/09 07:21
UNIXおよびUNIX clone環境一般のプログラミングに関する質問スレッド
0395デフォルトの名無しさんNGNG
linux板で聞いたらこちらへ振られてしまいました。
すぐにはレスできませんが、宜しくお願いします。

UNIXドメインソケットで開いたファイルは、カーネル側にソケットとか
の構造体が作られて、socket()を呼び出したプロセスには記述子が帰る
わけですね。もちろんプロセス側はread()とかでこの記述子を使うわけです。

ならば、あるプロセスが何かの理由で正常に終了しなかった場合、この
構造体はカーネルに残ったままになるのでしょうか?

カーネルに残ったままなら、別途記述子の番号を保存しておいて、後ほど
別のソフトを立ち上げてread()とかにその記述子の番号を使うことが
できるのでしょうか。もちろん、通信のもう一方の口はopen()されたまま
だとします。
0396デフォルトの名無しさんNGNG
>>395
通常はそのプロセスが異常終了したら、それらが使用していた
リソースはすべてOSが回収します。つまりclose()されるので利用できません。
0397デフォルトの名無しさんNGNG
>>395
カーネル内のそういった構造体は、基本的には使われなくなったら開放される。
参照しているプロセスが全て終了すると、開放されると考えればよい。

あと、プロセスが正常に終了しなかった、と書いてあるけど、終了したんなら
カーネルから見ると別に違いはない。

あと、UNIXドメインのソケットだと、ファイルにbindしていると思うけど
そのファイルはプロセスが終了しても残る。念のため。
0398デフォルトの名無しさんNGNG
>>395
linuxの場合, /proc/$PID/fd 覗きゃ直感で理解できるだろ。
0399デフォルトの名無しさんNGNG
>>395
ファイル記述子は、そのプロセス内だけで有効です。
>>398の/procを特別な例外として。
0400デフォルトの名無しさんNGNG
いや,だから,プロセスにbindされたモンと理解できるだろ
って意味だったのに…

同じdescriptorでも中身ちゃうし。
0401デフォルトの名無しさんNGNG
>>400
でも/procって外から読み書きできちゃうし…
直感的には理解できないでしょ。これは特別だと思わないと。
0402デフォルトの名無しさんNGNG
そんな特別だってことは,man proc すれば
0403395NGNG
>>396-402 皆様レスサンクスです。
要はプロセスに対して記述子が与えられる、プロセスが死ねば回収されると。
stdoutとかstderrとかの記述子を見ると、1とか2とかいう値になってて、
OS全体で共通なのかと勘違いしていました。

複数の異なる、あるいは同一のプロセスから任意のログファイルに書き出すような
ロガーを作りたいと思ってます。何かの手違いであっても、ロガーが勝手に死ぬ、
死んだままというのは良くないことであり、何らかの形で接続を復旧しなければ
なりませんね。それをどうするかということで悩んでいました。

(apacheのロガーみたいに独立したものにしたい、そして汎用性があれば尚良い)
0404デフォルトの名無しさんNGNG
>>403
syslog を改良したい、というようなことですか?
0405デフォルトの名無しさんNGNG
readdirって今いるディレクトリの情報しか得られないんですか?
opendirに"../"を与えて読んで行こうとするとディレクトリの
オープンはできてもファイルを辿って行けないで終わってしまうんですが。

"./"を与えた場合は全て見ることができたんですけど。
0406デフォルトの名無しさんNGNG
>>405
どうせ Permission denied だろ
0407デフォルトの名無しさんNGNG
>>406
プログラムを動かしたディレクトリにあるファイルと
同じファイル名のファイルだけ表示されたんですけど。
終わったときにperrorではfile not foundみたいなのが表示されてました。

例えば/aaa/bbbにa.outとaaaとbbbとcccがあってそこで"../"でopendirしてreaddirすると
/aaaにaaaとbbbとdddがあった場合aaaとbbbだけ見れて後はエラーで終わってるみたいです。
0408デフォルトの名無しさんNGNG
すみません。自分のプログラムのバグでした。
0409395NGNG
>>404 まぁ、そんなところです。
syslogだとあらかじめ指定されたファイルにしか出力できない不便さが
ありますから、なんとかしたいな、と思った次第です。
0410デフォルトの名無しさんNGNG
>>409
/dev/logについて調べてみれ
/dev/printerとかよぉ

$ ls -l /dev | egrep ^s
0411デフォルトの名無しさんNGNG
iconv()に関して質問させてください。
ちょっとお伺い立てるべきスレがわからなかったのでマルチになっておりますが申し訳ございません。
static int KONBU(char *to_code, char *from_code, const char **inp, char **outp, size_t *inl, size_t *outl)
{
iconv_t icv_hook;
size_t ret_val;
icv_hook = iconv_open(to_code, from_code);
if(icv_hook == (iconv_t)-1)return(ANS_ERR);// NG Return
ret_val = iconv(icv_hook, inp, inl, outp, outl);
iconv_close(icv_hook);
if(ret_val == (size_t)-1){
if(errno == EILSEQ) printf("EILSEQ\n");
else if (errno == E2BIG) printf("E2BIG\n");
else if (errno == EINVAL) printf("EINVAL\n");
return(ANS_ERR);// NG Return
}
return(ANS_OK);// OK Return
}
上記のようなiconv()を用いた関数があります。
unsinged char *sb, db;
ret = KONBU("JIS7", "PCK",(const char **)&sb,(char **)&db,2,8);
そしてこのように呼び出しており、unchar sbには
83 31 83 32 83 34 ....といったようなデータを渡しています。
実行結果はEINVALが返ってきます。
ここで質問なのですが
�@第5引数の2はsbを2バイトずつ読み込むということでよろしいのでしょうか?
�A第6引数の8は何を指すのでしょうか?
�Bsbには0x81 0x31 ....というようにヘキサを読み込ませているつもりなのですが
そもそも文字列で渡すべきなのでしょうか?
�CEINVALのエラーの意味がよくわからない。
以上4点になります。
厨な質問かとは思いますがご教授お願いいたします。
0412デフォルトの名無しさんNGNG
>>411
> �@第5引数の2はsbを2バイトずつ読み込むということでよろしいのでしょうか?
> �A第6引数の8は何を指すのでしょうか?

そこポインタでしょ。

> ret = KONBU("JIS7", "PCK",(const char **)&sb,(char **)&db,2,8);

は間違った使い方。man iconv

> �Bsbには0x81 0x31 ....というようにヘキサを読み込ませているつもりなのですが
> そもそも文字列で渡すべきなのでしょうか?

どうリテラルを表現してもcharには変りないでしょ。

> �CEINVALのエラーの意味がよくわからない。

man iconv
0413デフォルトの名無しさんNGNG
>>403
ロガー側は監視プロセスから起動して、ロガーが死んだら再起動するようにする。
(Sytem-V なら inittab とかで何とかなりそう...。)
ログ書き込み側は、ロガーが死んだことを検出したら再接続するようなライブラリを提供して、それを使ってもらう。
0414703NGNG
システムコールでユーザ名を得ることってできますか?
user_from_uid(uid(), 0)
としましたが、「uundefined reference to `user_from_uid'」
とエラーになります。user_from_uid がないらしいです。
環境は Debian woody です。
よろしくお願いします。
0415デフォルトの名無しさんNGNG
getpwuid
0416703NGNG
>415
できました。ありがとうございます!


0417403NGNG
>>413 thanx
0418デフォルトの名無しさんNGNG
cursesライブラリを使ったプログラムを作っています。

最初はprintf()等で画面(=標準出力)に出力していて、
必要になったらinitscr()でウィンドウを確保して画面を更新し、しかる後にendwin()で解放したら
その後は再びprintf()等で画面に出力するということはできないでしょうか?

現在の状態では、endwin()をした後にprintf()で出力しても何も表示されず、
Ctrl-Cで終了させると一気に出力されます。(バッファにたまっているような感じ)

なお、OSはSolaris8(Intel版)を使っています。
0419デフォルトの名無しさんNGNG
>>418
cursesがstdioのバッファを大きくしちゃうのかな。
printfの後にfflushをいれてみるとか。
0420418NGNG
>419
素早いレスありがとうございます。
printf()を呼んだ後にfflush(stdout)したら、無事出力されました。

動作を見てみると、出力文字列と確保していた仮想画面が混ざってしまっているみたいです。
"test\nstring"と出力させると、

test
   string

のように、"test(1行分のスペース)string"と出力されます。
また、一度initscr()/endwin()をしてしまったら、その後は
printf()のたびにfflush()しないと出力されないようです。

ちなみに、fprintf(stderr,...)としたら即座に(fflush()しなくても)出力されました。
邪道ですが…。画面が崩れるのは上と同様です。

今は試験用コードとして
initscr();
move(2, 5);
printw("Value: %d", 5);
refresh();
nocbreak();
endwin();
refresh();
としているのですが、呼び足りない関数などありませんでしょうか?
0421デフォルトの名無しさんNGNG
>>420
> "test\nstring"と出力させると、

使った関数書いてよ!
0422418=420NGNG
>421
あぁぁ…すいません。
 printf("test\nstring");
として出力させました。
0423デフォルトの名無しさんNGNG
cursesがttyをrawモードにするから。
\n を \r\n にすればいい。
0424418=420NGNG
>423
深夜のレス、ありがとうございます。
\nを\r\nに書き換えたところ、正しく(>420の例でいくと"test(改行)string")出力されました。

また、調べていて見つけたresetterm()をendwin();refresh();の後に呼び出したところ、
\nのままで正常に出力されるようになりました。
(rawモードがリセットされたから、ということなのでしょう)

あと一点、fflush()しないと出力が行われないという点なのですが、
こちらも(fflush()を呼ばなくてもいいように)元に戻すことはできないものでしょうか?
resetterm()をしても、この問題は解決されませんでした。
0425デフォルトの名無しさんNGNG
printfは改行コードが来るとflushする仕様なので、改行コードなしの文字列を表示させたければ
fflushしないといけないと思う。
0426418=420NGNG
>425
深夜…というよりはもう早朝ですが、レスありがとうございます。
そういう問題があったんですね。
今まで深く考えずにprintf()を使っていましたが、これからは気をつけねば。

改行があれば〜ということで、改行を付加すればよいかと思い
printf("test\r\nstring\r\n");などとしてみたのですが、
残念なことにバッファリングされたままでした。

で、いろいろ調べていて、setlinebuf()を使えば
ストリームをラインバッファに変更できるということがわかったので
resetterm()の後に更にsetlinebuf(stdout);を呼び出したところ、
printf("test\nstring\n");のような呼び出しで正しく出力されるように戻すことができました。


最後になりますが、深夜にもかかわらず多くの助言本当にありがとうございました。
0427デフォルトの名無しさんNGNG
resetterm()してから
setvbuf(stdout, NULL, _IOLBF, 0);
してみ。
0428デフォルトの名無しさんNGNG
シグナルハンドラがどのプロセスからシグナルを送られたか調べる方法はありますか?
お願いします。
0429デフォルトの名無しさんNGNG
>>428
POSIX 1003.1bのsignalがあれば。e.g. Solaris 9
http://www.opengroup.org/onlinepubs/007904975/functions/sigaction.html
0430428NGNG
ありがとうございます。
0431デフォルトの名無しさんNGNG
>>426
とりあえずendwin()のあとに、refresh()を呼んでるのが
気持ちわるいと思う。

Solaris8(SPARC)で refresh を外してちょっと試してみたけど、
それでも stdoutがブロックバッファモードになってるみたいで、
setlinebuf(stdout)が必要だった。

ググってみたら、
http://www.mit.edu/afs/athena/contrib/games/src/bsd-games-2.13/battlestar/fly.c
で、
> endwin();
> setvbuf(stdout, NULL, _IOLBF, BUFSIZ); /* Needed for ncurses */
だって。ふーん。
0432426NGNG
>>427,431
レスありがとうございます。

>427
setvbuf()でもsetlinebuf()でもやることは同じ、
ただしsetlinebuf()の方は互換性が低い、ということみたいですね。
同じ結果を得られるなら互換性が高い方がいいですし、setvbuf()を使うように変更しようと思います。

>431
試験中はとにかくクリアしてやれとやっていましたけど、
確かに"end"したあとにrefresh()はまずいですね。取り除かねば。

その後試していて、resetterm()を呼ばないとカーソルが左上には戻ってはくれないものの
stdoutをラインバッファに戻せば出力は元に戻るみたいですね。
# resetterm()はendwin()の中で呼ばれるものらしいので、下手に呼ぶべきではないでしょうし。
 カーソルが左上に行ってくれるのはちょっとうれしいですけど…。

何とか解決したかと思っていましたが、
本番の方のプログラムを実行するとプログラムの終了時にシェルが終了してしまうことがわかりました。
ただ、ほぼ同じことをやっている(はずの)試験用コードでは起きない現象なので
これについてはどこか他の部分に原因がありそうです。

追加の情報ありがとうございました。大変勉強になりました。
0433デフォルトの名無しさんNGNG
>>432
> これについてはどこか他の部分に原因がありそうです。

落ちるってのはそのプログラムを実行した対話モードのシェルのこと?
そりゃ、そのシェルが悪いでしょ(w
0434426=432NGNG
>433
>落ちるってのはそのプログラムを実行した対話モードのシェルのこと

はい、それのことです。え?と思い試してみたところ

sh -> 落ちない
csh -> 落ちない
bash -> 落ちる(プログラムが終了すると自動的にexitと入力(?)されシェルも終了する)
tcsh -> 落ちる(同上)

という結果になりました。う〜ん…。
しかし、試験コードではどれを使っても落ちませんでしたので、
何かの違いでシェルが終了したりしなかったりしてるんだと思います。
解決までたどり着けるかはわかりませんが、できるところまでコードを追っていこうと思います。
0435デフォルトの名無しさんNGNG
libreadlineとか使うshellは、foregroundなjobが終了した時に、
ttyのmodeを自分好みに戻すでしょ。Ctrl-CとかCtrl-Pとか使いたいからね。で、
$ cat <Return>
などとやる時のために元のモードは常に保存しておくのよ。
それはユーザがsttyしたりして意図してそうした状態であることが多いから。
$ ./a.out <Return> # あなたのprogram
$ stty erase ^h
$ tput どうしたこうした
なんて見分け付かないからね。

で、それが余りにも意表をつく状態だったんでしょうね。
まあ落ちるのはshellが悪いけどね。
0436デフォルトの名無しさんNGNG
>>434
> bash -> 落ちる(プログラムが終了すると自動的にexitと入力(?)されシェルも終了する)
落ちるっていうか、EOFと見なされてるんだろうな。
0437デフォルトの名無しさんNGNG
UNIXネットワークプログラミングVol.1の4章を読んでいて思ったのですが、
UNIX上のプログラミングを極めるというのは、その実装の歴史をよく
理解していないとダメなんですかね。4.1cBSDではどうだったとかの話しが
出てくるあたりは流石に閉口しました。
0438デフォルトの名無しさんNGNG
つまらないなら読み飛ばせばいいでしょう。
0439デフォルトの名無しさんNGNG
>>438
UNIXを  極  め  た  い  んです
0440デフォルトの名無しさんNGNG
>>439
http://pc.2ch.net/unix/
バイバイ
0441デフォルトの名無しさんNGNG
>>439
> UNIXを  極  め  た  い  んです
あんたじゃ無理。
他のことに時間使った方がいいよ。
0442デフォルトの名無しさんNGNG
>>441
女の子とデートしたりエッチしたり、結婚して子供育てたり
他に楽しい事やるべきことは沢山ありますからね。
0443デフォルトの名無しさんNGNG
それでもUNIXのカルトQってあったら見たい
0444デフォルトの名無しさんNGNG
>>439
カーニハン、パイク「UNIXプログラミング環境」アスキーは必ず読めよ。
http://www.amazon.co.jp/exec/obidos/ASIN/4871483517
0445デフォルトの名無しさんNGNG
>>441
それは余計なお世話だろ。
0446デフォルトの名無しさんNGNG
読んどけ
http://www.tuhs.org/
0447デフォルトの名無しさんNGNG
全員五つ星の評価か。
訳者の自作自演だな
0448デフォルトの名無しさんNGNG
>>447
え!? >>444の本の話? 当然の評価じゃない?
当時のAT&T系UNIXに合わせた内容であること以外に欠点が見つからない…
0449デフォルトの名無しさんNGNG
>>448
古い
0450デフォルトの名無しさんNGNG
age
0451デフォルトの名無しさんNGNG
書き込みがないぞ(-_-;)
0452デフォルトの名無しさんNGNG
やっぱりみんな emacs 使って開発してるの?
自慢の開発環境を教えて下さい。
0453デフォルトの名無しさんNGNG
catでデバドラ書きます。
0454デフォルトの名無しさんNGNG
>>453
ネタは無用
0455デフォルトの名無しさんNGNG
vi でちまちまやるのが好きです。
0456デフォルトの名無しさんNGNG
onSiteならmule、offSiteならxyzzy。
0457デフォルトの名無しさんNGNG
xyzzyってなんと読むの?じじぃ?
0458デフォルトの名無しさんNGNG
POSIX regex (言語はC)では、正規表現の括弧内が文字列のどの部分にマッチしたか
とか調べられないわけですか?
0459デフォルトの名無しさんNGNG
られます。
0460デフォルトの名無しさんNGNG
終了時にデータをファイルに保存したいのですが、
トラップするシグナルは SIGINT SIGTERM SIGKILL でいいですか?
0461デフォルトの名無しさんNGNG
SIGQUITとかあったと思った
0462デフォルトの名無しさんNGNG
SIGKILLはトラップできないと思った
0463デフォルトの名無しさんNGNG
SIGHUPもな。
0464デフォルトの名無しさんNGNG
unix 詳しくないんで間違ってる可能性大だけど、標準入出力を close しないで動いてるなら
SIGPIPE もトラップしといた方が良いような。。。
0465デフォルトの名無しさんNGNG
SIGABRTとか・・・
0466デフォルトの名無しさんNGNG
バグで落ちることもあるからSIGSEGVも
0467デフォルトの名無しさんNGNG
んじゃ、SIGBUSも
0468デフォルトの名無しさんNGNG
unixプログラミングって何ですか?
winのプログラミングと何か違うんですか?
0469デフォルトの名無しさんNGNG
システムコールが違うぐらいで
あとは同じだよ
0470デフォルトの名無しさんNGNG
POSIXってなんすか?
0471デフォルトの名無しさんNGNG
対MSのためにunixベンダが集まって、マチマチだったunix方面の
システムコール/ライブラリの仕様を統一(しようと)したもの。

まあ所詮烏合の衆だったわけで、そんなに大層なものじゃない。
(準拠しているからといって、素晴らしい恩恵に授かれるわけではない)
0472デフォルトの名無しさんNGNG
>対MSのために
は?
0473デフォルトの名無しさんNGNG
>対MSのために
は?
0474デフォルトの名無しさんNGNG
 LinuxなどのUNIX系OS以外にも、Windows NTは当初よりPOSIXサポートを
行っており、POSIXサブシステムにおいてPOSIX仕様のプログラムを実行
できるようになっている(Windows NTの後継であるWindows 2000でもPOSIX
サポートはそのまま引き継がれている)。これは主に、1980年代の中盤から
後半にかけて、米国政府機関のコンピュータ・システムの導入要件
(National Institute of Standards and TechnologyのFIPS:Federal
Information Processing Standards)として、このPOSIX準拠であることが
策定されたためである。
0475デフォルトの名無しさんNGNG
linusがsocklen_tについて文句言ってたなあ
まあ烏合の衆というのもわかる
0476デフォルトの名無しさんNGNG
>>475
意味不明
0477デフォルトの名無しさんNGNG
VC++にあるF12で定義を見つけてくれる機能をもったツールってありますでしょうか?
0478デフォルトの名無しさんNGNG
>>477
ctags?
素直にgrepするとか。

0479デフォルトの名無しさんNGNG
ctagsって関数だけですよね。
defineとかtypedefとかはgrepだと、ifdefとか混ざってるときどうすれば効率的なんでしょうか?
0480デフォルトの名無しさんNGNG
>>479
> ctagsって関数だけですよね。
> defineとかtypedefとか
使える。
0481479NGNG
まじですか。ちょっと調べてみます。
0482デフォルトの名無しさんNGNG
GNU Global > ctags
0483デフォルトの名無しさんNGNG
Globalは100倍ぐらいの巨大なTAGファイル吐き出すけど、
それでもみんな使ってるの?
0484デフォルトの名無しさんNGNG
百倍て。適材適所
0485デフォルトの名無しさんNGNG
いまWin->UNIX(AIX)の移植をやっているのですが、
そのコード内に以下のような処理があります。

try{
HMODULE mydll = LoadLibrary("mydll");
〜ここでLoadLibraryで読んだDLL内の関数を使用〜
〜その他、いろいろな処理〜
}
catch(...){
〜エラー処理(システム例外も含む)〜
}

ここでやりたい事はLoadLibraryで読んだDLL内の関数で
システム例外が発生した場合にそのエラー処理をcatchでやろうとしています
(ちなみにこの処理は複数スレッドで動いています)

Winだとシステム例外もcatchできるのでよいのですが、
UNIXだとtry〜catchではシステム例外(割り込み)は捕まえられないですよね?
多分シグナルハンドラとか設定しないとダメな気がするのですが、他に良い方法はありませんか?
UNIX系(特にシグナル)はあまり詳しくないので困っています。
ご存知の方がいたら教えてください。
0486デフォルトの名無しさんNGNG
lrwxr-xr-x とかdr-xr-xr-x の意味を知りたいのですが
解説のページが見つからない・・・
0487デフォルトの名無しさんNGNG
ファイルシステム http://hwb.ecc.u-tokyo.ac.jp/topics/filesystem/index.html
0488486 NGNG
>>487
うほっ 素早い回答カッコイイ。  感謝です。
0489デフォルトの名無しさんNGNG
pid_t pid;
if(fork==0){
execl(/usr/local/bin/xxxx", "xxxx", result_filename, input_filename);
}
else{
int status;
wait(&status);
}

上のようにxxxxを実行すると、結果格納ファイルであるresult_filenameが文字化けします。
しかし、

const char *ch="xxxx result_filename input_filename"
system(ch);

というように実行するとresult_filenameは文字化けしません。
自分には全く原因がわからないんですが、何故なんでしょうか?
0490デフォルトの名無しさんNGNG
pid_t fork_result = fork();
if( fork_result == 0){

上から2行は↑でした、すいません。
0491デフォルトの名無しさんNGNG
>>489
とりあえず、execlの最後の引数は(char *)0でなければならない。
0492デフォルトの名無しさんNGNG
>>491
そうでした、引数の最後にNULL付けるの忘れてました・・・_| ̄|○
こんなんに何時間も悩んだ俺に鬱
0493デフォルトの名無しさんNGNG
それと、const char *ch="xxxx result_filename input_filename" のresult_filenameとinput_filenameはきちんと展開したものになっているのか?
0494デフォルトの名無しさんNGNG
>>485
Windowsと同じような動きをさせるのは無理。あきらめろ。
0495デフォルトの名無しさんNGNG
質問させてください。
Sun OS Soralis8での話なのですが
他スレで環境依存ということでこちらにこさせていただきました。
iconv()でSJIS("PCK")からJIS("ISO-2022-JP")に変換する際に
ソースデータがバイナリで
8F 40 8F 41 8F 42 8F 43 8F 44 8F 45 20 8F 46
の15バイトだった場合、�@iconv()は0x20を見つけた時どういった
処理をする仕様なのでしょうか?
�Aまた、もし変換及び無変換もせずにそこで処理の中断をしてしまうなら
0x20などの処理はどのようにするのが妥当でしょうか?
�Bsize_t iconv(iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft);
上記ソースを読む場合引数のsize_t *inbytesleftにはいっぺんに15バイト読ませて
しまってよいものなのでしょうか?

分かり辛い質問で恐縮ですが、以上3つの質問になります。
ご教授お願いいたします。
0496デフォルトの名無しさんNGNG
>>495
iconv() の、というより変換テーブルの仕様ではないかと。
ならばやってみれば判る筈…ていうか、PCK て何??

  % od -tx1 t.tmp
  0000000 8f 40 8f 41 8f 42 8f 43 8f 44 8f 45 20 8f 46 0a
  0000020
  % iconv -f SJIS -t ISO-2022-JP t.tmp | od -tx1
  0000000 1b 24 42 3d 21 3d 22 3d 23 3d 24 3d 25 3d 26 1b
  0000020 28 4a 20 1b 24 42 3d 27 1b 28 4a 0a
  0000034
  %

  ESC 2/4 4/2 (X 0208 漢字) に続いて空白の前まで、
  ESC 2/8 4/10 (X 0201 ローマ字) に続いて空白、
  ESC 2/4 4/2 に続いて空白の次から、
  ESC 2/8 4/10 で終端。
0497教えてくださいNGNG
Linux Cで教えて頂きたいことがあります。

Solarisでは/proc/<数字>/配下のファイルからプロセス情報の取得が
できたのですが,Linuxでは同様の方法では取得できませんでした。
欲しい情報は対象となるプロセスのUID,GID,ファイル名,
プロセス実行開始時間です。
調べてみるとtask_structという構造体を使用するようなのですが,
さっぱりわかりません。

よろしくお願い致します。
0498デフォルトの名無しさんNGNG
>>497
マルチUzeeee
0499デフォルトの名無しさんNGNG
c++を勉強しようと思ってるんですが、
linuxでc++使うことはできるんですか?
0500デフォルトの名無しさんNGNG
できます
↓はい次
0501デフォルトの名無しさんNGNG
シグナルハンドラの中で例外を投げたらどうなるんだろう。
許されてることなのかなぁ?
あとシグナルハンドラからlongjmpとか。
0502デフォルトの名無しさんNGNG
>>501
やめてくだせぇ
0503デフォルトの名無しさんNGNG
>>501
誰もcatchしないから死ぬよ
0504デフォルトの名無しさんNGNG
longjmp は ok でそ。
お作法として薦められるかどうかはともかく。
0505デフォルトの名無しさんNGNG
>>504
シグナルハンドラから戻れなくなるんでは?
OSによると思うけど。
0506デフォルトの名無しさんNGNG
>>505
うん。戻らない。でも普通の unix なら別段問題ない。

信用できないデータの高速な処理等で、SIGSEGV とかをトラップして
頑強に処理を続けるために上位ループのエラー回復処理に戻る等で使う。
0507デフォルトの名無しさんNGNG
_longjmp()って何のためにあるか知ってる?
シグナルハンドラで使用禁止されたら存在意義がなくなる。
0508デフォルトの名無しさんNGNG
>>507

async signal safe でない関数を呼ぶたびに sigprocmask で
シグナルを抑制したり許可したりすれば確かに一応使えるけど、
初心者にはお勧めできない。
存在意義がないわけではないが、2ch で質問するようなレベルの
人は使わない方が安全かと。
0509507NGNG
507 は説明不足だった。

漏れの認識では、
longjmp() はシグナルハンドラ用。
_longjmp() はシグナルハンドラでは使えないけど、高速っていう感じ。
0510デフォルトの名無しさんNGNG
それをいうならsiglongjmp()
0511デフォルトの名無しさんNGNG
馬鹿ばっか(w
0512デフォルトの名無しさんNGNG
longjmpなんか使うなよおめーら
0513デフォルトの名無しさんNGNG
元の質問はC++ってことのはずだから、(>>499,>>501)
longjmpなんかしちゃダメでしょ。
blockのdtor呼ばれないよ。

signal handlerと例外の美しい融合はないもんかねえ。
0514デフォルトの名無しさんNGNG
>>513
signal handler で例外投げれば適当に rewind してくれるってのがいいんじゃない?
従来の longjmp 的使い方なら上のほうで catch しとけば良いし。
0515>>513NGNG
>>514
> signal handler で例外投げれば適当に rewind してくれるってのがいいんじゃない?

そんな使い方はサポートされてません。
ANSI C++ではsignalを定義してません。(ANSI Cにはある)

何故できないのかはsigreturn(2)辺りを勉強するよし。
実装codeも読んでみてね。
0516デフォルトの名無しさんNGNG
>>515
頭おかしいんじゃねーの?
0517>>513NGNG
>>516
何故?

C++でsignal handlerからlongjmpはまあいいとしても例外はまずい。
0518デフォルトの名無しさんNGNG
漏れは 514 だが、>>514 は >>513 の
>signal handlerと例外の美しい融合はないもんかねえ。
へのコメントであって、現行の ANSI C++仕様の説明をしたつもりはないぞ。
っていうか何で 514 が今サポートされてるように読めるのよ。。

>>517
signal handler から throw するあたりへの突っ込みじゃなくて、
ここはあくまでも「UNIX プログラミング」スレだから、signal は C++ でも
それなりに必須に近い api なわけで、ANSI C++ で定義されてないからナニ?
仕様厨は仕様スレ行けば、ってことだと思う。
0519デフォルトの名無しさんNGNG
514が、C++の例外のセマンティクスや async signal safe の
要件を理解しているとはとても思えないなあ。

515が正しいよ。なぜ514みたいなのが仕様として許されてい
ないかというと、そもそも実装不能だからなんだよ。言語
処理系のサポートする例外っていうのは、例外の発生する
タイミングを処理系が完璧に把握できることを前提に設計
されているのに、signal はアプリケーションとは非同期に
発生するから、そもそも実装の前提を満たしてないのだ。
もちろん、処理系の想定してないところに signal を
block する処理を加えるのなら、例外処理の方の要件を
満たすことはできるが、そんなことすると目茶苦茶遅く
なるし、なにより signal の意味をなさなくなる。

…という話なんだが、なんで自信満々に仕様厨とか言って切り
捨てられるじゃろ? 仕様ってのは、無意味に決まってるもん
じゃないんだよ。常識でしょ。
0520デフォルトの名無しさんNGNG
>>515で「ANSI C++ではsignalを定義してません」 なんてこと書くから仕様厨って
言われたんじゃない?じゃああんたは signal 使わないの、ってこと。

signal ハンドラ中からの throw の実装が非現実的というのには同意。
一般に signal が raise するときのスタック状況なんて予見不能だから、
unwind (rewind じゃないよね) 出来ない。スタックフレームのアドレスだけを
覚えておく別のスタックを使えばできるけど、いまさら C++ にそんな拡張が
されても……って感じだし。
0521デフォルトの名無しさんNGNG
自作自演もたいがいにしろよ
0522>>513NGNG
>>518
> それなりに必須に近い api なわけで、ANSI C++ で定義されてないからナニ?
> 仕様厨は仕様スレ行けば、ってことだと思う。

もうちょっと勉強してください。それとも黙るか。
0523デフォルトの名無しさんNGNG
>>522
ここはCスレでもC++スレでもなく、UNIXプログラミングスレッドだということがわからないの?
0524デフォルトの名無しさんNGNG
UNIXで現在時刻を1秒より良い精度で取得するためのAPIって用意されてませんか?
microtimeやnanotimeはカーネル内でしか使えないっぽいですし...
0525507NGNG
>>524
gettimeofday(2)
0526デフォルトの名無しさんNGNG
ちっ、変な名前が入っちまった。
gettimeofdayに期待しすぎるなよ。 > 524
きっと幻滅するから。
0527デフォルトの名無しさんNGNG
>>526
なぜですか?
0528デフォルトの名無しさんNGNG
tv_usecはμsec単位にはなってるけど、普通そんな精度はとてもじゃないが出
ないから。か?
0529デフォルトの名無しさんNGNG
>>523
C++の例外とUNIXのsignalの連携の話だから、UNIXの話でしょ。
>>519の言っているようなこと。

>>515のsigreturn(2)とか。
System call中に起きたsignalのsignal handerから返る時は、
一度kernelに返って、kernelからEINTRでsystem call復帰して、
んでもって、longjumpなり、throwなり、って手順が必要なのよ。
>>515の言うようにコード読んでみれ。
glibcだと、sysdeps/unix/sysv/linux/sig*あたり。
0530デフォルトの名無しさんNGNG
>>529
ANSI C++にsignalがあるかどうかという話のどこがUNIXの話なんだ?
0531デフォルトの名無しさんNGNG
519のどこがANSI C++にあるかどうかなんて話をしてるんですか。
0532デフォルトの名無しさんNGNG
>>515
0533デフォルトの名無しさんNGNG
515のsigreturn(2)って言ったら、ANSI C++の話じゃな
くて、明らかにUNIXの実装の話だな。

もっとも不勉強な奴は、sigreturn(2)がUNIX特有の話
じゃなくて、ANSI の話だと誤解するかもしれん。
具体的な実装の話に対して仕様厨なんて言ってたわけ
だから、まあ誤解してたんでそ。
0534デフォルトの名無しさんNGNG
>>533
>>515が
「ANSI C++ではsignalを定義してません。(ANSI Cにはある)」
こんなことを言うからでしょ?

ところで、本当にないのかな。↓これには書いてあるようにみえるけど。
http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf
0535デフォルトの名無しさんNGNG
>>534
ちゃんと方向の示してある後半が理解できないからっていって、
前半だけにかみつくのも悪いでしょう。

ansi_iso_iec_14882_1998.pdf、index見てもみつからないね。
0536デフォルトの名無しさんNGNG
>>534

そのすぐ後に「何故できないのかは…実装codeも読んでみてね」
って書いてあるでしょ。仕様だから実装されてないって主張して
るならともかく、実装上の理由で無理って書いているのに仕様厨
とは、これいかに?
0537デフォルトの名無しさんNGNG
sigreturn(2)って何か知らない上に、調べることもしない人だから…
0538534NGNG
俺は514でも516でもないんだけど。

>>535
Acrobat Readerの検索機能を使うとcsignalのところに出てくるよ。
0539524NGNG
>>525-528
ありがとうございます.
とりあえずms程度で取れれば問題ないので十分です♪
0540デフォルトの名無しさんNGNG
>539
msecの分解能があればいいけどね。
0541デフォルトの名無しさんNGNG
>>540
普通は大丈夫
0542デフォルトの名無しさんNGNG
うちは普通じゃない(´・ω・`)
0543デフォルトの名無しさんNGNG
PCFかBDFを読み込むライブラリってありませんか?
0544デフォルトの名無しさんNGNG
imlib
libmagick
gdk-pixbuf
0545デフォルトの名無しさんNGNG
あるプロセスAと他のプロセスB(親プロセスも含む)があったとき、Aは処理が完了した
ということをBに対して通知するにはどのようにすればよいのでしょうか?
ただしプロセスAは完了通知を行った後もデーモンとして処理を継続し、
それを受け取ったBはその後終了します。あと通知は1回だけしかしません。

BでwaitpidをするとプロセスAが終わるまで待たされてしまうので駄目でしたが、
何かよい方法を教えていただきたいです。よろしくお願いします。
0546デフォルトの名無しさんNGNG
>>545 (named) pipe
0547デフォルトの名無しさんNGNG
>>545 kill
0548デフォルトの名無しさんNGNG
>>546
FIFOがどうしたとかいうものでしたっけ?googleで調べてみます。

>>547
killでも通知するようにできるのですか?
プロセスが存在するか終了させるかしか知らなかったです。これも調べてみます。
0549デフォルトの名無しさんNGNG
シグナルは確実性がないからおすすめしません。
0550デフォルトの名無しさんNGNG
>>549
いつの話だ。
0551545NGNG
質問の中で間違えたところがありました。プロセスBは通知を受けて終了する
のではなくて、通知を受けた後もまだ自身の処理を続行するようにします。
>>547さんすみません。
0552デフォルトの名無しさんNGNG
ふつー、kill
0553デフォルトの名無しさんNGNG
killなんて単語、使わないで欲しいよな。
0554デフォルトの名無しさんNGNG
creatよりはいいだろう。
0555デフォルトの名無しさんNGNG
>>551
killを調べた結果、この発言をしたのならば
>>551が何を言いたいか理解できない。
釣りですか?
0556デフォルトの名無しさんNGNG
調べてないと推論するべきだ。
0557デフォルトの名無しさんNGNG
多分コマンドラインでkill -1とかやったこと無いんだよ
0558デフォルトの名無しさんNGNG
あるプロセスが、setrlimit(2) の RLIMIT_DATA のソフトリミットに掛かったことを
自身で知るにはどうしたら良いでしょうか? RLIMIT_CPU であれば XCPU シグナルを
トラップすることで実現できます。ちなみに、対象 OS は FreeBSD です。
0559デフォルトの名無しさんNGNG
>>558
getlimit(2)
     The system refuses to extend the data or stack space when the limits
     would be exceeded in the normal way: a brk(2) function fails if the data
     space limit is reached.
では?
0560デフォルトの名無しさんNGNG
>>558
シグナルで知る方法はないんじゃないか ?
sbrk をラップしてそこでチェックするのが簡単だと思う。
0561558NGNG
>>559 >>560 サンクスコでございます。調べてみます。
0562デフォルトの名無しさんNGNG
>>558
というか普通にmalloc使ってりゃ、NULL返された時がそうだよ。
0563名無しさんNGNG
質問なんですが、BPFを使い、パケットフィルタリングすると
printf文が使えなくなります。なぜでしょうか?

fprintf(stderr, "test ");
などのような標準エラー出力は表示することができます。

また、参考までに、BPFはプロミスキャスモードと即時モードで動作させています。
0564デフォルトの名無しさんNGNG
一冊だけで わからないような教科書を作るのは、出版会社の陰謀ですな。
0565名無しさんNGNG
>>563 の追加情報です。

int test;
test = printf("test");
fprintf(stderr,"test=%d",test);

これをプログラムに内蔵して実行してみると、

test=4

と表示されました。つまり、printfがエラーになったわけではないと推測されます。

BPFを使うことにより、printfなどの標準出力が、画面ではなく、
他の何かに切り替わったんですかね??

分かる方いらっしゃいましたらよろしくお願いします。
0566デフォルトの名無しさんNGNG
つかBPFって何者だよ?
0567デフォルトの名無しさんNGNG
つかパケットフィルタリングすると stdout がおきかわるってどういう環境だよ?
0568デフォルトの名無しさんNGNG
きっとtcpdumpをコンパイルするのにprintfを全部fprintf(stderr,...)に
置換する環境なんだよ。うちにはそんなのないから知らない。

0569デフォルトの名無しさんNGNG
>>565
debugger使えや。
0570デフォルトの名無しさんNGNG
>>568
stderrにも出力されてないじゃん。>>565
とにかくgdb, strace, ltrace。話はそれから。
0571デフォルトの名無しさんNGNG
OSは何?

BPFを使えば短いコード(どこかのサンプルコード)でも
その現象は起こるのか?起こらなければ別の問題かもしれない。

あと、これで解決するとは思えないけれど
printfのあとにfflushを呼んでみては?
0572デフォルトの名無しさんNGNG
>>571
UNIX
0573デフォルトの名無しさんNGNG
SCO UNIXでつか?
0574デフォルトの名無しさんNGNG
UNIXといえば4.2BSDでしょ
0575デフォルトの名無しさんNGNG
アフォ。UNIXと呼べるのはV7までだ。
0576デフォルトの名無しさんNGNG
Apollo Domain/OS SR10.4.1と予想してみる。
0577デフォルトの名無しさんNGNG
UNIX と呼べるのは UNIX だけ。間違い無い。
0578デフォルトの名無しさんNGNG
おれおれ。俺がUNIXを作ったんだ。
0579デフォルトの名無しさんNGNG
私のためじゃなく、この子のために認知してください。
0580デフォルトの名無しさんNGNG
>>578
Ken Thompson さん乙!
0581デフォルトの名無しさんNGNG
>>542-543
この空白は何。
0582デフォルトの名無しさんNGNG
Cプログラムでシェルコマンドを実行したいのですが
どのように行えばいいのですか?
0583デフォルトの名無しさんNGNG
shell()
0584デフォルトの名無しさんNGNG
>>582
system
0585デフォルトの名無しさんNGNG
fork & exec
0586デフォルトの名無しさんNGNG
>>583 >>584
できました.即レスありがとう.
0587デフォルトの名無しさんNGNG
Windowsの #pragma comment(lib, "hoge.lib") みたいに、
使用するライブラリをソース中に書くことはできませんでしょうか。
0588デフォルトの名無しさんNGNG
できません。
いや、漏れが知らないだけで、
そんな変態機能を実装した処理系がどっかにないとも限らんけど。
0589デフォルトの名無しさんNGNG
>>587
リンカスクリプトになるんじゃないの?よく知らないけど、
ソース中にそんな表記があったの見たことない。

質問です。
glibcをビルドしていて*.mapというファイルが出来上がったのですが、
これの書式や意味について説明してあるドキュメントはないでしょうか?
0590デフォルトの名無しさんNGNG
>>589
gccで?
そんなファイル作ったっけ。中身は?
0591デフォルトの名無しさんNGNG
>>590
http://www.sra.co.jp/wingnut/ld/ld-ja_3.html
>リンカスクリプトの主目的は,入力ファイルのセクションを
>出力ファイルにどのようにマッピングするか,そして,
>出力ファイルのメモリレイアウトを調整することである.

スマソ、全然違った。gccって基本的には
コンパイラ -> アセンブラ -> リンカ
っていう作業の流れに忠実だからソース中にリンクフェースのことを
書いたりするのはおかしいっていう考えなんじゃない?

リンクしたいライブラリを指定したいならgccのオプションLD_RUN_PATHで
パスを指定するだけでいいじゃん。つまりMakefileに書くということ。
0592デフォルトの名無しさんNGNG
プリプロセッサはどうした。
0593デフォルトの名無しさんNGNG
自己レスですが、自分で貼り付けていたldに関するURLに*.mapの意味が
書いてありました。
http://www.sra.co.jp/wingnut/ld/ld-ja_3.html#SEC40
VERSIONコマンドをファイルに書きだしたものが*.mapだったようです。
これをldもしくはgccに対して--version-scriptオプションで指定すると。
0594デフォルトの名無しさんNGNG
>>589
リンカスクリプトなら
input(hoge.a)
だな。
Makefileで指定するべきだと思うが。

>>590
わざわざ書かなくても普通は用意されてる。
0595デフォルトの名無しさんNGNG
fork() を使用したときに,子プロセスから親プロセスの
変数を変更したり,その逆をしたりできますか.
どうしたらいいか教えて下さい.
0596デフォルトの名無しさんNGNG
mmap
0597デフォルトの名無しさんNGNG
shared memory
0598デフォルトの名無しさんNGNG
ディレクトリ内の名前の分からない全ての
.cファイルの名前を拡張子だけ変更するシェルスクリプトは
どう書いたらいいですか?
abc.c -> abc.txt
def.c -> def.txt
みたいな.

0599デフォルトの名無しさんNGNG
ここシェルスクリプトもオッケーなんだっけ?

>>598
これで取り敢えず出来たよ。

#! /bin/sh
for i in *.c; do j=`echo $i | sed 's/.c/.txt/'`; mv $i $j; done
0600デフォルトの名無しさんNGNG
>>598
いつもこんなんでやってます。
for f in *.c; do mv $f `echo $f|sed s/\.c/\.txt/`; done
もっと簡単にできそうな気がするので、添削して下さい。
0601デフォルトの名無しさんNGNG
zsh:
% for f in *.c; mv $f $f:r.txt

csh/tcsh:
> foreach f (*.cc)
foreach? echo $f $f:r.txt
foreach? end

sh:
for f in *.c; do mv $f `expr $f : '\(.*\)\.c'`.txt; done
0602599NGNG
ごめん。あげちゃったけど良いよね。

>>600 さんのと比べて、自分はすぐ変数化してしまうのは悪い癖だ・・・。
せっかく関数型言語勉強したのに・・・。
0603デフォルトの名無しさんNGNG
perlが入ってると、renameコマンドがinstallされてない?

$ rename 's/.c$/.txt/' *.c

$ rename
Usage: rename [-v] [-n] [-f] perlexpr [filenames]

# perlexprとは恐ろしいコマンドだ…
0604デフォルトの名無しさんNGNG
>>603
そういうことはせめて自分でperlをインストールしてから言おうね。

自分のつかっている特定の環境での話を、一般的なものだと思い込まないように。
0605デフォルトの名無しさんNGNG
>>604
はいはい
0606デフォルトの名無しさんNGNG
>>605 はいは一回。
0607デフォルトの名無しさんNGNG
bash, ksh:
for f in *.c; do mv $f ${f%.c}.txt; done
0608デフォルトの名無しさんNGNG
シェルスクリプトはBashならLinux板、
それ以外ならUNIX板のくだ質スレに逝け。スレ違い。
0609デフォルトの名無しさんNGNG
>>608
ハァ?
0610デフォルトの名無しさんNGNG
>>608

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

1 :デフォルトの名無しさん :03/06/09 07:21
UNIXおよびUNIX clone環境一般のプログラミングに関する質問スレッド
0611デフォルトの名無しさんNGNG
UNIXプログラミングと言えばCに決まってるだろ。
シェルスクリプトがプログラミング?!
0612デフォルトの名無しさんNGNG
SunOSでもNEWSでもRisc/OSでもbash使ってましたが何か?
0613デフォルトの名無しさんNGNG
>>611
ハァ?
0614デフォルトの名無しさんNGNG
execvをする前にsetpgrpするのと,execvで呼ぶプログラムの中でsetpgrpする
のは何が異なるのでしょうか?
if(fork() == 0){
 setpgrp();
 execv(a, b);
}
0615デフォルトの名無しさんNGNG
>>614
http://www.opengroup.org/onlinepubs/007904975/functions/setsid.html

UNIXによって違うから要注意な。特にBSD。
0616デフォルトの名無しさんNGNG
パイプやソケットで、クライアントはひたすら write(2) を続け、サーバは
ひたすら read(2) を続けるようなものを作っています。

極端にサーバの処理速度が劣る場合には read が間に合わなくて、そのうち
クライアントの write はバッファが詰まって書き込めずにブロックして
しまいます。これを防ぐにはどうしたら良いでしょう? ステータスを交換
し合って同期を保証するしかないですか?
0617デフォルトの名無しさんNGNG
>>616
> write はバッファが詰まって書き込めずにブロックしてしまいます。

既に同期が取れていると思うけど...。

何を防ぎたいのかよくわからん。
0618デフォルトの名無しさんNGNG
writeする前にselect(2)でwritefdsをチェックしる。
0619616NGNG
>>617 説明不足でした。あえてデータを取りこぼす仕組みを作っているのでした。
>>618 なるほど。こういう場合にも select(2) が有効なのですか。多分無理なん
じゃないかなーと勝手に思い込んでました。サンクスコです。
0620デフォルトの名無しさんNGNG
> あえてデータを取りこぼす仕組み

なにそれ?
0621616NGNG
>>620 勉強というか遊びというかなので、そこは気にしないでください。
0622デフォルトの名無しさんNGNG
データをとりこぼしたいならば、
単に non blocking mode にすればいいような気がする。
0623デフォルトの名無しさんNGNG
TCPで取りこぼすってどういうこっちゃ
0624デフォルトの名無しさんNGNG
送信側の速度 >> 受信側の速度 だから、どっかで捨てるしかないわけだろ。
TCP は捨ててくれないから、プログラムでやるって言う話だと思うけど。

それこそ適当に捨ててくれれば言いと言うなら、>>622 が正解だと思う。

でも普通データにはなんからの塊があって塊の単位で捨てて欲しいんじゃないかなぁ...。
0625616NGNG
垂れ流すデータは、ログみたいに行単位のテキストです。適当な行を
捨ててくれれば目的は達成でございます。
0626デフォルトの名無しさんNGNG
>>625
適当に捨てられたら...

> 垂れ流すデータは、ログみたいに行単位の目的は達成でございます。

とかなっちゃうかもしれないよ ?

TCP のスタックには、行なんていう概念がないんだからさ。
0627デフォルトの名無しさんNGNG
*BSDに入っているcursesとLinuxにあるncursesとは
まったくの別物ですか?またそれらについて勉強するのに
いいドキュメントなどはありますか?やはりソースで
学ぶしかないですかね。
0628デフォルトの名無しさんNGNG
スレ立てるまでもない質問スレでcurses使う奴はアフォでUNIX初心者だって言われた。
なんでだろ。
0629デフォルトの名無しさんNGNG
>>628
なんでですかね。Emacsやviだってこれを使って実装してるのに。
0630デフォルトの名無しさんNGNG
ドキュメントはncursesについているinfoでいいんじゃない?
Wide character版使わないと日本語が駄目。

Emacsは、ほんのちょっとしか使ってないよ。ほとんど自前。
0631デフォルトの名無しさんNGNG
>>628
何の質問だか知らないけど、使わなくていいところで使うような回答したんじゃ?
0632デフォルトの名無しさんNGNG
かなりマルチで申し訳ないんですが質問です。 (ここで聞くのが最適かと・・・
C言語でfopenでファイルを開くときWindowsの場合、テキスト形式で開いてたら
0x1AをEOFと判断して、バイナリだと0x1AをEOFと判断しないと聞きました。
それでUnixの場合はバイナリでもテキストでも一緒とも聞いたんですが、それではUnix系はどうやってファイルの終端を確認しているんですか?
Unixのファイル終端の識別子はなんなんですか?
0633デフォルトの名無しさんNGNG
>>632
Windowsでバイナリ形式で開いてたらどうやって終端を判断するんですか?
0634632NGNG
え〜・・・・ スイマセン勉強不足です・・・分かりません。
0635デフォルトの名無しさんNGNG
>>632
ファイルの中のデータじゃなくて、
ファイルの属性としてファイルのサイズを持っています。
だから終端文字がなくても分かります。

MS-DOS/Windowsもそうですが、
先祖のCP/Mがblock単位のファイルサイズしか持ってなかったので、
Ctrl-Zを終端文字とするスタイルを踏襲しています。
要するにCP/Mではバイナリファイルはブロック単位の長さしか持つことができなかったのです。
またテキストファイルはCtrl-Zをデータとして持つことができませんでした。

C/UNIXがこの問題に大きな簡潔さをもたらしたことが分かるでしょう。

ちなみに、終端文字を設定するとすれば、
Ctrl-Zでなくて、転送終了を表すCtrl-D(EOT)が適当だったと思いますね。
0636632NGNG
>>635
なるほど、丁寧にありがとうございます。分かりました。
0637632NGNG
何回もすいません。
Unixで作られたファイルをWindowsに送った場合っていうのはWindowsはどう処理するのでしょう?
一応スタイルとしてはCP/Mの方法をとっているが、Unixファイルの場合は属性としてファイルのサイズを理解して処理できるのでしょうか?
0638デフォルトの名無しさんNGNG
つかunixでもなんでもない。
せめてWindowsでまともにファイルを扱えるようになってからもう一度いらっしゃい。
0639デフォルトの名無しさんNGNG
EOFは過去の遺物
0640デフォルトの名無しさんNGNG
>>637
FTPプロトコルを参考にしてください。

アスキー(テキスト)転送とバイナリ転送を分けてます。
そしてアスキー転送の時は、サーバ側が、
改行とファイル終端についてデータ変換を行います。

MS-DOS/Windowsの世界でも、stdioが同様の変換を行っています。
Cの世界からは、UNIXライクにテキストファイルが見える必要がありますから。

> Windowsはどう処理するのでしょう?

こういう質問の仕方は板違いですから勘弁してください。
0641デフォルトの名無しさんNGNG
UnixスタイルのテキストファイルはWindowsでも普通はそのまま読める。
Visual C++やBorland C、mingwなどでコンパイルしたプログラムなら。

これ以上はスレ違い。
0642632NGNG
皆さんありがとうございます。
0643デフォルトの名無しさんNGNG
SFUもここでいいのかな?
http://www.microsoft.com/japan/windows/sfu/
0644デフォルトの名無しさんNGNG
UNIX版にスレあるけど、プログラミングならここでもいいんじゃない?
0645デフォルトの名無しさんNGNG
メモリリークに関して質問です
フリーのメモリリークチェックツール(ccmalloc)なるものを使っているので
すが、getaddrinfoでmallocされた領域をfreeaddrinfoで解放してもリークが
発生しているようなログが出ます。
本当に漏れてるのか?そしてあれば完全に解放する術を教えて下さい

使用OSは Vine Linux 2.6
コンパイラは g++ 2.95.3

一応ソース添付
int main(){
addrinfo hints, *AI;

memset(&hints, '\0', sizeof(hints));
hints.ai_family = PF_INET;
hints.ai_socktype = SOCK_DGRAM;

if(getaddrinfo("localhost", "13000", &hints, &AI) != 0){
cout << "Error: getaddrinfo" << endl;
return 1;
}

freeaddrinfo(AI);
return 0;
}
0646デフォルトの名無しさんNGNG
>>645
ぱっと見、getaddrinfo() で、複数の addrinfo 構造体が割り当てられたんじゃないか ?
getaddrinfo() 呼び出したあとで、AI.ai_next が NULL になっているかどうか確認してみて。
0647デフォルトの名無しさんNGNG
>>646
645です。以下のコードをfreeaddrinfo()後に挿入して実験を行いました
if(AI->ai_next == NULL)
cout << "ai_next is NULL" << endl;
結果、"ai_next is NULL"が表示されました。
検索しててどっかで見かけたfreeaddrinfoのマニュアルでも、getで動的に
作られたリストが無くなるまでfreeするような事が書かれてありました
0648デフォルトの名無しさんNGNG
>>645
getaddrinfoのソース見た方が早いんじゃない?
0649デフォルトの名無しさんNGNG
あと、ccmallocのソースも。
0650デフォルトの名無しさんNGNG
/etc/hosts とかはmallocした領域にキャッシュされるしな。そのへんじゃないか?
getaddrinfoのソース見るしかないと思われ。
0651デフォルトの名無しさんNGNG
>>645
glibcのバージョンは?
0652デフォルトの名無しさんNGNG
linuxでgccでプログラムしてるんですが
winapiのGetCommandLine()に該当する関数がわかりません。
どうか教えてください。

通常はmainの引数を使えばいいのでしょうが
グローバル変数としてインスタンス化されたオブジェクトの中で
オプションを使いたいので、mainに入る前にオプションが知りたいんです
0653デフォルトの名無しさんNGNG
スタートアップルーチンのソース調べてarg[0]にセットしてるとこ
探してはどうか?
0654デフォルトの名無しさんNGNG
gccってグローバル変数にセットしてくれてた気がする

でもなあ、明示的に初期化メソッドを呼んであげたほうが
いいと思うよ。グローバル変数の初期化の呼び出し順序って
事実上コントロールできないし。

つか「mainに入る前」にいろいろやるのはおすすめできないなあ・・・
0655デフォルトの名無しさんNGNG
>>653>スタートアップルーチンのソース調べてarg[0]にセットしてるとこ 探してはどうか?
>>654 >gccってグローバル変数にセットしてくれてた気がする

ありがとうございます。さっそく調べて見ます。

>>654
グローバル変数の初期化の呼び出し順序・・というのは知っているのですが
人の作ったプログラム解析していたら、グロバール変数としてスレッドを作るオブジェクトが
指定されてて、しかもそれがおかしいみたいなので、色々試すのにコンパイルの手間を省くため
コマンドラインから通り道や、属性などを変えられないかなーと思った訳です。

素直にgdb使った方が良いような気もしますが・・・
0656デフォルトの名無しさんNGNG
>>655
環境変数使えば?
0657デフォルトの名無しさんNGNG
>>655
> グロバール変数としてスレッドを作るオブジェクトが
> 指定されてて、

それ作った奴はシロウトっぽいな
略:窓の外に放り投げるAA
0658デフォルトの名無しさんNGNG
>>651
645です。glibcのバージョンは2.2.4です
0659デフォルトの名無しさんNGNG
>>658
バージョンあげてみ。
0660デフォルトの名無しさんNGNG
>>659
mallocされたままの領域増えてたりして。
>>645
皆がいうようにソース見るのが常道かつ早道。
0661デフォルトの名無しさんNGNG
ごめんなさい、645ですが追加質問です。
とりあえず自分のマシンにはlibcのソースを入れてなかったみたいなので
どうせならソース見るついでに最新版にしておこうと思ってます。
で、今入ってる2.2.4はrpmでインストールされてるんですが、ソースから
インストールする時は前の版のものはどうすればよいでしょうか
0662デフォルトの名無しさんNGNG
linux板いけ
0663デフォルトの名無しさんNGNG
どれどれ、linuxプログラミング質問スレでも立てるとするか
0664デフォルトの名無しさんNGNG
>>661
先にlib側のrpmを削除してから入れなおせ
0665デフォルトの名無しさんNGNG
rpmの扱いとかはム板の範疇じゃないからlinux板へ行けということだと思うが。
でも隔離スレとしてあってもいいかも>linuxプログラミング質問スレ

0666デフォルトの名無しさんNGNG

ひょっとしたらスレ違いかもしれないですが、一応UNIXなんでココに書きます。

pthreadにおいて作成したスレッドに対して、そのスレッドがまだ動作しているかどうか調べるには
どうしたらいいですか??
0667デフォルトの名無しさんNGNG
http://pc2.2ch.net/test/read.cgi/tech/1037636153/545
0668デフォルトの名無しさんNGNG
BSD系OSで OS起動時にrootとしてデーモンを立ち上げたいのですが、
どこに設定すればいいか分かる人いませんか?

inetdやcrondでは使用目的に合わないため、単独でデーモンプロセスを立ち上げたいです。
0669デフォルトの名無しさんNGNG
>>668
プログラミングとなんの関係もないのでUNIX板で聞いてください。
0670デフォルトの名無しさんNGNG
座標の変数xとyが与えられたとき、
第1から第4のどの象限に属するのか調べるには
どうすればいいんですか?
0671デフォルトの名無しさんNGNG
>>670
UNIXとなんの関係もないのでスレたてるまでもない質問スレで聞いてください。
0672デフォルトの名無しさんNGNG
>>671
UNIX上で開発しているんですが。
0673デフォルトの名無しさんNGNG
         \   ∩─ー、    ====
           \/ ● 、_ `ヽ   ======
           / \( ●  ● |つ
           |   X_入__ノ   ミ   そんな餌で俺様が釣られクマ―!
            、 (_/   ノ /⌒l
            /\___ノ゙_/  /  =====
            〈         __ノ  ====
            \ \_    \
             \___)     \   ======   (´⌒
                \   ___ \__  (´⌒;;(´⌒;;
                  \___)___)(´;;⌒  (´⌒;;  ズザザザ
                               (´⌒; (´⌒;;
0674デフォルトの名無しさんNGNG
>>670
中学1年レベルの数学だな(w
0675デフォルトの名無しさんNGNG
forkした後の子プロセスがさらにforkして、孫プロセスがデーモンとして
動くようにするのは常套手段でしょうか?
0676デフォルトの名無しさんNGNG
>>675
なんで聞いているか分からんけど、常套手段じゃないでしょうか?
daemon()の方が楽だけど。
0677デフォルトの名無しさんNGNG
daemontools のほうが楽。
0678デフォルトの名無しさんNGNG
fork、execv、setpgrpを使ってデーモンとしてプロセスを動かそうとテスト
してるのですが、以下の2つで何が変わってくるのかわからなくて質問しました。
ググってみたら2のやり方をしているのを発見しましたが、その意味がどうも…。
1.子プロセスを直接デーモンとして動かす
2.孫プロセスをデーモンとして動かし、子プロセスはすぐ終了する
0679デフォルトの名無しさんNGNG
>>678
ゾンビとか defunct とかって話 ?
0680デフォルトの名無しさんNGNG
initに看取ってもらうようにするんだろ。
0681デフォルトの名無しさんNGNG
>679
ゾンビプロセスとは、子プロセスが親プロセスよりも先に終了した時
リソース上残ってしまうプロセスのことでしょうか?まだよくわかってないのですが。
その観点でいうとなにか変わってきますか?

>680
最終的にはプロセスグループリーダーとなってターミナルから制御を切り離したいだけなのですが
それぞれのやり方にメリット、デメリットがあるのでしょうか?
0682デフォルトの名無しさんNGNG
Advanced Programming in the UNIX Environment を読みましょう。
0683デフォルトの名無しさんNGNG
>>677
ぐぐってみたが、daemontoolsの便利さは、daemon(3)の便利さとは別みたい
に思える。

>>681
デーモンを起動して自分はすぐ死んでしまうなら同じじゃないでしょうか?
ようは自分がwaitしないですませようという話だと思うので。
0684デフォルトの名無しさんNGNG
Shellが親processだと、shellがwait(2)してくれるまでzombieのまま。
Daemonが、起動したshellの振る舞い如何でzombieとして残るのは、
何か実害があるわけではなくても、好ましいことではない。
早々とinit(8)に養子縁組に出すのが良い。
0685デフォルトの名無しさんNGNG
子が終了したとか孫がおかしくなったとか、

ゾンビを殺せとかデーモンが死ぬとか

このスレ、いい歳こいて変な奴多すぎ。
0686678NGNG
親プロセスが先に終了する場合は問題がないが、子プロセスが先に終了して
しまうとリソース上解放されずに残ってしまうため、親プロセスが
waitをする必要がある。ただし子プロセス生成後、すぐにデーモン化
することでゾンビプロセスの心配はない。ということでしょうか?

となると親プロセスが先に終了することが保証されている場合にのみ
1,2の方法に特別な違いはない、ということになりますか?

認識がずれていそうなので確認させてください。
0687デフォルトの名無しさんNGNG
>>686
1のやりかたが普通だと思ってたけど。
UNIX Programming FAQみたいなのにやりかたかいてる。
0688デフォルトの名無しさんNGNG
>>687
UNIX Programming FAQをぐぐってみたら、forkを2回するのは端末を
切り離すためだと書いてあった。
0689デフォルトの名無しさんNGNG
>>686
合ってます。
所詮、daemonを端末から起動する時の話なんで、

> リソースが解放されずに残ってしまうため

は大したことないです。

Win32なら、primitive APIのoptionを増やして対応ってところでしょうけど、
UNIXの場合、2のように、well designedなprimitiveを組み合わせてやる方法が良くとられます。
それはshell programmingでもっとも顕著です。

>>688
setsid(2)を併用するとそうです。
http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16
0690678NGNG
>>689
UNIX系OSのman等を見るとsetpgrpではなくsetsidを使うように勧告しているのですが、
理由はなぜでしょうか?setpgrpで失敗した時の動作に関して明確な定義(errnoの設定)がされて
いないからでしょうか?もしご存知なら教えてください。
0691デフォルトの名無しさんNGNG
昔はclose(2)やsetpgrp(2)あるいはその組合わせで、
controlling terminalの切り放しが行われるようになっていた。
そしてUNIXごとにやり方が違った。POSIXがsetsid(2)に統一した。
以上。
0692デフォルトの名無しさんNGNG
>>688
うわ、2回forkするのが普通だって書いてた?
もう一回読みなおすべ。
0693デフォルトの名無しさんNGNG
>>691に、
ioctl(fd, TIOCNOTTY, 0)を書くのを忘れた。(のを目覚めたときに気づきました)

${EMACS}/src/process.cを眺めると面白いです。
create_process()は、化石の堆積層です(w
# もちろんdaemonを起動しているんじゃないから、二回forkしてませんけども。
0694678NGNG
>>691,693
ありがとうございます。何か色々とデーモン化の方法があるんですね。
POSIX準拠であればsetpgrpよりsetsidを用いた方がよさそうです。

また質問があるのですが、waitは任意の子プロセスの状態が変化するまで
待つそうですが、同じようにwaitpidで、指定した子プロセスの状態が変化するまで
待たせるためには、第3引数に0を指定すればよいのでしょうか?
(例えば、waitpid(pid, &status, 0)のような記述で。)
<sys/wait.h>に定義されておらず、また数値を指定するのはよくないそうなので
困っています。
0695デフォルトの名無しさんNGNG
>>694
何で、マニュアル見ないの ?

% man waitpid

options 引数には、以下の任意のオプションのビット論理和が入ります。
WCONTINUED オプションは、カレントプロセスの子プロセスで、ジョブ制御の停止状態から SIGCONT シグナルを受け取って復帰したプロセスのステータスも報告するべきであることを示します。
WNOHANG オプションは、ステータスを報告するプロセスがない場合に呼び出しがブロックしないことを示すために使用します。
WUNTRACED オプションを設定すると、SIGTTIN シグナル、SIGTTOU シグナル、SIGTSTP シグナル、 SIGSTOP シグナルのために停止したカレントプロセスの子にも、そのステータスを報告させます。

(FreeBSD のマニュアルだから、あんたのシステムとは異なるかもしれない。)
0696デフォルトの名無しさんNGNG
>>695
Linux、HPUX、Solaris等のmanは確認してはいたんですけど、
親プロセスにだけ子プロセス終了の通知をするためのオプションが
どれに当たるのか判断できなかったので聞きました。
0697678NGNG
>>695
OSが異なった場合に定義も異なる可能性があるのでマクロ指定をすべき
とどこかに書かれていたのですが、上記のUNIX FAQや他のサイトでは
オプションに0をつけたサンプルプログラムがありました。この0指定の
動作はどこかで定義されているのでしょうか?
0698デフォルトの名無しさんNGNG
>>696-697
> この0指定の動作はどこかで定義されているのでしょうか?

> options 引数には、以下の任意のオプションのビット論理和が入ります。

でわからんのか ? オプションの各ビットが "Off" と言う意味だぞ。

例えば、WNOHANG なら、「ステータスを報告するプロセスがない場合に呼び出しがブロック "する" ことを示す。」
0699デフォルトの名無しさんNGNG
>>698
「0個以上のオプションの論理和」だから、0指定すれば、カレントプロセスが
サスペンドして、指定プロセスがexitするまで待つだけの機能になるという
ことでしょうか?
0700デフォルトの名無しさんNGNG
「サスペンドして」は冗長。しかもsignal状態と紛らわしい。
0701デフォルトの名無しさんNGNG
678は基本的な知識と素養がごっそり抜け落ちているな。
0702デフォルトの名無しさんNGNG
このスレ名物空白期間か。
年末年始の空白はなかなかのものだった。
0703アニーです。NGNG
CRONでSQL文に引数を以下の様に与えたいのですがうまく受け取ってくれません。
なにか良い方法はないでしょうか。どなたかご教授願います。

XX/XX/XXX.sql date "+%Y%m%d%H%M%S"
0704デフォルトの名無しさんNGNG
http://pc.2ch.net/unix/
http://pc2.2ch.net/db/
0705デフォルトの名無しさんNGNG
sql `date "+%Y%m%d%H%M%S"`
なんじゃねーの? 続きはUNIX板のくだ質スレでね。
0706デフォルトの名無しさんNGNG
C言語質問スレで聞いたらこちらに誘導されたので質問させてください。


Linux上でC言語を使用してサーバ―クライアント間のプログラムを作っていますが、
TCP接続でクライアント間とサーバ間で接続を行い通信を行っている途中、
クライアントのプログラムを終了した場合、サーバ側で接続が切れたかどうかを
判別する方法はないでしょうか?
ちなみにselectで待って、抜けてきたらreadを呼んでいます。
0707デフォルトの名無しさんNGNG
ttp://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja.html
0708デフォルトの名無しさんNGNG
>>707
ありがとうございます!
0709デフォルトの名無しさんNGNG
こんばんは。助言お願い致します。m(_ _)m

C言語です。
sleep(int);
から復帰した後のキーボードバッファのクリアを
したいのですが、どうしたらいいでしょうか。

以前getcharの後にクリアしなければならなかった時は
while (s != '\n')
s = getc(stdin);
としていたのですが、sleep時では改行コードが
一つだけという保証はなく、かといって一度全部
変数に読み込んで…というのはあふれそうな気が
します。

よろしくおねがいします。

0710デフォルトの名無しさんNGNG
あげとく
0711デフォルトの名無しさんNGNG
タイムアウトが起きるまで全部読め。
ノンブロッキングI/Oか、select(2)。
0712デフォルトの名無しさんNGNG
>>709
rewind()はどう?
0713デフォルトの名無しさんNGNG
>>711
selectについて検索かけましたけど
かなり深い様子…。もう少し調べてみます。

>>712
処理系によるみたいですが、僕の環境
(linux+gcc)ではfflush,rewind共に効き
ませんでした。
0714デフォルトの名無しさんNGNG
TTYと分かってるなら、tcsetattrとTCSAFLUSH使え。
つーかTTY以外ならflushしたらまずいと思うが。
0715デフォルトの名無しさんNGNG
>>714
どういう関数なのか理解するのに手間取りましたが、
無事sleepとの併用で目的の動きをしてくれるように
なりました。感謝です。m(_ _)m

また711さんにも助言をいただきましたが、
残念ながら僕には敷居が高かったようで。^^;
しかしこれからまたDOSで言うところのkbhitもどき
にも取り組むつもりなので、どっちにしろ割り込み
処理やシグナル等の知識は必要なようです。
低水準の方も徐々に勉強してみます。どうも
ありがとうございました。
0716デフォルトの名無しさんNGNG
起動したプログラムで自身の二重起動を判断するやり方って
どんなものがありますか?
0717デフォルトの名無しさんNGNG
/var/run/
0718デフォルトの名無しさんNGNG
lock file
0719デフォルトの名無しさんNGNG
>>717
調べてみます。
有難うございます。

>>718
起動時にファイルを作成するということを仰っているのかと思うの
ですが、プログラムが途中で異常終了するなど、ファイルが残って
しまうケースがあり、苦慮しています。
よく使われる定石というものはどのようなものなのでしょうか?
0720デフォルトの名無しさんNGNG
lock fileをlockする。
processが異常終了したらunlockされる。
0721デフォルトの名無しさんNGNG
Windowsではmutexを使tって判定する。
UNIXもPOSIXのmutexがあれば同じ様にできると思う。
0722デフォルトの名無しさんNGNG
pthreadのmutexは、process内のみで有効です。
# processを越えたmutexの拡張もありますが。
0723デフォルトの名無しさんNGNG
SysV IPCのsemaphoreなら、
P()して、processが異常終了した時のV()を指定できます。
0724デフォルトの名無しさんNGNG
>> 717 >> 718 >> 720 >> 721 >> 722 >> 723
解決できました。
有難うございました。
0725デフォルトの名無しさんNGNG
このスレのテンプレにAPUE買えってのを加えてもいいんじゃない?
0726デフォルトの名無しさんNGNG
APUEの宣伝スレではないから却下
0727デフォルトの名無しさんNGNG
signalについて質問です。

#define SIGUSR SIGINT
void func(int sig)
{
printf("get %d\n", SIGUSR);
}

int main()
{
(void) signal(SIGUSR, func);
sleep(5);
}

を実行して^Cとすると端末に
get 2
と表示されますが、これの1行目を
#define SIGUSR 97 //'a'は97
としても
get 97
を得ることができません。どうしたらいいでしょうか?
0728727NGNG
追記です。
要はタイムアウト付きgetch()の動きをして欲しいのです。
#selectを使ってタイムアウト付きgetchar()同等の
#動きまではできたのですが…
0729デフォルトの名無しさんNGNG
>>727
http://groups.google.co.jp/groups?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&selm=5bv0um%24ilr%40ns.src.ricoh.co.jp&rnum=4
にまとめがあるよ。
0730デフォルトの名無しさんNGNG
>>727
97なんてシグナル番号存在しないだろう。
シグナルはOSで決められたものしか使えないよ。man 7 signal すれ。
0731デフォルトの名無しさんNGNG
>>729
やばい、頭パンクしそうだ。根気強くやります。
サマリーかなり後かもですけどとりあえず感謝です。

>>730
OSで決められたものだけなんですか、、残念。(--;)
最初これを発見した時は
system("stty intr 97");
とやって後から元に戻すとか考えたんですけど、これでは
SIGINT返しても2で固定なんですよね(教えていただいた
今から考えれば極当たり前なんですけど)。2つのキーで
違う返り値を得たいので、とりあえずこれは諦めて
他の方法でやってみます。
0732デフォルトの名無しさんNGNG
>>731
二つくらいなら、SIGINTとSIGABRTでなんとかなるよ。
キーボード一発で停められなくなるけどな。
Ctrl-Zしてkillすれば殺せるが。
0733デフォルトの名無しさんNGNG
remshで起動された自ホストのCシェルスクリプトの標準出力先。

OSはhp-ux11.0

標準出力するコマンドは単なるcdだけど、いかんせんうちのcdは
エイリアスされており、cd !*;pwdとなっており、しかもインタプリタは
環境設定ファイルを読み込むようになっている
(#!/bin/csh -fでなく、#!/bin/cshとなっている)

こういう場合って、異常終了するよね。でも、わがシステムでは
異常終了する場合としない場合とがあって、訳わからんのだわ。
0734デフォルトの名無しさんNGNG
というか黄身のレス、訳がわからん。
0735デフォルトの名無しさんNGNG
LinuxのC言語でプログラムを作成しているのですが、
多重起動を抑制するにはどうすれば良いのでしょうか?
0736デフォルトの名無しさんNGNG
>>735
>>717 >>718 >>720
0737デフォルトの名無しさんNGNG
/var/runっていうディレクトリのないUNIXってありますか?
0738デフォルトの名無しさんNGNG
あります。
0739デフォルトの名無しさんNGNG
圭子タンもやっぱりviはお嫌いですか?
0740デフォルトの名無しさんNGNG
ファイルをopenする
取得できたディスクリプタにfcntlを使ってF_SETLKする
このfcntlがNGなら二重起動と判断するんだよsutu
flockを使ってもいいけどね
0741デフォルトの名無しさんNGNG
複数のプロセスが同一のファイルを O_APPEND で open(2) し続けている
状態で、何も考えずにひたすらデータを書き込んでいく場合、ファイルが
壊れてしまうことはないと思って良いのでしょうか? つまり write(2) の
前に、ファイルの最後尾に移動することが保証されているのかどうか、と
いうところがポイントだとは思うのですが。
0742デフォルトの名無しさんNGNG
>>741
ポイントも何も…。
APUEを持っているなら、3.11を読んでみるといいことあるかも。
0743デフォルトの名無しさんNGNG
while(1){
  処理
}

この部分をスレッドとして動かして、
別の処理2を

while(1){
処理2
}
として別々に動かしつづけたいのですが、どういった命令を使えばいいのでしょうか?

OSはLinuxです。現在UNIXシステムプログラミング入門という本のfork()関数あたりを読んでいます。

int pid;
if( (oid= fork()) == 0 ) {
  子プロセスの処理
} else id(pid >=1) {
  親プロセスの処理
} else {
  エラー処理
}

とかいてあるのですが、この子プロセス、親プロセスのところに、処理1、処理2を、当てはめたらいいのでしょうか?
アドバイスお願い致します。
0744デフォルトの名無しさんNGNG
oid > pid
id > if

です。誤字脱字があり申し訳ありません
0745デフォルトの名無しさんNGNG
>>743
それでいいですが、その場合スレッドとして動かすのではなくて、
プロセスとして動かすことになります。プロセスはスレッドと違い、
メモリ空間を共有しません。
0746デフォルトの名無しさんNGNG
pthread_t tid1;
pthread_t tid2;

pthread_create(&tid1, NUL, aaa(), NULL);
pthread_create(&tid1, NUL, bbb(), NULL);

pthread_join(tid1, NULL);
pthread_join(tid2, NULL);

void aaa(void* arg)
{
while(1)
処理1;
}

void bbb(void* arg)
{
while(1)
処理2;
}
0747デフォルトの名無しさんNGNG
NULはNULLの間違い
0748デフォルトの名無しさんNGNG
aaa()てなんだ?
きみさ、馬鹿じゃないのか?
0749743NGNG
>745-746
ありがとうございます。
よくわかりました。

ヘッダファイル関係は、googleで調べて、把握できたので、さっそくやってみたいとおもいます。
アドバイスありがとうございます
0750デフォルトの名無しさんNGNG
どうやら、そうらしい
0751デフォルトの名無しさんNGNG
UNIXプログラミングのスレでの質問で申し訳ありませんが、
Linuxで、PostgreSQLへSJISデータをEUC_JPとしてエンコードしてinsertするときは、

PQsetClientEncoding
PQclientEncoding
などの関数を使っているのですが、

普通に、printfやputs などで、表示する場合には、どのような関数を被せればいいんでしょうか?
それともnkfのソースでも拾ってきて自分で、用意するしかないんでしょうか?

0752デフォルトの名無しさんNGNG
愛昆布
0753デフォルトの名無しさんNGNG
>>751
EUC-JPなDBからSJISとしてひっぱってきたいんなら
PQsetClientEncodingでそう指定すればいいだけかと。

文字エンコーディングを変換する手法を知りたいのなら、
nkfを組み込む、iconv(3)を利用するって感じか?
0754デフォルトの名無しさんNGNG
>>753
ありがとうございます。
DBとは関係なくエンコーディングの事を知りたかったので
iconv(3)をあたってみます。
0755デフォルトの名無しさんNGNG
>>754
だったらDBの話を初めからするなと
0756デフォルトの名無しさんNGNG
スレとは関係なく、眠たくなったので寝ようと思います。
0757デフォルトの名無しさんNGNG
スレ違いってことだね。

自分はUNIX大嫌いです。
早くなくなって欲しい。
0758デフォルトの名無しさんNGNG
>>757
禿同。こんなにプログラミングするのにまどろっこしい環境今まで知らん・・・
もうやめます。それともVineLinuxじゃなくてTurboLinuxをインスコすれば
いいのかな?
0759デフォルトの名無しさんNGNG
いや、おふたかたのような頭のつくりではどちらも一緒だと思いますよ。
Delphi on Linux か VB on Linuxでも出るまでWindowsの世界に逃げ戻ってるのがおすすめです。

なんだか、吉野家で牛丼が出てきたら箸とって食べればいいのに
フォーク、スプーン、ナイフが揃えられてついでにナプキンも人につけてもらうまで
じーっと待っている人のような感じですね。
0760デフォルトの名無しさんNGNG
UNIXは環境への依存が激しいからな。あっちのUNIXとこっちのUNIXで
全然やりかたが違ったり微妙な挙動の差異があったりする。

UNIXオタは「それはその環境が標準に準拠していないのが悪い」等、
現実無視も甚だしい、トンチンカンなことを抜かすから役に立たない。

結局、OSの種類やバージョン毎に、全く別個の環境として捉えておく
しかないと思うよ。Win98とMeと2kとXPが違うのと同じように。
(まあ、まだWin系の違いのほうがマシだが)

これが理解できないヒトはまだ初心者だろうから、まずは単一の環境で
ある程度のモノが作れるようになったほうがいいと思う。それから、
ちょっと違う環境にportしてみるといい。まあ「まどろっこしい」と
感じるだけだろうけどな。それが現実。
0761デフォルトの名無しさんNGNG
UNIXが、というよりCが、だろ
0762デフォルトの名無しさんNGNG
MSのモノカルチャーとは違う
0763デフォルトの名無しさんNGNG
>>760
確かに、初めて Digital 使ったときは、流石にその違いにちょっとビビった
もんだけど、Windows を使うことに比べたら全然気にならなかったよ。
I/O 制御でも何でも、別に弄りたきゃ自分で弄ればいいわけだし。

単一の環境である程度のものをってのは同意するけど。普通に使える人は別に
環境がどうこうって文句言わず、対応させるでしょ。
0764デフォルトの名無しさんNGNG
UNIXオタが必死になって反論してるつもりになってるが
反論になってないな
0765デフォルトの名無しさんNGNG
Unix は難しいのを良しとする ヲタ の OS なので厨でも使える
ウイソ のような IDE は流行らない。
0766デフォルトの名無しさんNGNG
別に難しくないだろ
0767デフォルトの名無しさんNGNG
難しくはないが、>>760の言うとおり、unixだからといって同じではないな。
0768デフォルトの名無しさんNGNG
UNIXに対していいたいことはあるが、
そこでWindowsをもってくるのは、あまりに
ありふれてて猛秋田。
0769デフォルトの名無しさんNGNG
名前に惑わされるなってこった
0770デフォルトの名無しさんNGNG
具体的にどの辺のレイヤーを相手に愚痴ってるのかさっぱり分からん
0771デフォルトの名無しさんNGNG
それは経験が足りないからでは?
0772デフォルトの名無しさんNGNG
ネットワーク障害の検出方法について質問です。
TCPIP通信のクライアント側の受信処理で、ソケットに対しread関数を使って受信データを取得しています。
read関数が失敗して-1が帰ってきたらネットワーク障害だと判定したいのですが、
ネットワーク障害の検出にread関数の戻り値を使うのが本当に正しいのかがわかりません。
ネットワーク障害の正しい検出の仕方をご存知の方教えていただけないでしょうか?
(タイムアウト判定は、select関数を使っています。)
0773デフォルトの名無しさんNGNG
navi2chでpc,pc3の板全部が見れなくなったよ。
どうしよう。どうすればいいのか誰か教えてくれ!
0774デフォルトの名無しさんNGNG
check file... moved
ってミニバッファに表示されて、古いスレッド一覧が
表示されるだけ。困った。
0775デフォルトの名無しさんNGNG
ある関数が割り込みセーフかどうか知るにはどうしたらいいですか?

とりあえず関数を呼び出す前にシグナルをマスクしておけば間違いないですかね?
0776デフォルトの名無しさんNGNG
>Q. 突然とある板が更新されなくなったみたいなんだけど。
>A. それは多分2ちゃんねる側の問題。板の移転があったのかも。
>~/.navi2ch/etc.txt を駆使するか、有志がメンテナンスしている最新の板一覧
>(◆YaAzLuckyc さんの http://azlucky.s25.xrea.com/2chboard/bbsmenu.html とか、
>http://azlucky.s25.xrea.com/ の【 他のボード一覧配布先 】にあるものとか) を
>navi2ch-list-bbstable-url に設定するといいかも。

(setq navi2ch-list-bbstable-url "http://azlucky.s25.xrea.com/2chboard/bbsmenu.html")
これでOKでした。どもお騒がせしますた。



0777デフォルトの名無しさんNGNG
UNIXスレで777ゲット
0778デフォルトの名無しさんNGNG
>>775
ソースを読む。
まあスレッドセーフなら割り込まれても問題ないと思いねえ。

安易に逃げるならマスクすればいい。
0779デフォルトの名無しさんNGNG
>>777
俺は他人だがお前に書き込んでもいいんだな?いいんだな?
0780デフォルトの名無しさんNGNG
こういう奴は、どうせディレクトリも 777 だろうから rm しちまえよ。
0781777NGNG
>>779
ああそういう意味か。
どうぞどうぞ。chmod 777 -R /もしてあるよ。
0782デフォルトの名無しさんNGNG
>>772
http://pc2.2ch.net/test/read.cgi/tech/1073560271/l50
-1でわかるのは、原因わからんけど読み込み失敗。以上。
errnoでもう少し詳しくわかるが、そこらへんからはOS依存。
0783772NGNG
>>782
ありがとん。
そのスレに逝ってきまつ。
0784デフォルトの名無しさんNGNG
>>773
pc4に移転したよ。
0785デフォルトの名無しさんNGNG
785 名前:-R と言うファイル等がカレントにあればいいんだけど。[sage] 投稿日:04/03/26 00:33
>>781
> chmod 777 -R / もしてあるよ。
chmod: -R: No such file or directory



786 名前:デフォルトの名無しさん[] 投稿日:04/03/26 07:02
誰かC++でCPU使用率の取得方法を教えてください。


787 名前:デフォルトの名無しさん[sage] 投稿日:04/03/26 07:34
uptime呼んどけ


788 名前:デフォルトの名無しさん[sage] 投稿日:04/03/26 11:18
>>786
C++でっていうよりOS依存な気が。たとえばlinuxなら/proc/stat見るとかに
なるだろう。見かけはテキストファイルだから簡単に読める。

BSD系だと/dev/memや/dev/kmem開いて中を覗くことになると思う。それ
用のkvm_ほげほげって名前のライブラリがあるので使うと楽。

>>787
uptimeコマンドが表示するload averageはcpu使用率じゃないよ。
0786デフォルトの名無しさんNGNG
tesutu
0787デフォルトの名無しさんNGNG
うちのchmodは-Rをつけたら再帰的に処理してくれたけどな。
0788デフォルトの名無しさんNGNG
GNU chmodがどこにでもあると思うなという話?
0789デフォルトの名無しさんNGNG
>>788-789
お前ら 1回 man chmod するか、適当なファイルに対して chmod 777 -R xxx してみなよ。

勇気があるなら、chmod 777 -R / でもいいけど。
0790デフォルトの名無しさんNGNG
番号ずれてるし。話題、すれ違いだし。
0791デフォルトの名無しさんNGNG
質問です。
#include <unistd.h>
int main(void)
{
char c;
read(0, &c, 1);
write(1, &c, 1);
return 0;
}
[foo@foo asm] ./a.out
aaaaaaaa
[foo@foo asm]$ aaaaaaa
-bash: aaaaaaa: command not found

1文字だけreadして、その後プログラムを終了するとあまった文字列が、
bashへ流れてしまいます。
□ 質問1.この解決方法なにかありませんか。
自分は、fcntlでSTDINをNONBLOCKにして、
読めるだけ読んだあと終了する方法を思いつきましたが、これでは、
その後の処理に影響が出ます。
□ 質問2.一度NONBLOCKに設定したファイルディスクリプタのNONBLOCKフラグをOFFにできませんか?
0792791NGNG
すみません。
自己解決しました。
#include <unistd.h>
#include <fcntl.h>
int main(void)
{
char c;
char buff[128];
int flag;

flag = fcntl(0, F_GETFL);
read(0, &c, 1);
write(1, &c, 1);
fcntl(0, F_SETFL, O_NONBLOCK);
while (read(0, buff, 128) != -1);
fcntl(0, F_SETFL, flag);

return 0;
}
0793デフォルトの名無しさんNGNG
TCIFLUSH, TCOFLUSH, TCIOFLUSH
termios(3)
0794デフォルトの名無しさんNGNG
>>790
哀れだ...。
0795デフォルトの名無しさんNGNG
0796デフォルトの名無しさんNGNG
readでブロックしずに読み込めるデータがあるか調べるのってどう
やってやるんでしたっけ?
ioctlでTIO???を使うってどこかで見た記憶があるのですが。
0797796NGNG
>ioctlでTIO???を使うってどこかで見た記憶があるのですが。
これは勘違いだったような気がしてきました。

やりたいことは下のプログラムのこの部分で、
>// 子プロセス (shell) 出力 → 親プロセス標準出力 に転送
>ssize_t len = read(ufds[1].fd, buf, sizeof(buf));
子プロセスからの出力を全部読み取ったかを確認することです。

ioctlにはこだわりません。何か方法を教えてください。

http://www.hakusan.tsg.ne.jp/tjkawa/pdiary/200306.jsp
while (true) {
    ufds[0].fd = 0; ufds[1].fd = master;
    ufds[0].events = POLLIN; ufds[1].events = POLLIN;
    ufds[0].revents = 0; ufds[0].revents = 0;
    int r = poll(&ufds[0], 2, -1);
    if (r > 0) {
        if (ufds[0].revents & POLLIN) {
        // 親プロセス標準入力 → 子プロセス (shell) に転送
        ssize_t len = read(ufds[0].fd, buf, sizeof(buf));
        if (len > 0) write(ufds[1].fd, buf, len);
        } else if (ufds[0].revents) break;
        if (ufds[1].revents & POLLIN) {
        // 子プロセス (shell) 出力 → 親プロセス標準出力 に転送
        ssize_t len = read(ufds[1].fd, buf, sizeof(buf));
        if (len > 0) write(1, buf, len);
        } else if (ufds[1].revents) break;
以下略
0798デフォルトの名無しさんNGNG
始めまして
プログラム上から他のプログラムやシェルスクリプトを実行する方法を教えてください
お願いします
0799デフォルトの名無しさんNGNG
>>798
system
0800デフォルトの名無しさんNGNG
>>797
> やりたいことは下のプログラムのこの部分で、
> >// 子プロセス (shell) 出力 → 親プロセス標準出力 に転送
> >ssize_t len = read(ufds[1].fd, buf, sizeof(buf));
> 子プロセスからの出力を全部読み取ったかを確認することです。

単純にreadの戻り値が0ならend of fileでいいと思うが。ここに
来る前にpollでPOLLIN調べてるからブロックすることもないだろうし。
0801798NGNG
>>799
systemてなんでしょうか?
今回始めてUNIX系で作るものですから (´д`;)
0802デフォルトの名無しさんNGNG
>>801
man 3 system
man 2 fork
man 3 exec
0803802NGNG
訂正。
環境によって、
execは
man 2 exec
0804798NGNG
>>802
ありがとうございます。
調べてみます。
0805デフォルトの名無しさんNGNG
っつーか、調べてから質問しる
0806798NGNG
っていうか、
こういう場合の調べ方がむずかすぃので・・・
つい楽してしまいますた
thanks
0807デフォルトの名無しさんNGNG
>>806
調べかたが難しいなんて言っちゃっても問題がない環境に行けて幸せだね。
0808デフォルトの名無しさんNGNG
>>806
man -k execute
man -k command | egrep 3
0809デフォルトの名無しさんNGNG
実行するとfloating point exception (core dumped)と出て中断されるんですけど
floating point exception (core dumped)ってどういう意味なんですか?
0810デフォルトの名無しさんNGNG
そのままググれ馬鹿
0811デフォルトの名無しさんNGNG
>>809
どこかで0除算とかしているんだろう。
0812デフォルトの名無しさんNGNG
>>810
ぐぐったけどメッセージについての説明は見つからなかった

>>811
rand();で除算してました
0813デフォルトの名無しさんNGNG
>>809
お前みたいなふいんき(←何故か変換できない)を読めない浮いた香具師が、
職場にいる点がかなり例外的な状況っていう意味。
0814デフォルトの名無しさんNGNG
>>813
つまらないですぅ
0815デフォルトの名無しさんNGNG
案の定、素人丸出しの結果だったな
ああアホらしい
0816デフォルトの名無しさんNGNG
>>815
馬鹿必死だなw
0817デフォルトの名無しさんNGNG
まあ春だしな
0818デフォルトの名無しさんNGNG
デーモンを作成しております。

コレはトラップしとけって言うシグナルについて教えて下さい。

KILL(終了処理)とTERM(終了処理)とHUP(設定再読込)位で良いんでしょうか?
0819デフォルトの名無しさんNGNG
>>818
> KILL(終了処理)

お前のシステムではトラップできるのか ?
0820デフォルトの名無しさんNGNG
>>819
できないことに気付いたので候補から外しました。
0821デフォルトの名無しさんNGNG
>>818
INT
0822デフォルトの名無しさんNGNG
以前似たような質問があったな。多分上の方にあると思うが。
0823デフォルトの名無しさんNGNG
>>460-467か
0824デフォルトの名無しさんNGNG
UNIX環境でmkfifoを使いパイプファイルを作成しましたが
これってパイプのサイズは指定できるんですか?
テストしてみると32kまでしか書き込めないんですが・・・
0825デフォルトの名無しさんNGNG
>>824
誘導されてきたっていっとかないとマルチ扱いされちゃうかも
0826デフォルトの名無しさんNGNG
書き込めないって・・・読み出したのか?
やったテスト全部さらせ
0827デフォルトの名無しさんNGNG
Linux Cでプログラム組むとして、電源遮断する方法ってある?

Win32で言う、ExitWindowsEx()みたいなの
(だったかな?Win32でプログラム作ったこと無いからよくわかんねーけど)

スキルある人教えてください。
0828デフォルトの名無しさんNGNG
system("shutdown -x now");
0829827NGNG
>>828
ありがとう
家帰ったらやってみる。
0830デフォルトの名無しさんNGNG
ふろぽ。
0831デフォルトの名無しさんNGNG
linuxのジョイスティックに関してここで質問すれば、
回答してくれる人が、もしかすると、いたりしますか?板違いですか?
0832デフォルトの名無しさんNGNG
おそらく板違い。
ジョイスティックは実装の依存が大きいので、犬板にいった方がよい。
0833デフォルトの名無しさんNGNG
>>831
http://wolfpack.twu.net/libjsw/
0834デフォルトの名無しさんNGNG
>>831

ドライバを知らない>>832の様なアホは放っといて私が答えますよ。
0835831NGNG
>>832
linux板ってあったんですね。すみませんでした。盲な自分に激しく鬱。。。

>>833
ガンバって読みます。有り難うございます。

>>834
有り難うございます。
デバイスドライバ(の提供するAPI?)をつかったプログラムははじめてなんで何をどうすればよいか全然分かりません。
linuxのjoystickドライバをつかって、ジョイスティックの状態やボタンのプレス、リリースの検出を行いたいんですが、上気の理由でこまっています。

デバイスファイルを開くときにブロックモードとノンブロックモードがあるようですが、どういった使いわけなのか知りたいです。

で、今はブロックモードでジョイスティックでおきたイベントを検出しようとしてます。
参考にしているプログラムでは、
whileの無限ループ内で、オープンしたファイルでディスクリプタから、js_event(JS_DATA_TYPEではない)構造体にreadで読みこんで、
この中味を調べることで、状態の検出を行っています。
いま特にわからないところは、ioctl()がわからない、というのと、
read()が遅ければバッファのようなものがいっぱいになってしまうのではないか、というのです。ioctl()は、(特にread()とくらべてのような)ものなのでしょうか。後者は、そんなことがおきるわけが無いのでデバイスドライバがどのようにデータを出力するのかがしりたいです。

このように壊滅的に何も分かってません。
0836831NGNG
>>で、今はブロックモードでジョイスティックでおきたイベントを検出しようとしてます。
ノンブロックモードだったっぽいです。さっぱりわからない。

ブロックモードとノンブロックモード、そのものはなんとなく分かりました。
でも、何をどうブロックするのかが分かりません。

ioctl()について少しわかりました。ファイルディスクリプタはバイト単位のデータが流れて行くまたは来る出入口だと思ってたけど、いろいろ出入り出来るんですね。。。

で、やっぱり分からないのが、ジョイスティックの状態がどこにどのようなルールでたまっていくのかです。たまらないのかな。。。
0837デフォルトの名無しさんNGNG
ジョイスティックは普通ポーリングするだろ

ジィスティックの入力は溜まってもうれしくいないし
0838デフォルトの名無しさんNGNG
データの取得要求からデータ取得完了までread関数から戻ってこないモードがブロッキング。
要求だけ出して取得完了はシグナルとか別の手段で受け取るのがノンブロッキング。データ待ちの間に別の処理を行いたい場合に有効。

制御の進行をブロックするわけです。

もちろんデータは読まないとバッファにたまりいつかは破棄されるでしょう。
0839デフォルトの名無しさんNGNG
>要求だけ出して取得完了はシグナルとか別の手段で受け取るのがノンブロッキング
?
0840デフォルトの名無しさんNGNG
つまりアレだ。
パシリに「ウーロン茶買って来い」と命令して

パシリが買ってくるのを待ってるのがブロッキング
パシリが買ってくるのを待たずに吉野家で豚丼食ってるのがノンブロッキング
0841839NGNG
すまん。言葉が足りなかった。
いつからノンブロッキングの定義が変わったのかなと…。
わしの知っているノンブロッキングとは(joy stickだからreadの場合だけでいいよね)

readで要求をした量より十分なデータがある場合、
readは正常に終了し、要求した量のデータをreadして、そのバイト数を返す。

readで要求をした量に比べて十分なデータがない場合、
readは正常に終了し、すべてのデータをreadして、readできたバイト数を返す。

readできるデータがなかった場合、
readは失敗し、errnoに適当な値がセットされる。(おそらくEAGAINかEWOULDBLOCK)

と思うのだが…。
0842デフォルトの名無しさんNGNG
>>838
> データの取得要求からデータ取得完了まで
> read関数から戻ってこないモードがブロッキング。

これはいい。

> 要求だけ出して取得完了はシグナルとか
> 別の手段で受け取るのがノンブロッキング。

これは非同期の説明。

データがまだ来てないなどの理由で、
データを受け取らなくても、つまり要求か完了しなくても、
呼び出しから復帰することがあるのがノンブロッキング。

>>841
> いつからノンブロッキングの定義が変わったのかなと…。

あなたが誤って理解していたんでしょう。
非同期と分離して考えられない人は多いから。
ノンブロッキングは要求の中断可能性(可能)、
非同期は結果取得の方法(別途)。
0843デフォルトの名無しさんNGNG
>>842
ああ、そうか。ポーリングできるようにするのがノンブロッキングか。
0844デフォルトの名無しさんNGNG
>>842
>呼び出しから復帰することがあるのがノンブロッキング。

確実に復帰してもらわないと困る気がするが。
0845デフォルトの名無しさんNGNG
>要求が完了しなくても、
>呼び出しから復帰することがあるのがノンブロッキング。
>>844
よく読め
0846デフォルトの名無しさんNGNG
>>845
だから要求が完了しないときに呼び出しから復帰しない場合もあったら使いにくくないか?
0847デフォルトの名無しさんNGNG
>>846
だから要求が完了する/しないにかかわらず復帰するんだってば

例えば数GBのファイルを読みに行ったまま呼び出しから復帰しないままだと困るだろ?
0848デフォルトの名無しさんNGNG
>>847
それならわかるが842はそう書いてない。
「〜することがある」はしない場合もあることを意味する。

なんかおかしいと思ったらこういうことか…
0849何もおかしくないNGNG
A. データを受け取り復帰
B. データを受け取らず復帰(タイムアウト等)
C. エラー

Bすることがあるのがノンブロッキング。
ないのがブロッキング。
0850デフォルトの名無しさんNGNG
>だから要求が完了する/しないにかかわらず復帰するんだってば
はおかしくないですか?

これこそ非同期との混同じゃないですか?
0851デフォルトの名無しさんNGNG
非同期処理を実現するためのひとつとしてノンブロッキングな関数がある
0852831NGNG
皆さんのおかげで、それなりにわかってきた気がします。
迷惑かけてます。アホに付き合ってくれて本当にありがとう御座います。

read()のブロック中はプロセス(?)はサスペンドしてて割り込みが入るまでCPUを食わなかったりします?

>>841氏の書いていることに誤りはあるのですか?
ここでの説明を見ていろいろ考えてみた限り誤りの個所がわかりません。申し訳ありません。
(>readが失敗し…のところはread()の説明書が無いので失敗なのか正常なのかわかりませんが。)

データが十分あったら、読み込んで正常終了。
データが十分無くても、あるだけ読み込んで正常終了(ただし、戻り値は読み込んだバイト数)。
で、
ブロッキングモードでは、データが全然無かったら、ブロック、、
ノンブロッキングモードでは、どこかのフラグを弄って正常終了(フラグを弄って以上終了ですかね?)。
間違ってます?

システムコールの本を買うことにしました。いや、今さっき注文しました。

試してみたら、私の環境では、ジョイスティックのイベントが63個までどこかでバッファされて、64個目のイベントが入るとバッファ内が全て消去されて、初期化時のイベントがバッファされて、readされるまでイベントの取得を行わないようでした。
この60個くらいのイベントは何処に保存されてるんでしょうか?デバイスドライバ内ですかね?


ジョイスティックとは少し話がずれますが、
ファイルディスクリプタに対して、あるバイトの読み込み可能なデータが存在するかどうか調べることが出来る関数(システムコール?)はありますか?

余談ですが、今は、「ttp://atrey.karlin.mff.cuni.cz/~vojtech/joystick/」で配ってる、
「joystick-1.2.15.tar.gz 」の中の「jstest.c」とかを読んで混乱したり解ったり考えたり調べたりしています。

ゆくゆくは、非同期についても知りたいと思っているので、お勧めの参考書などがありましたら、教えてください。
0853831NGNG
何か、僕がこのスレッドを汚している気がして来た。。。


ノンブロッキングモードで、データを全く読みこめなかった場合は異常終了扱いのようですね。試してみたら「-1」が戻されていました。異常なのか。。。

多分、read()のノンブロッキングモードに限って言えば、非同期とは関係ないですよね?いや、適当に言ってるのですが。。。
0854デフォルトの名無しさんNGNG
select

read
0855デフォルトの名無しさんNGNG
>>853
> 多分、read()のノンブロッキングモードに限って言えば、
> 非同期とは関係ないですよね?

ないです。
多くUNIXの場合、aio_*(2)ってのが非同期のprimitiveです。
0856デフォルトの名無しさんNGNG
>>850
> >だから要求が完了する/しないにかかわらず復帰するんだってば
> はおかしくないですか?
>
> これこそ非同期との混同じゃないですか?

この言い方はおかしい。
非同期の復帰とはどういうものかそこだけに注目して、

> >だから要求が完了する/しないにかかわらず復帰するんだってば

が非同期のケースにやや適合することから、
それは非同期との混同だと言っています。

> >だから要求が完了する/しないにかかわらず復帰するんだってば

はノンブロッキングの説明として正しい。
非同期の説明としては完了したことを確認して復帰する場合がある、
と誤解する余地があるので少し適切でない。
もちろん与り知らぬところで完了している可能性がある、
そういう意味では(非同期の一側面として)正しいことは正しいのですが。

// まあ解説しても粘着されるだけなのかも知れないが…
0857デフォルトの名無しさんNGNG
>>856
粘着というかあんたが素直に謝れば済む話では?
0858856NGNG
>>857
>>856==>>847と思っているということですか?
違いますよ。

ほとんどの人はどれが正しいか分かっていると思うけど、
>>850のような書き捨てレスは、初心者を惑わすから出てきただけです。
0859デフォルトの名無しさんNGNG
>>858
あなたはさぞ上級者サンなのですね。
0860デフォルトの名無しさんNGNG
その上級者さんに質問なんですがうちの環境では
ノンブロッキングでreadしたとき、バッファにコピーされた後に
返るようなんですが、実装がまずいのですか?
(readの前後にgettimeofdayで測定しました。)

あと、とあるところに
The use of the O_NONBLOCK flag has no effect if there is some data available.
って書いてあるのですが、これも間違いですか?
0861デフォルトの名無しさんNGNG
>>860
?
かかれてるとおりだろ?
何がいいたい?
0862デフォルトの名無しさんNGNG
自分が無知、無能だということを言いたいのでは?
0863デフォルトの名無しさんNGNG
質問です。Linuxでの話です。
tmpfs上のファイルをext2上にrename(2)したいのですが断られます。
こんな時、やっぱり自前でコピーだのunlinkだの書くしかないのでしょうか?
0864デフォルトの名無しさんNGNG
rename(2)はファイルシステムまたげないのでそういうもの。
自前でコピーしてunlinkするしかないな。ありがちなことなので
探せばライブラリあると思うけどね。perlだとFile::Copyとか。
0865デフォルトの名無しさんNGNG
>>847の
>だから要求が完了する/しないにかかわらず復帰するんだってば
>例えば数GBのファイルを読みに行ったまま呼び出しから復帰しないままだと困るだろ?
と
>>860の
>ノンブロッキングでreadしたとき、バッファにコピーされた後に返る
>The use of the O_NONBLOCK flag has no effect if there is some data available.
は矛盾するが…。
0866863NGNG
>>864
ありがとうございます。やっぱりそうですね。
しゅぱっと書きます。
0867デフォルトの名無しさんNGNG
>>865
処理が返らない、とはどこにも書いてないと思うが。
どの辺が矛盾してるの?
0868デフォルトの名無しさんNGNG
対話型のコマンドをプログラムから使用しようとしています。
表示されるメッセージによって入力を変えたいのですが、あるプロセスの標準入出力を取得できるpopenの用な関数は無いでしょうか?

環境はlinux2.4.17です。
0869デフォルトの名無しさんNGNG
fork(2)とpipe(2)とexec*(2or3)の組み合わせ。
pipeのsample programをgoogleしてちょ。

んなことはないと思うけど、
curses使っているようなヤツなら、libexpectね。
0870デフォルトの名無しさんNGNG
>>869
お返事ありがとうございます。調べてみます。

やりたいことはカーネルのmake configでパラメータを自動入力したいのです。
menuconfigじゃないのでcursesは抜きですね。
0871デフォルトの名無しさんNGNG
それって.configを書き出した方が早いのでは。
0872デフォルトの名無しさんNGNG
[Y/n/m]な項目だけステータスをいじりたいんです。
.configだとどれがそうなのかって判断しづらいので。
0873あぼーんNGNG
あぼーん
0874デフォルトの名無しさんNGNG
>>872
そんな目的ならexpect(1)を使いなよ。
man, sample見て、すぐに書けるよ。
0875デフォルトの名無しさんNGNG
   . :::';;;;: . .     ..,,,;;:
   . . :;;;;;:.:;;,,    ..:.;;;;.:
   :;;'''  .:';;; . .  .:.:;;;;;':. . .        .,,,,;,,...,,
      .:;;;' :   .:;;;;; .: ,,,;;;,,,   ,  .:;;;';;''' ''';;;;,,
     . :.;;;;' . .:   ;;;;;;;;'''' ';;;:.:.. ,;: . .    ''''''"
     ';;:;'     '''';   .:.';;;;,,;;.
                 '''  ,.:.:';;;;,,,,
             ,、―-、    .;.';:;.:.: ;;;;;;:.;.;...
   -、_      (_二ニ=っ,、;;;:.:;.:;...:.:...'''''''''''
     `‐-、_  (  ´∀)f、 `''、:..:.:. .:
         `-,ノ   つ; /
         (〇  〈-`'"
         (_,ゝ  ) `‐-、_
           (__)     `'‐-、,_..
                        `‐-、._
0876デフォルトの名無しさんNGNG
先生、質問!

例えば、上にあるようにノンブロックモードでread()して、
データが何も無かったために、errnoに「無かった」ことを示す値がセットされたとする。
errnoを調べる前に、
もう一度read()を実行したら、読み込みたいだけ読み込むことが出来た。
このときerrnoは、「無かった」ことを示す値がセットされているのか、
「全く正常に終了した」ということを示す値がセットされてるのか知りたいです。
read()に限らずerrnoを使用する関数全てについて、それらがerrnoの使用について一定の決まりに従っているのがが激しく知りたいです。

よろしくお願いします。
0877デフォルトの名無しさんNGNG
>>876
当然正常。
0878デフォルトの名無しさんNGNG
getopt()について聞きたいんですが、これってUNIXでは標準の関数なんですか?
というかunistdに書いてあるような関数はUNIXでは標準なんですか?

getopt()の内容についてなんですが、
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/getopt.3.html
では、
「必要な引き数が足りないオプションがあると `:' を返す。」
と書いてあるんですが、
僕の環境では、未知のオプションに対する扱いと同じ「?」が帰ってきてしまいます。
例;
 hoge = getopt( argc, argv, "ab:" )
 を使って
 ./a.out -a -b
 とすると、bはオプションが引数を取る指定なので、
 「足りない」ために「:」がhogeに入るはずなんですが、
 実際には「?」が入ってしまいます。
cygwinを使ってます。何処が悪くて説明と矛盾した結果が出ているのか知りたいです。
上のサイトの説明?cygwin上の実装時の問題か何か?

お願いします。
0879デフォルトの名無しさんNGNG
>>878
細かな実装はライブラリに依存する。
Windowsでもバージョンによって微妙なふるまいは違うだろ。

で、君の見ているmanはLinux(newlib)のもの。
使ってるライブラリはcygwin(おそらくwinsup module)のもの。

それぞれそういう仕様であって、何も問題はない。
0880デフォルトの名無しさんNGNG
> ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/getopt.3.html
> では、
> 「必要な引き数が足りないオプションがあると `:' を返す。」
> と書いてあるんですが、

その訳が間違っています。
そのページの前の方にもあるように、(':'で始まらないはずの)optstringが':'
で始まってしまう場合に':'を返すわけです。

こういう説明が既に出ているにもかかわらずこのような誤訳をするというのは
整合性に注意を払っていないというか、訳している本人が理解していないというか……
0881デフォルトの名無しさんNGNG
>>879
そんなのが許されたらPOSIX互換が聞いて呆れませんか?
その関数に関してはPOSIXの設計にバグがあったと記憶してますが。
0882デフォルトの名無しさんNGNG
880氏の指摘
>そのページの前の方にもあるように、(':'で始まらないはずの)optstringが':'で始まってしまう場合に':'を返すわけです。
を見て文章を読み直したら、私の読解の問題だと気付きました。

通常(optstringが':'で始まっていない場合)は、
オプション引数が足りないときには、
想定外のオプションが指定された場合と同様に'?'を返す。
で、
しかし、もしも、optstringが':'で始まっていた場合は、
オプション引数が足りないときには、
'?'ではなく':'を返すといっているのですね。

読解のミスと、プログラミングのミスが重なって混乱していたようです。ご迷惑をかけました。

':'を返したいなら、例は
> hoge = getopt( argc, argv, "ab:" )
ではなくて
 hoge = getopt( argc, argv, ":ab:" )
のようにする必要がありましたね。

いや、申し訳ありません。解決しました。国語能力が足りてないか…ゴフッ
0883デフォルトの名無しさんNGNG
話を蒸しかえして申し訳ないです. ブロッキング/ノンブロッキング,
同期/非同期に関して, 以下の説明ってあってますか ?
私のイメージとしては, こんな感じなのですが.
特に, 何をもって同期/非同期というのか, あまり理解してないです.
>>842 の説明とも違っているみたいですし...

ブロッキング処理: 要求が完了(正常終了/異常終了)するまで制御が返ってこない処理.
ノンブロッキング処理: 要求完了, または要求の処理途中にも制御が返ってくる処理.

(例えば) 2 つの関連する処理 A, B に関して,
同期処理: 処理 A の完了を待って, 処理 B を実行すること.
非同期処理: 処理 A の完了を待たずに, 処理 B を実行すること.
0884デフォルトの名無しさんNGNG
>>883
ブロッキング:パン屋に行ってパンがなければ一生待ち続けるバカ。
ノンブロッキング:パン屋に行ってパンが無ければ何も買わずにさっさと帰ってくる気の利かないバカ。

同期:お使いを頼むと取りあえずは何も考えずパン屋まで行って何かをして帰ってくる。
非同期:お使いを頼むとパンの焼き上がりを電話してくれるように頼む割と頭の良い子。
      しかし、やりようによっては、
 
      「先に金を出せ!そうしたらパンをくれてやる!!」
0885デフォルトの名無しさんNGNG
> ノンブロッキング:パン屋に行ってパンが無ければ何も買わずにさっさと帰ってくる気の利かないバカ。

頼まれた個数に足りない場合は、あるだけ買って帰ってくるから
少しはマシかもしれない。

でも「足りないじゃないの!何やってんの!もういちどいってらっしゃい!」
と怒られることがほとんど
0886デフォルトの名無しさんNGNG
非同期は1つじゃないことにいい加減気付け。
まずカーネルのデバイスからの読み出しはプロセスから見て普通非同期。
通常ファイルなら最初のread()まで読み出しは行われないだろうが、
それ以外の大抵のデバイスは、カーネルにどんどんデータを送って来て、
カーネルがそれをバッファに溜めている。
次に、プロセスのカーネルからの読み出しは、read()を使う限り
常に同期的に行われる。aio_read()の場合は非同期。
最後に、O_ASYNCを使う場合は、read()自体は同期的だが、プロセスの
SIGIOハンドラは通常のプロセスの実行コンテキストから見て非同期に走る。
0887デフォルトの名無しさんNGNG
>>886
いい加減モナにもその辺の議論は数日前に終わっている。
0888デフォルトの名無しさんNGNG
>877
正常終了の場合に errno ってセットされたっけ?
されなかったような気がするんだが

もしされるんだとするなら errno の正常終了を意味する値って何?
マニュアルにも載ってないぞ
0889デフォルトの名無しさんNGNG
正常終了のときはerrnoの値は変更されないぞ。
0にしたいなら呼ぶ前に入れておく。
0890デフォルトの名無しさんNGNG
:::::::::::/           ヽ::::::::::::
:::::::::::|  必   じ  き  i::::::::::::
:::::::::::.ゝ 死   つ   み  ノ:::::::::::
:::::::::::/  だ  に  は イ:::::::::::::
:::::  |  な。       ゙i  ::::::
   \_         ,,-'
――--、..,ヽ__  _,,-''
:::::::,-‐、,‐、ヽ. )ノ      _,,...-
:::::_|/ 。|。ヽ|-i、      ∠_:::::::::
/. ` ' ● ' ニ 、     ,-、ヽ|:::::::::
ニ __l___ノ     |・ | |, -、::
/ ̄ _  | i     ゚r ー'  6 |::
|( ̄`'  )/ / ,..    i     '-
`ー---―' / '(__ )   ヽ 、
====( i)==::::/      ,/ニニニ
:/     ヽ:::i       /;;;;;;;;;;;;;;;;

0891デフォルトの名無しさんNGNG
>>888
> もしされるんだとするなら errno の正常終了を意味する値って何?
> マニュアルにも載ってないぞ

普通0なんだが、正常終了時に設定はされないし、使っちゃダメだな。
正常か異常かは(ほとんどの場合)返り値で判断する。
# glibcだと printf("%d, %s\n", errno, strerror(errno)); で
# 0, Success でした。

それはともかく、errnoって初心者を困惑させるもとだよね。
herrnoとかgai_strerrorとか、(他にもある?)
libcの開発に加わっていない連中の書いたライブラリとの統一性とか。
0892デフォルトの名無しさんNGNG
いわゆるバッドノウハウですな。
単にチュートリアルが少ないだけの話かもしれんけど。
0893デフォルトの名無しさんNGNG
coreutilsのソースコードを読み始めました。
最初にbasenameから読んだんですが、lib/basename.cにある、
size_t base_len (char const *name)
{
size_t len;

for (len = strlen (name); 1 < len && ISSLASH (name[len - 1]); len--)
continue;

return len;
}
という関数がsrc/basename.cで
name[ base_len(name) ] = '\0';
と呼び出されています。size_tがいまいち理解できてないんですが、
この配列(name)の添字となる関数やその内部の変数には何故intを使わずにsize_tを使っているんでしょうか。
説明下手クソでごめんなさい。ソースもどういう範囲でコピペしたらいいのかわからなくて。
0894デフォルトの名無しさんNGNG
いまいち厨キター!(AA略

>何故intを使わずにsize_tを使っているんでしょうか。
size_t は unsigned 整数だ。
あとは自分で考えるべし。
0895デフォルトの名無しさんNGNG
「スクリプトファイルの先頭の、 #! で始まるインタープリターの指定行」に名称ってありますか?
0896デフォルトの名無しさんNGNG
shbang
0897デフォルトの名無しさんNGNG
>>893
サイズを扱う型と言うことで整数型と区別します。
0898デフォルトの名無しさんNGNG
size_tって整数型だろ。

処理系のint, long, long longのbit幅に依存しない型になってる訳だろ。
sizeof(size_t) == sizeof(int)とは限らんからな。
0899デフォルトの名無しさんNGNG
文字列の比較でワイルドカード(*、?)を使いたいのですが、
良いアルゴリズム及びサンプルプログラムがありましたら教えて頂きたいのですが・・・
ご教授よろしくお願いします。
0900899NGNG
追記:言語はCです。
0901デフォルトの名無しさんNGNG
>>899
fnmatch(3)
0902デフォルトの名無しさんNGNG
オートマトンで具ぐれ
0903デフォルトの名無しさんNGNG
>>901
こんなのあったのか。
regexecで作っちまってた。
ぐええ。
0904デフォルトの名無しさんNGNG
メッセージキューについて質問です。

複数のプロセスからメッセージキューに書き込みを行いたいと思っています。
その場合、同時にキューにアクセスしてしまう可能性があると思うのですが、
排他制御は必要なのでしょうか。
唐突な質問ですがよろしくお願います。
0905デフォルトの名無しさんNGNG
どのOSのどのAPI?
0906デフォルトの名無しさんNGNG
>>905
>>1
0907904NGNG
OSはHP-UXで、cで書く予定です。
どのAPI?ipcってことでしょうか?
0908デフォルトの名無しさんNGNG
ipcのメッセージキューならそう書けばいいんじゃなかろうか
0909904NGNG
やっぱり排他制御必要ですか・・・
書き込みの順番も勝手にキューイングしてくれるもんかと思ってました
素人ですみません
0910デフォルトの名無しさんNGNG
System V IPC のメッセージキューだよね。あれって OS 側で排他制御
してくれないんだっけ?
0911デフォルトの名無しさんNGNG
するよ。MT-Safeとは書いてないけど。
0912デフォルトの名無しさんNGNG
setlocale(LC_ALL,"ja");
と
setlocale(LC_ALL,"");
はどう違うんでしょうか?どちらも同じ結果になり、コメントアウトするとうまく動きません。
setlocale(LC_ALL,"");
とすると、標準のロケールが選択されると考えていいのでしょうか?
0913デフォルトの名無しさんNGNG
BSD入門の心得 1.0.9

・質問は霞ヶ関でも通用するような完璧な形式に。
・過去ログは紀元前までさかのぼって完全に調べる事。
・新機能ができても細部にこだわってできるだけリリースしない。
・「正しい」か「誤っている」かを結論づけないと気が済まない性格になる事。
・質問自体は無視して語句の間違いの指摘に熱中する事。
・初心者を見たらできる限り冷酷に排除。
・回答は1行以内で簡潔に。 例:man hoge
・古いバージョンを使っていることがわかると最新にしろという。
・一日三回食後必ずLinuxをあざ笑う事。
・自分の状態に「自覚症状」を持たないこと。
・ウインドウズはエロゲに限ってやむを得ず。
・MacOSXは邪悪なBSD。
・板違いの質問をしたLinuxerを徹底的に叩く事。
・forkする時はアニメ絡みの名前をつける事。
・MLで気に入らない投稿が流れてきたらメールアドレスも含めて全文コピペ
・意味もなく全角英数字を使うやつは小一時間問い詰める事。
・実際より大きく万能である事を見せるために*BSDと表記する事。
・FreeBSD, NetBSD, OpenBSDと正しく表記しない奴はこの世から抹殺する事。
0914デフォルトの名無しさんNGNG
BSD++ == BSE ですか?
0915デフォルトの名無しさんNGNG
関わると脳が破壊されます > BSD(++)
0916デフォルトの名無しさんNGNG
forkって子プロセスに名前って付けられるんですか?
0917デフォルトの名無しさんNGNG
あるプログラムAから、別のプログラムBを実行させて(system()とかかなぁ?)、
きちんと起動したが確認して(戻り値の確認とかで出来たりしないだろうか?)、
終了せよとの合図無しに終了したらそれを確認して、
必要なくなったら終了させて、
きちんと終了したか確認する方法にはどんなものがあるでしょうか?

上記のことで特に、javaからcを実行させるとか出来ますか?(javaに限らず知りたいです)
0918デフォルトの名無しさんNGNG
>>917
・質問は霞ヶ関でも通用するような完璧な形式に。
0919デフォルトの名無しさんNGNG
>>917
forkとexecとwait
0920デフォルトの名無しさんNGNG
>>918は日本語の読解力と理解力に乏しい。
0921デフォルトの名無しさんNGNG
>>919
後SIGCHLDな
0922デフォルトの名無しさんNGNG
この際exit(2)も入れとけや
0923デフォルトの名無しさんNGNG
ついでにdup2もヨロシク♪
0924デフォルトの名無しさんNGNG
headの逆で最初のn行目をすっ飛ばして表示するコマンドってあります?
0925デフォルトの名無しさんNGNG
>>924
head ←→ tail
0926デフォルトの名無しさんNGNG
>>925
tailは意味違うし
0927デフォルトの名無しさんNGNG
>>926
いやtail +nでいいと思うが。ただしn行とばしではなくてn行目から表示
なのでn行とばしたければ-1すべし。
0928ごるごるもあ ◆753Z/RLFiY NGNG
どんどん逮捕すりゃあいいさー。
0929デフォルトの名無しさんNGNG
>>924
UNIX板で聞けよ。
0930デフォルトの名無しさんNGNG
WinでもUNIXでもコンパイルするだけで動くGUIプログラムを作ろう
と思っているのですが、実現できるものなのでしょうか?

Fox Tool Kitを利用する予定です。
0931デフォルトの名無しさんNGNG
できるだろ
0932デフォルトの名無しさんNGNG
>>934
日本語入力不可ですが
0933デフォルトの名無しさんNGNG
↓日本語入力不可なものどぞー
0934デフォルトの名無しさんNGNG
州*‘ o‘リ <あばばばばばばばばば
0935デフォルトの名無しさんNGNG
>>934
結構使いやすいよな。愛用してるよ。
0936デフォルトの名無しさんNGNG
>>930
てめーFOXのドキュメント読んだ上での発言か?カスがっ
0937デフォルトの名無しさんNGNG
>>930
http://www.widestudio.org/index.html

とりあえずコレ使っとけ。
0938デフォルトの名無しさんNGNG
>>930
日本語入力もってことになるとwxWidgetかtkくらいしかないんじゃないか?
0939デフォルトの名無しさんNGNG
gtk+の調子はどうなのかな?
gimpはなんとなく動き始めているようですが…
0940デフォルトの名無しさんNGNG
ファイルディスクリプタを消費させて、簡単にリソースの上限値を
超えるようなループ処理を教えてもらえませんか?
ちなみに環境はSolaris8で言語はC言語です。
0941デフォルトの名無しさんNGNG
openくり返せばいいだけでわ。
0942デフォルトの名無しさんNGNG
>>941
こんな感じですか?
#include <sys/resource.h>

int i;
struct rlimit *rlim;
int max_fd = getrlimit(RLIMIT_NOFILE, rlim);
for(i = 0; i < max_fd; i++){
  open(どこか, O_RDONLY);
}
0943デフォルトの名無しさんNGNG
OSはLinuxです。
pthread_createしたスレッド内で setitimerした場合、時間が来て登録した
関数が割り込みますが、その割り込みは、setitimerしたスレッドが割り込まれる
のでしょうか?
0944デフォルトの名無しさんNGNG
>>943
例えばSIGTERMが特定のスレッドしか止められなかったら困りませんか?
実際はどうなるか知らんけど。
0945デフォルトの名無しさんNGNG
>>943
Linuxのversionによって違います。
古いのは、

> その割り込みは、setitimerしたスレッドが割り込まれるのでしょうか?

YESです。

新しいのはNOです。(こちらがpthreadの仕様)

POSIX realtime拡張の入っているSolarisはどちらもOK。
Linuxもpatchが出ている模様。

一般的には、他のthreadではpthread_sigmaskでblockします。
Linux onlyなら、Linux版のpthreadスレがいいと思います。
0946デフォルトの名無しさんNGNG
あ、setitimer(2)類似system callで
threadが指定できたかどうかは良く覚えてないや、Solaris。
0947デフォルトの名無しさんNGNG
とりあえずすべてのシグナルをブロックして
シグナル受信専用スレッドを作ってsigwait
0948デフォルトの名無しさんNGNG
>時間が来て登録した関数が割り込みますが
とあるから,signal handler使ってるんじゃねーの?

で,どのthreadにhandlerがdispatchされるのか聞いてるものと感じたが。
0949デフォルトの名無しさんNGNG
だから、規格上どのthreadにdispatchされるか決まってません。
ただしpthread_sigmaskでblockしているthreadにはdispatchされません。
0950948NGNG
ん? 漏れは
>>949==>>945(?)の書き込みで十分だろ,と思って,
特に書き込まなかったわけだが。

で,そこに来た >>947 のちょいとズレたレスに突っ込みを…
0951949NGNG
>>950
そうか…良くワカランが、良く分かった。
0952まだRH9NGNG
Mac の CD-ROM の partition map の件ですが、Mac の人は CD burner を使うだけで
こと足りるので、聞いても分かる人がないようなので、ぐぐってみたら、unix 関係で
プログラムで引っかかるので、聞きに来ました。
(Inside Macintosh の SCSI Manager, Start Manager はありきたりの記述)
Mac の CD-ROM の先頭には、いわば device 用の諸元が入りますが、そのひとつに
全体容量をブロックサイズ(あるいはセクタサイズ)で割った数が入るところが
あります。で、この数がゼロのものと、丁寧に計算しているものがあります。
2−3の例から、読みこみ時には最早参照されていない感じがしますが、実情はどうか
ご存知の方はいらっしゃいませんか。
(2,3の Mac の CD-ROM も見ましたが、いろいろで、気持ちが悪いのです)
0953デフォルトの名無しさんNGNG
>>952
> Mac の CD-ROM の先頭には、

というのは一体?
0954まだRH9NGNG
>>953
どうも。
構造体名:Block0 は次ぎのように始まっています。
"ER"の signature
unsigned short sbBlkSize  // 512 or 2048 (bytes) がよくある
unsigned long sbBlkCount // これが問題の Blk 数
....
driver 数
driver 開始 Blk で始まる8バイトのデータが繰り返される。
....
次ぎの Blk といっても、sbBlkSize=2048 でも 512 bytes 後ですが、
partition map が(512 bytes 毎に)続きます。
....
driver routine ...
0955デフォルトの名無しさんNGNG
unixを使ったcプログラミングで、

if( fork() == 0){
/* 子プロセス */
execlp("ls", "ls", "-lag", NULL);
}

/* 親プロセス */
printf("done\n");
exit(0);

unixでこういうプログラムを実行したら、
doneが表示されて
lsの実行結果が表示されて
そのあと見えないプロンプト(?)が存在するようになるんですけど
これはどういうことなんですか?
0956デフォルトの名無しさんNGNG
>>955
見えないプロンプトの存在をどうやって知ったのだ!?

おいといて。
シェルに戻ってプロンプトが表示された後で
ls が実行されてるんでそ。
0957デフォルトの名無しさんNGNG
こんな感じですか?

pid_t ret;
if ((ret = fork()) == 0) {
execlp("ping", "ping", "-c", "3", "localhost", NULL);
} else if (ret > 0) {
wait(NULL);
printf("done\n");
} else {
perror("fork");
exit(1);
}
0958デフォルトの名無しさんNGNG
>>954
最近はtapeみたいにon the flyで書き込んでいくから、
正直分かりませんってとこなんじゃないの?
CD-ROMは辿っていけば分かるしね。
0959まだRH9NGNG
>>958
レスをありがとうございます。
Apple_Free は、見ないってのは、あったのですが、
Apple_HFS もブロック数はどうでもよくなっている見たいで、
やはり、そういう流れでしょうか。
UNIX のソースにも、/* XXX */ ってコメントが付いている。
0960デフォルトの名無しさんNGNG
coreってどうやってデバックすればいいの?
0961デフォルトの名無しさんNGNG
$ gdb a.out core
0962デフォルトの名無しさんNGNG
>>961
いやそれは分かるんだけど、そのあとどうすればよいのか分からない。
0963デフォルトの名無しさんNGNG
(gdb) where
0964デフォルトの名無しさんNGNG
Debugging with GDB
http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gdb-5.0/gdb-ja_toc.html

backtraceして止まった辺りを調べるとか。
0965デフォルトの名無しさんNGNG
実例入力
(gdb) bt
(gdb) f
(gdb) list
(gdb) print var
(gdb) printf "%08x",var
(gdb) up
(gdb) list
(gdb) list 20
(gdb) down
0966デフォルトの名無しさんNGNG
>>965
それだとupの時点でlistの効力が切れるから次ターンでcontの反撃を食うことになるぞ。
0967デフォルトの名無しさんNGNG
GUIフロントエンド使えって
0968デフォルトの名無しさんNGNG
俺はemacsで使う
0969デフォルトの名無しさんNGNG
>>968
readline使えなくて地獄じゃないですか?
0970デフォルトの名無しさんNGNG
使えるよ。
0971デフォルトの名無しさんNGNG
でもちょっと変数を見たいだけなら fprintf が手っ取り早いんだな。
0972デフォルトの名無しさんNGNG
Emacsのフロントエンドって時々おかしくなるので困る。
コマンドラインのgdbで実行すると正しく動くのに、
Emacs上のgdbフロントエンドからだとステップ実行の行がおかしかったり
落ちてしまったりするんだよな。なぜだろう。

DDDは日本語を含むファイルで位置の計算が合わないし、どこかにフロントエンドはないものか。
0973デフォルトの名無しさんNGNG
OutputDebugStringみたいなのってないですか?
syslogじゃなくて。
0974デフォルトの名無しさんNGNG
>>973
どーゆー機能が欲しいかも書かず
「みたいなの」じゃ判らん。
fprintf(stderr, 〜 じゃ駄目なのか?
0975デフォルトの名無しさんNGNG
linuxで書いたネットワーク関係のライブラリを
カーネルモジュールにして欲しい、って言われますた。
仮想ネットワークドライバにしようと思うんだけど、移植って簡単にできるの?
mallocとかしてるとこを全部kmallocに書き換えないといけないくらい?
あとlibsslとかの普通のアプリケーション用ライブラリってカーネルモジュールに使えるの?
0976デフォルトの名無しさんNGNG
>> 975
一般的にカーネルモードで動作するロジック中で、
システムコールやライブラリ関数を使う事は出来ません。
つまり、マニュアルセクションの2と3は使えないってこと。
使用可能な関数は、セクション9になります。

また、ユーザーランドのプログラミングとカーネル内部の
プログラミングでは、プログラミングを行うときの考え方や
気をつけないと行けない事、その他もろもろ、など全く異なる
概念でもってプログラムを作成しなければいけません。

よって、移植というレベルではありません。
0977デフォルトの名無しさんNGNG
2.6で激しく変わったんじゃなかったかなあ>NW周り
0978975NGNG
>>976
ってことはかなり書き換えですか・・・。

tron用にも書いて欲しい、とか言われたので
カーネルモジュールにしようと思ったんですが、
とりあえずtun/tapを使う方向で考え直してみます。
ありがとうございます。

>>977
2.4をターゲットにするんでそこは大丈夫そうです。
0979デフォルトの名無しさんNGNG
ソケット通信時にrecvfromでデータを受信してるんですけど確実に第3引数で指定した
サイズを受信するまで待つようにするにはどうすればいいでしょうか
0980デフォルトの名無しさんNGNG
>>979
そんな機能はない。
ループ組んでバッファへのポインタずらしてやれば。
0981デフォルトの名無しさんNGNG
locale 調べるのって LANG 見ればいいの?それとも LC_ALL?
0982デフォルトの名無しさんNGNG
>>981
両方
0983デフォルトの名無しさんNGNG
>>981
優先順位は
LC_ALL > 他のLC_* > LANG
0984981NGNG
>>982
どうもありがとう。
0985981NGNG
>>983
ありがとう、よくわかりました。
0986デフォルトの名無しさんNGNG
>>979
recvfrom ってことはUDPだよね。
UDPてことはsend もしくは、sendtoで送った1つのパケットが
そのまま受け取れるんじゃないの?
recvfromで指定するサイズって送信側とネゴしておいた値を
使うものじゃないの?
だから、なんでrecvfromで指定したサイズが受け取れないという
ケースがあるの?

TCPと勘違いしてない?
0987デフォルトの名無しさんNGNG
>>986
recvfromするサイズがsendtoで投げたサイズより小さい場合とかはどうなるんですか?
0988デフォルトの名無しさんNGNG
>>986
>UDPてことはsend もしくは、sendtoで送った1つのパケットが
途中でフラグメント化したりしないんですか?後、IPパケットが複数になってどっちかが遅延したりとか。
0989デフォルトの名無しさんNGNG
OS起動時に呼び出されるrcスクリプトに関して質問です。
このrcスクリプトから呼ばれる各種アプリケーションの起動スクリプト内で、
コマンドを実行するときに'&'を付けてバックグラウンド実行されている
ものを見たことがないです。'&'を付けないで実行する理由は何でしょうか?
なんかわけわからん質問かも知れませんが、わかる方いたら教えてください。
0990デフォルトの名無しさんNGNG
>>989
シェルスクリプト終了時にコマンドがすべて完了している事が保証されなくなるから。

とか。

例えるなら、

「納期は今日だ!しかしテストは現在進行中だ!
まぁ、客もすぐここの試験をやるなんて言わんだろう・・・多分・・・。
よし!なんとかなる!客には終わったって言うぞ!!」

なんて言うアグレッシブな状況になると、思いました。

非同期処理で必ずつきまとうタイミングの問題をわざわざ持ち込む必要もなければメリットもない
と言うことかなと(結局の所変な待ちが無ければ処理時間は大して変わらんので。)。




0991デフォルトの名無しさんNGNG
>>988
何のためのマルチレイヤだ?
それらは,IP層で全て吸収される。

>>987
尻切れで後ろは切り捨て。これが基本。
実装次第では,オプション等でどうにかできる可能性もあるが,
そんなもんに期待してはいけない。
0992デフォルトの名無しさんNGNG
>>990
ありがとうございます。自分は入社2年目ですが、1年目のときに
知らなかったせいでそれをやらかしてしまったのです。
HP-UXでrcスクリプトが先に終了するとSIGHUPが飛んできて、バックグラウンド
実行中のプロセスが消えました。しかし不思議なことにSolaris、AIX、Linuxでは
発生しないのです。そのあたりはOSの仕様だと勝手に自分を納得させていますが、
nohupというコマンドで最終的に切り抜けたことに不安があります。
0993デフォルトの名無しさんNGNG
>>987
>>988

>>991 の言うとおり。
フラグメントかされたパケットは、きちんと元通りにされてアプリに
渡されます。

TCPでデータをsendしたときに、sendしたサイズ分が1回のrecvで受け取れるわけ
ではないというのと混同してないか?
0994デフォルトの名無しさんNGNG
>>992
私も二年目です。

HP-UXベースのリアルタイムOSを使ってます。
おもしろそうだから実験してみよっと。
0995デフォルトの名無しさんNGNG
alarm()等から送られるシグナルを受け取るハンドラは、送ったスレッドと同じスレッドで実行されるのでしょうか?
0996デフォルトの名無しさんNGNG
つーかいいかげん、そろそろ次スレ立てろや、次の奴↓
0997デフォルトの名無しさんNGNG
↑ちょっと待っていろ。
0998デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1085930894/
0999デフォルトの名無しさんNGNG
【ビギナ】初心者が習うべき言語は? part4【必読】
1000デフォルトの名無しさんNGNG
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。