UNIXプログラミング質問すれ Part2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG前スレ:
UNIXプログラミング質問すれ
http://pc2.2ch.net/test/read.cgi/tech/992057422/
>>2 関連スレ
0002デフォルトの名無しさん
NGNGCygwin使っている人いますか? その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デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG無理に埋立することもなかったんじゃないかとは思うけどな。
0006デフォルトの名無しさん
NGNGgccでのCのプログラムを書いてるのですが、ログインユーザのホームディレクトリと、
実行ファイルのあるディレクトリパスを取得したい場合どのようにすればよいのでしょうか?
# チルダをつけるとホームのファイルを開けるのかと思ったのですが駄目でした…。
0007デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG> 実行ファイルの方は自分で調べようと思います。
1. argv[0]がfull pathかどうか?
yes → それ
2. argv[0]が'/'入りでかつ相対パスか?
yes → getcwd と それ を連結
3. $PATHの中を順番に、argv[0]を探す。
found → それ
確か、GNU dldはこんなことをやっていた。(そこからcodeを盗んでもいい)
0010デフォルトの名無しさん
NGNGUnix系じゃ100%確実な取得方法はないね。
execve(2)の引数で簡単に嘘付けるし、
/proc見たとしてもマウントされてない可能性もある。
chroot(2)なんかした日にゃ、そもそもパスが無意味。
そんなの気にする必要はまったくないがw
0011デフォルトの名無しさん
NGNGどっかのFAQにそんな記述があった。
0012ヽ(´ー`)ノ
NGNG0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNGクラス関数の呼び出し規約とか載ってるサイトないですか?
0015デフォルトの名無しさん
NGNGgetpwnam(3)
0016デフォルトの名無しさん
NGNGextern "C" T1 F(T2 arg1) {
// C++を呼び出すんじゃー
};
とwrapper関数を定義して、Cのprogramから使う。
Cのsource codeで、
extern "C++" {
// C++を呼び出すんじゃー
}
とlinkageを指定して呼び出す。
いじょ
あ、それスレ違いな。
0017デフォルトの名無しさん
NGNG> Cのsource codeで、
> extern "C++" {
> // C++を呼び出すんじゃー
> }
できんだろ。
0018デフォルトの名無しさん
NGNG// Lispを呼び出すんじゃー
}
001914
NGNG0020デフォルトの名無しさん
NGNG// Javaを呼び出すんじゃー
}
extern "C#" {
// C#を呼び出すんじゃー
}
なんか最強だなおい
0021デフォルトの名無しさん
NGNGSIGHUP を受けたときに再起動して、設定ファイルを読み直すとき。
0022デフォルトの名無しさん
NGNGexecve("自分のパス", ...);とかやるわけ?
0023デフォルトの名無しさん
NGNG必要ならconfigureのオプションで変更。
そもそも設定ファイルはバイナリとはかけ離れた位置にあるのが
普通なのに自分の位置なんかわかって役に立つのか?
0024デフォルトの名無しさん
NGNGそれもやっぱり絶対パスでハードコード推奨だろうな。
とくにsuidなんかだと、ファイル名のような外部から与えられるものは危なすぎる。
0026デフォルトの名無しさん
NGNGあんた何言ってんの?
0027デフォルトの名無しさん
NGNGgetch がパイプから入力をとってきてしまいます。
しかし less は標準入力からデータをもらいつつ、かつキーボードからも入力を
受け付けますよね。こういうことは curses ではできないのでしょうか。
0028デフォルトの名無しさん
NGNGまずlessってパイプとキー入力を同時に受けつけてるの?
main()
{
int buf;
while((buf=fgetc(stdin))!=EOF){
fputc(buf,stdout);
}
}
これだけでも、パイプからの入力中にいくらキーボード叩いても、
ごちゃまぜにはならんが。
0029デフォルトの名無しさん
NGNGmoreの逆戻りが出来る版ですよ。
003027
NGNGパイプとキー入力を同時に受けつけてるか分かりませんが(tail -f file | less
とかやるとちょっとおかしくなる)、パイプつないでキー入力を受けつける方法が
分からないんです。
0031デフォルトの名無しさん
NGNG0032デフォルトの名無しさん
NGNG0033デフォルトの名無しさん
NGNG0034デフォルトの名無しさん
NGNGそんなもん存在するの? 一体なぜ???
>>28
あんた、何言ってんの?
003527
NGNGよく分かりませんが getch って stdin 読むものじゃないんですかね。
echo j | ./a.out
で ./a.out して j 押したのと同じ状態になります。その後キー入力効きませんが。
0036デフォルトの名無しさん
NGNGごちゃごちゃ言わんとソース読め。嫌ならUNIXなんぞさっさと止めてしまえ。
0037デフォルトの名無しさん
NGNGgetch()なんて関数どこにある?
0038デフォルトの名無しさん
NGNGcursesて知ってる?
lessのソース眺めたけど、やっぱ/dev/ttyを開いてたね。
0039デフォルトの名無しさん
NGNG0040デフォルトの名無しさん
NGNGカーネルバッファリングのバッファサイズを0にするために,
ioctl関数をどのように使用すればいいですか?
0041デフォルトの名無しさん
NGNGつうかioctlでread/writeのバッファサイズの変更なんてできるのか?
そもそもファイルシステムに依存するぞ。
もしstdioのことを言ってるならバッファリングはカーネルでなく
ライブラリがやってる。man setbuf すれ
0042デフォルトの名無しさん
NGNGすいません.
OS: Redhat 9.0
ユーザバッファリングではなく
カーネルバッファリングです.
ioctlでできるそうなんですが
以下のサイトでできると書いてあるんですが
やりかたがわからないんです.
ttp://search.luky.org/linux-users.6/msg07811.html
0043デフォルトの名無しさん
NGNGsetbufで必要十分だろ。ioctlなんて使わないよ。
何がしたいの? なぜioctlにこだわるの?
0044デフォルトの名無しさん
NGNGまずカーネルバッファリングとか不明確な単語は使わないほうが良い。
それからファイル入出力じゃなくて端末出力でしょ。
さらにioctlはドライバ毎に用意されるものでドライバI/Fを調べるのが普通。
で、TTYドライバに対する設定はlinuxの場合は以下のURIでできるようだが
バッファサイズ変更の機能は見つからない。
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/termios.3.html
元ネタが嘘?
0045デフォルトの名無しさん
NGNG日本語が読めないんですか?
0046デフォルトの名無しさん
NGNG元ネタはinをrawにすれって事じゃないのか?
0047デフォルトの名無しさん
NGNG>>21,22の意味が分からないの?
004840
NGNGうちの師匠がioctlでできるはずだから
やっておけって言われたものですから.
目的はwrite/readは
カーネルでバッファ(ブロック?)に溜めて,
溜まったら出力しますよね?
そのバッファサイズを0にすれば使用するマシンの
ファイル入出力に掛かる正確な時間が計れるのではと言われました.
わかりにくい文ですいません.
0049デフォルトの名無しさん
NGNG0050デフォルトの名無しさん
NGNG005140
NGNGそれも考慮しましたが,
師匠がいってるのでioctlにこだわりを.
すいません.
0052デフォルトの名無しさん
NGNG005340
NGNGそれはいいすぎでしょう.
0054デフォルトの名無しさん
NGNGと、言うか普通に師匠に聞けばいい話だと思われ。
0055デフォルトの名無しさん
NGNG言ってること滅茶苦茶だな。
ファイルIOなら >>49 がお望みのものじゃないの?
ただし、それで計った値に意味があるかは別だけどな。
師匠も師匠なら弟子も弟子・・・。
0056デフォルトの名無しさん
NGNG> そのバッファサイズを0にすれば使用するマシンの
> ファイル入出力に掛かる正確な時間が計れるのではと言われました.
fsyncにしてもO_SYNCにしても、
いつもの入出力のやり方と違うわけだが、そんな調査でもいいのか?
005740
NGNGマシン毎の性能を性格に計測するためには
バッファサイズを同じにしなければならないらしいです.
0058デフォルトの名無しさん
NGNGクラス関数の呼び出し規約とか載ってるサイトないですか?
知りたいのはC++製のsoライブラリへのアクセス方法で、
Cの場合については判ってます。
0059デフォルトの名無しさん
NGNG巨大ファイルコピー;syncを数回実行して平均を出すべきだろうね。
# cp TESTDATA /mnt/target;sync;sync
実使用とかけ離れたドライブ単体の性能を測るのであれば。
実使用状態ではHDDとプログラムはできる限り並列に動作させようとして
カーネルががんばっちまう結果、
書き込み終了より先にプログラムが終了しちまう。
0060デフォルトの名無しさん
NGNGシンボルの変換方法、仮想関数テーブル、例外処理、static initializerの扱い
などがコンパイラベンダ毎にマチマチなので、コンパイラとバージョン限定
しないと話にならんと思うよ。
0061デフォルトの名無しさん
NGNG※いや、サクっとできそうで本当にできなかった。カレントDirなら
列挙できたのだけど、その下がなぜか、かからない・・・libc5使ってるのだけどね。
おしえてちょ。
0062デフォルトの名無しさん
NGNG(´-`).。oO(…価値のある情報だろうか?)
0063デフォルトの名無しさん
NGNG再帰。スタックあふれに注意。
0064デフォルトの名無しさん
NGNGマシンごとに違うのは、バッファだけじゃないのに、
バッファだけ同じにするのは意味がわからんな。
実メモリが多いマシンには不利な条件だ。
# 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デフォルトの名無しさん
NGNGpopenの引数はひとつなの?
0066デフォルトの名無しさん
NGNG0067デフォルトの名無しさん
NGNGサーバPCからキー入力をして無線LANを使ってクライアントPCに文字信号を送信したいと思っています。
どのようにしたらリアルタイムキー入力ができるのか教えてください。
ちなみにsysytem("stty raw");関数を使ったらキー入力待ち状態になりリアルタイムデータ受信が止まってしまいました。
OSはlinuxです。よろしく御願い致します。
0068デフォルトの名無しさん
NGNGRealtimeのOSに変えたらどうだ?
0069デフォルトの名無しさん
NGNG・O_NONBLOCKでopenする
・poll/selectでデータがある事を確認する
・スレッドで入力待ち
>>68
単純に変えても同じ事になるぞ。
0070デフォルトの名無しさん
NGNG数ミリsecでリアルタイム処理できないOSだと指摘してるだけでしょ。
受信処理だけでたまたまリアルタイム処理できていたとしても
送信処理が入ることでダメになる可能性もある。
0071デフォルトの名無しさん
NGNGたとえば ls とうって、その結果の標準出力を受け取る方法。
自分は今のところ、泥臭い方法で
system( "ls > ./tmp" ); みたいにテンポラリに吐き出して
それをあとから参照する方法使ってるけど、なんだかねぇーという
感じで
0074デフォルトの名無しさん
NGNG>>23,24が読めないんですね。
0076デフォルトの名無しさん
NGNG0077デフォルトの名無しさん
NGNG結局URLにあるioctlのやりかたって
どうやるの??
0078デフォルトの名無しさん
NGNG脳内
0079age
NGNGLinux gcc で実行ファイル(自分自身)があるディレクトリを
知りたいんですが、どうやるんでしょうか。
0080デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNGprocfsが有効なら、/proc/self/exeをreadlink(2)してdirname(3)。
008277
NGNGおそらく端末i/oじゃなくて
ファイルi/oだから違うでしょ
システムコールに関する本を読むと
カーネルバッファリングって記述はあって
やりたいことはわかるけど、
どうやるかは不明。
0084デフォルトの名無しさん
NGNGfd = open("/dev/hdc1", O_RDWR);
…
fdatasync(fd);
これで/dev/hdc1の全てのキャッシュされたファイルについて同期がとれますか?
0085デフォルトの名無しさん
NGNGいい例、解説サイトはありますか?
0086デフォルトの名無しさん
NGNG0087デフォルトの名無しさん
NGNG0088デフォルトの名無しさん
NGNGファイルつーかファイルの中身な。ファイルの属性の同期はとれない。
実装されてないシステムもある。(関数は呼び出せるのに:-)
009085
NGNGファイル名に空白が入っていた時の対処とかいろいろ行き詰まってしまって・・・
0091デフォルトの名無しさん
NGNG0092デフォルトの名無しさん
NGNG使うでしょ。これなら、どの UNIX でも通用する。
linux も kernel 2.4 以降なら、raw コマンドを使って raw デバイスを
割り当てられるよ。
もっとも、パーティションを直に読み書きすることになるから、書き込み
書き込みに関しては、未使用のパーティションがないとテストできないが。
あと、xfs なら O_DIRECT も使えるかもしれん。
009384
NGNG私に対するレスですよね?
バッファリングされたくないというのではなくて、
任意時点で同期をとる意図をもった他人のコードにああいう記述があったので、
質問してみたわけです。
とはいえ、>>92のレスは私にとっての示唆に富んでいました。
ありがとうございます。
0094質問age
NGNGLinux g++ で pthread を使ってみたいんですが、
thread の実装(C++化?)ってどうやってます?
すでにあったらメンゴです。
0095デフォルトの名無しさん
NGNG0096デフォルトの名無しさん
NGNG#include <boost/thread.hpp>
0098デフォルトの名無しさん
NGNGちょっと昔のMSDOSを思い出して感動した!
0099デフォルトの名無しさん
NGNGまぁ大抵intになると思うが。
#BSD/OSはillegal instruction使ってたかも。
0100デフォルトの名無しさん
NGNGWindowsもFreeBSDもINT呼び出しだよ。引数の扱いがLinuxと違うけど。
Windows NT/2000/XPがINT 2EHで、FreeBSDがLinuxと同じINT 80H。
SolarisやUnixwareはコールゲート。
0101デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています