2 :
デフォルトの名無しさん:2008/03/19(水) 11:09:35
タイムゾーンって取得できますか?
実行ファイルのディレクトリとれますか?
gccで、ディレクトリパスのデリミタは環境変数になっていますか?
>>4 > 実行ファイルのディレクトリとれますか?
Linuxだったらreadlink("/proc/self/exe", ...)で。一般的な方法はない。
> gccで、ディレクトリパスのデリミタは環境変数になっていますか?
C/C++でのことなら、ないと思う。UNIXなら固定でいいんじゃない?
6 :
4:2008/03/19(水) 13:58:41
thx!
>実行ファイルのディレクトリ
>>Linuxだったらreadlink("/proc/self/exe", ...)で。
BSDだとどうなりますk?
>gccで、ディレクトリパスのデリミタは環境変数
>>C/C++でのことなら、ないと思う
ifdef + define するしかないですか。
でもそういった、ヘッダーファイルとか、オプソでありそうな。。。
7 :
4:2008/03/19(水) 15:33:33
>>Linuxだったらreadlink("/proc/self/exe", ...)で。
POSIX準拠だったので使えることは分かりましたが、使い方が分かりません。
先頭の引数は何なのか?_?
9 :
4:2008/03/19(水) 16:01:20
>>8 それ、良いリンクですね。
Mac OS X だと、"/proc/self/exe"ではうまくいきませんね。
argv[0]を見ようとしたらwxWidgetsでmainが見れなかったorz
10 :
4:2008/03/19(水) 16:11:38
wxApp:argv[0]で、実行ファイルのフルパス取れました。
これで余韻だろうか。
調べれば資料がありそうなことはきちんと資料を調べた方がいいよ。
プログラミングは迷路を突破するみたいに手探りでやるものじゃない。
そうやって書かれたプログラムを他の環境でも問題なく動くと考えるのは、
ある迷路を突破した道順が他の迷路でも通用すると期待するくらい無謀。
↑
ウゼー
そして
>>12は小一時間怒りを噛みしめた後、
自演を思いつきMac板へ向かったのである。
14 :
デフォルトの名無しさん:2008/03/23(日) 17:13:16
OSが32bit版でも64bit版でも実行結果って変わらないの?
64bit版を使う利点はメモリが4GB以上使えることくらい??
メモリがというよりアドレス空間が。
>>13 ワラタw
Mac 板で似た質問を見たと思ったら、ここ由来だったのね。
>>14 LP64 環境だと仮定して、、、
long が 64bit になっても良い様に書いていれば結果は変わらない
x86 だと仮定して、、、
レジスタが増えるから多くの場合で 64bit の方が速いという利点もある
勿論デメリットもある
17 :
デフォルトの名無しさん:2008/03/27(木) 09:30:24
AnsiToUnicode(UTF-8)/UnicodeToAnsi
みたいな関数はありますか?
>>17 POSIX的には無いかと。
ICUでも使うといいよ。
19 :
17:2008/03/27(木) 09:59:45
>>18 へぇ〜、こんな複数OSで使えるものがあったんだ。
知らないと目茶目茶な実装するとこだった。
ICUって簡単に使えますかぁ?...
あなたの頭では無理です。集中治療が必要です。
エンコーディング変換ぐらいなら簡単よ。
23 :
20:2008/03/28(金) 08:46:28
ucnv_frommUChars ucnv_toUChars でぐぐってみるのだ。
>UConverter *pConverter = ucnv_open("EUC-JP", &error);
ucnv_openの引数で、"windows-31j"、"shift_jis"、"EUC-JP"といった文字が指定されていますが、
この一覧はどこにあるのでしょう?
ソース全文検索かけても出てきませんが???
27 :
26:2008/03/28(金) 17:12:05
ついでに、iconv_openの引数の文字列一覧も教えて下さいorz
iconv -l
29 :
26:2008/03/28(金) 17:55:40
>>28 そのコマンド打ってみて分りましたが、
OSが文字コードに関する情報(のファイル)を持っていて、
それによって変換可能な文字コードかどうか決まるわけですね。
BSD だとして、GUIアプリが受け取る文字コードが何か取得する方法を教えてください。
環境変数なのかなぁ?
>>29 nl_langinfo(CODESET) だったような、たしか
31 :
26:2008/03/28(金) 18:19:08
33 :
デフォルトの名無しさん:2008/04/06(日) 16:42:26
UNIXで2D(スプライトのようなもの)を高速描画しようとしたら何を使えばよいのでしょうか?
SDL
言語はC/C++を考えております.
HDDの使用量や全容量を取得したいのですがどのようにすればよいのでしょうか?
(dfみたいな機能があればなおさらいいです.)
dfのソースを見るか、systemでdfを実行して結果を取得
>>36 いいこと教えてあげよう。OSにもよるだろうが、
man dfするとSEE ALSOに関連システムコールが書いてあったりもするもんだ。
そりゃ残念だったな
NetBSD, Solaris, FreeBSD, HP-UX, Darwin は書いてあった
全部同じsystem call?
なんていう奴?
statfs(2), fstatfs(2)
43 :
デフォルトの名無しさん:2008/04/10(木) 17:45:11
doubleは64ビットですか?
printf("%d\n",sizeof(double)) の結果を貼っていただければ答えられます(^-^)
いまどき浮動小数点形式がIEEE 754じゃない環境は
まず存在しないから、64bitでおk。
が、そのうち時代は変わるかも知れない。
そのときそのプログラムが使われ続けていないとも限らない、というのがY2Kの教訓。
charは8bitと仮定しちゃダメだよね
CHAR_BIT を使うのは常識たい。
>>47 char が16bitのものは今でもある。
それって、wchar、じゃなくて?
>>50 そう。CHAR_BIT = 16ということ。
CHAR_BIT が 9 はよく聞くね
53 :
デフォルトの名無しさん:2008/04/13(日) 06:53:13
pid_t型をprintfで表示したいのですが、どのようにすればよいのでしょうか?
%u
55 :
デフォルトの名無しさん:2008/04/13(日) 11:16:21
UNIX プログラミングからは外れているかもしれませんが,
一番近そうな質問スレッドなので質問させていただきます.
共有ライブラリの動的リンクについての質問です,
CentOS 5.1 でシステム標準の GCC 4.1.1 とは別に,GCC 4.2.3, 4.3.0 を /usr/local 以下にインストールしています.
gcc-4.2.3 のライブラリは /usr/local/lib/gcc-4.2.3 に,
gcc-4.3.0 のライブラリは /usr/local/lib/gcc-4.3.0 にインストールしています.
以下のように GCC 4.3.0 でライブラリを指定してコンパイルします.
gcc43 -Wall -O2 -c -fopenmp omp-test.c -o omp-test.o
gcc43 -Wall -O2 -lgomp omp-test.o -o omp-test.parallel
出来上がった実行バイナリ omp-test.parallel を ldd すると,
linux-gate.so.1 => (0x00110000)
libgomp.so.1 => /usr/local/lib/gcc-4.2.3/libgomp.so.1 (0x00111000)
libc.so.6 => /lib/libc.so.6 (0x00565000)
librt.so.1 => /lib/librt.so.1 (0x00df3000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00702000)
/lib/ld-linux.so.2 (0x00546000)
と,GCC 4.2.3 のライブラリ依存となってしまいます.
同名のライブラリがある場合,
ldconfig で認識されている共有ライブラリで,一番上にあるものが使用されているようです.
コンパイル時に GCC のバージョンに合わせてライブラリを指定して,
実行時に GCC のバージョンに合ったライブラリをロードする方法をご存知の方はいませんか?
$ ldconfig -p|grep libgomp
libgomp.so.1 (libc6) => /usr/local/lib/gcc-4.2.3/libgomp.so.1
libgomp.so.1 (libc6) => /usr/local/lib/gcc-4.3.0/libgomp.so.1
libgomp.so.1 (libc6) => /usr/lib/libgomp.so.1
libgomp.so (libc6) => /usr/local/lib/gcc-4.2.3/libgomp.so
libgomp.so (libc6) => /usr/local/lib/gcc-4.3.0/libgomp.so
-Lで優先したいライブラリのパス指定したら?
最悪libgomp.aをstatic linkしてしまえばいい。
ただ結構コンパイラのバージョン依存なのでそこんとこは注意。
57 :
55:2008/04/13(日) 13:15:26
>>55 を書いたときには,コンパイル時に
実行バイナリに,ロードするライブラリのパスが記録されると勘違いしていたのですが,
実際には,コンパイル時には "libgomp.so.1" という情報が記録されるだけのようです.
実行時にロードするライブラリのパスは,
実行時に ldconfig で認識されているライブラリの中から上から順に同名の物を探して決定しているようです.
>>56 どうもありがとうございます.
コンパイラに合うバージョンの libgomp.a を静的にリンクするのが
一番安全そうなので,そうすることにします.
>>57の前半部分
-R(コンパイル時)や
LD_LIBRARY_PATH環境変数(実行時)で指定できる。
59 :
55:2008/04/14(月) 08:15:00
>>58 どうもありがとうございます.
おかげで動的にリンクする場合も安全に実行できるようになりました.
60 :
デフォルトの名無しさん:2008/04/14(月) 09:47:57
スタティックリンクライブラリを使いたいのですが、どうすればいいですか
make作業にコンパイルとリンクがあるが、
リンク作業で直接指定してリンクする。
62 :
デフォルトの名無しさん:2008/04/14(月) 23:12:11
Cシェルで質問
あるディレクトリのファイルを検索して、該当するファイルの先頭4桁を使って、
テキストからその4桁に対応する文字列を持ってきたいとする。
↓この"key"に検索したいファイル名の文字列を入れる。
set READKEY = `ls -l | grep key | awk '{print $9}' | cut -c1-4`
テキストから文字列を持ってくるところまではできたんだけど、
その文字列を一行づつ編集する方法がわからない、おしえて!
↓持ってきた文字列
aaaa
cccc
bbbb
一行づつ表示させるためにheadコマンドとtailコマンドを使った。
ループと、headコマンドで行数をインクリメントするのかなと。
ただ、それだとループの上限で最大行数の数を使う事になるんだろうけど、
行数を出す方法もわからないんだ
おとなしくperlでもつかっとけ。
64 :
62:2008/04/14(月) 23:25:40
>>63 >>62はパールだとできて、Cシェルだとできないもの?
シェルってなんでもできそうな印象だったんだけどなー
最近初めて面白くなってきたよ
なぜ底辺はcshが好きなんだろう?
>>62 shで。
ls -l | grep key | awk '{print $9}' | cut -c1-4 | while read l; do
# $lに対してやりたいこと
done
67 :
62:2008/04/15(火) 00:16:37
>>65 cshちゃんを悪く言わないで下さい
>>66 Bシェル?そんな簡単なのか
試してみる。ありがとー!
特に宗教的理由が無いなら shell script は csh より bsh で組みなさい
ところで、
Csh Programming Considered Harmful
って今はもうみえないんだっけ?
ググったら一発だった
71 :
デフォルトの名無しさん:2008/04/16(水) 09:39:29
unixの考え方の1つとしてよく言われる、「1つのことをうまくやれ」というやつについて。
具体的に1つ(1機能)ってのはどの程度のものなんでしょうか。
例えば今のlsって、詳細情報出したり、変更日付順にソートできたり、全然単機能
じゃないと思うんですけど。原則と現実のギャップというやつですか?
>>71 > unixの考え方の1つとしてよく言われる、「1つのことをうまくやれ」というやつについて。
ファイルの内容をいじれるわけではないし, ディレクトリに対して操作ができる
わけでもないでしょ?
ディレクトリの内容をリスト表示するって事に特化していて, そのことに関して
だけはとてもうまくやっていると思うのだけど...
例えばMS-DOSのDIRと比べてみると、
「〜バイトのファイルがあります」
「〜バイトが使用可能です」
とか勝手に付け加えたりしないのがUnix流。
もっとも、出力先が端末だったら複数カラムで表示したりする、とか
そういう機能は良くない、とみる向きもあるけどね。
("Program Design in the UNIX System Environment.")
>>71 更新日時順でソートなんてlsにやらせなかったら何使ってやるのさ。
>>73 ls -lもtotal出すよなあ、あれ出力使う時に余分。
tail +2しないといけない。
ところで
>>62 の ls -l | ... | awk って、
ls -1 じゃダメなん?
>>71 UNIXの思想は基本的にミニマリズムでは無いと思う
djb tools はUNIX的なのか?
Perl は UNIXで広く受け入れられたが、これは異端なのか?
UNIXのプログラムは何にせよメールが読めるまでに肥大化する
メールの読めるlsはどこにありますか?
逆に考えるんだ。
lsもcdもEmacsの中にあるんだ、と。
vi使いが来るぞー!
ls -tr ~/Mail/inbox/ | tail -1 | xargs view
MHですやん
>>77 小さいものは美しい、ってのはミニマリズムじゃないの?
>>78 それ元ネタ確かMITで開発されてるプログラムは、だった希瓦斯
86 :
高野光弘問題:2008/05/20(火) 21:40:45
Takano32,TAKANO Mitsuhiroこと高野光弘(日立製作所社員、日本UNIXユーザ会幹事)が
『32nd Diary』で「真性キチガイ」と障害者差別発言。さらに、2007年4月の入社後は、日立の機密も漏洩。
公益のため告発するも改善されないので、日立製作所に通報。
回答
「高野光弘という社員は存在する(本人は「嘘」と否定していた)
現在、管轄する部署が調査中
障害者差別発言に関しては許されるものではない」
また、漫画家鈴木健也による教祖様のようなひげの似顔絵を湮滅していたことも発覚。
これからどうすべきか、自分の頭で考えてくれることを期待します。
http://taka.no32.tk/diary/
87 :
デフォルトの名無しさん:2008/05/27(火) 15:33:16
>struct timeval tv;
の値って、
doubleの変数に入出力できたりしますか?
はい
↑
おめ、今頃それ貼ってもおせーよ!
プゲラッチョwww
91 :
高野光弘問題:2008/06/11(水) 23:18:10
takano32,TAKANO Mitsuhiroこと高野光弘(日立製作所社員、日本UNIXユーザ会幹事)が、
自身の『32nd diary』で公然と日立の機密を開示し、障害者差別発言をしている問題。
1981年11月12日 千葉県のディズニーランドのそばで誕生
2001年4月1日 千葉大学に入学
2005年4月1日 千葉大学大学院へ進学、日本UNIXユーザ会に入会
2007年4月1日 日立製作所に入社、神奈川県秦野市の寮へ
2007年8月22日 「ついに職場で人が倒れた」と公表
2007年11月13日 「情報漏えい」を言う上司に「死んだほうがいいよ」と暴言
2007年12月28日 「社内システムクソうんこ」と発言し、仕組みも暴露
2008年5月23日 機密漏洩問題について一応の謝罪
2008年5月26日 「給料泥棒とかうんぬん言われた」と謝罪を忘れて告白
2008年5月27日 「心バキバキ川田くん」と前日の発言者の名前を公言
2008年5月31日 「キチガイ」と日立のユーザーに障害者差別発言を連発
2006年10月27日(日立製作所に入社前に忠告されたこと)
「日記やコメントの投稿日時から勤務時間に業務外のことをしていることが判明」は
某社の某親会社が 2ch で祭られたように、NG です。
6月も勤務時間中に更新し続ける高野光弘君の『32nd diary』にツッコミをどうぞ
forkして子プロセスを作ってるんですが、
親プロセスから子プロセスの生存確認する方法ってありますか?
kill(2)しろ。
signal番号0で。
94 :
92:2008/06/14(土) 13:56:40
95 :
92:2008/06/14(土) 13:57:10
96 :
92:2008/06/14(土) 13:58:44
>>93 ありがとうございます。
なんとなくやり方がわかった気がします。
SIGCLDをトラップしろ
>>97ある時に知る方法じゃなくて、
ずっと管理しておく方法。
>>98 俺もそう思ったが、別に97でもいいんじゃないのかな。
ある時にある子プロセスが生きてるか知ろうとするプログラムならば
当然pidを含む子プロセスの情報を保持しているわけで。
100 :
98:2008/06/15(日) 16:36:19
悪いと言っているのではなく解説したまで。
質問するような人がすぐに理解できるとは限らないので。
質問です。書籍『Understanding Unix/Linux Programming』の49ページ、
utmp構造体のutmpメンバ(time_t型)を受け取り、整形して表示する関数なんですが、
void showtime(long timeval)
{
char *cp;
cp = ctime(&timeval);
printf("%12.12s", cp+4);
}
このコードの書き手(著者)が、仮引数の型をtime_tでなくlongにした意図としては
どのようなものが考えられるでしょうか?
自分にはtime_tの実際の型に依存した良くないコーディングに見えますが、
何か特別な理由があるのではと思って質問しました。よろしくお願いします。
102 :
高野光弘事件:2008/06/18(水) 01:14:04
takano32,TAKANO Mitsuhiroこと高野光弘
(26歳、日立製作所エンタープライズサーバ事業部(秦野地区)社員、日本UNIXユーザ会幹事)が
自身の『32nd diary』で公然と日立の機密を開示し、障害者差別発言をしている問題が、とうとう事件になった模様。
2chで祭られて、さらに自分から燃料投下するなんて。誰か彼の凶行を止めてくれることを願って張ります。
2008-6-14 予告 心バキバキ川田くんを殺します。
2008-6-15 日本の警察をみた。いつも行動力がないと言われている日本の警察ですが、今日は変な行動力をみた。
理不尽で半端な行動力なので、もう少しガイドラインを固めないとダメだと思った
(現場の人は悪くないので、上がきちんとしろ、という意味)。 予告.in 予告.out 事情を話し、くだんの書き込み元IPアドレスなどを回答した。
理不尽なのは、あなたが公然と書いた「殺します」、「死んだほうがいいよ」、「クソ」、「うんこ」、「バカ」、「キチガイ」という発言と、
公共の場で自分から個人情報と機密を公開しているのに、文句を言うということなのではないでしょうか?
1946年12月19日生まれのお母さん、釣りが趣味のお父さん、二人のお姉さん、高校の同級生で漫画家の鈴木健也さん、どうか彼を止めてください。
日立グループの方、日本UNIXユーザ会の方、公益のためにもお願いします。
誰か『32nd diary』での高野光弘君の凶行を止めてください。
103 :
101:2008/06/21(土) 02:11:33
>>101 > utmp構造体のutmpメンバ(time_t型)
utmp構造体のut_timeメンバ(time_t型)の間違いでした。
あれこれ考えた結果、time_tがdoubleとして定義されている可能性もなくはないので
(K&Rやmanには算術型としか記されてない)
void showtime(time_t timeval)
{
printf("%12.12s", ctime(&timeval) + 4);
}
のようにtime_tはtime_tのままでctimeに渡したほうがいいという結論に落ち着きました。
しばらくROMってきます。失礼しました。
105 :
101:2008/06/24(火) 23:23:59
レスありがとうございます。
>>101-102とか自分で書いていて理屈っぽいなとは思ってました。
今後はそのあたりの現実や伝統と折り合いをつけてコードを書くことにします。
106 :
101:2008/06/24(火) 23:25:47
訂正、102は書いてません。
>>101, 103です
スレ汚してすいませんでした。ROMに戻ります orz
便乗なのですが
time_t hoge = time(NULL);
とするのと
time_t hoge;
time(&hoge);
するのと
どちらが良いのでしょう?
どっちでもいいと思う。
しかし、time()は何でこんな妙な仕様なんだろ。
#include <time.h>
int main(int ac, char **av){
time_t hoge;
time_t fuga;
time(&hoge);
fuga = time(NULL);
printf("%d, %d\n", hoge, fuga);
return 0;
}
どっちでもいいぜ
昔は time_t hoge = time(NULL); が出来なかったんだと思う。
主にポインタサイズが大きくなるので、
・メモリ消費が多くなる
・メモリアクセスにかかる時間が増える
そんなもんクロックでどうにでもなるっしょ
32で動かしてたら、その機能は生かせなくて速度が上がらないんだし
>>112 後半はその通りなんだが...
メモリーバンド幅ってのは、その時旬のメモリに依存する
データ幅広げない限り内部が高速になっても, どこかで
メモリに足を引っ張られる
そもそも x86 系ってクロック上げられなくなったから
マルチコアに走ったんじゃなかったっけ?
まあ、その程度のデメリットしかないわけだ。
命令のクロック数とか気にする人には、それなりに影響があると思うけどね。
64bitレジスタ使うと(REXプレフィックスつけると)Intelのチップでは遅くなるって言うし。
>>111 >主にポインタサイズが大きくなるので、
でも、普通のプログラムでポインタ変数の占める割合ってどのくらい?
普通は作業領域として割当てられる非ポインタ用の領域の方がだいぶ大きいような
気がするんだけど。
実体は 1 個だけど, 各種参照方法が必要になって,
<実体を指してるポインタの数> * <ポインタサイズ>
の方が,
<実体の個数> * <実体のサイズ>
より大きい.
なんて事もあった
ELFフォーマットに関して勉強しているのですが、
実行ファイルの中で、ある関数の実行コードに対応するバイト範囲を調べるのは
どうしたらいいでしょうか?
readelfコマンドを試してみましたが、どうもメモリ上でのアドレスは表示してくれるみたい
ですが、ファイル上でのバイト位置情報はないように見えました。
gcc -g
objdump -S
>>119 レスどうもです。ただ、やはりこの場合も エントリが 8048xxxx となって、
これは実行時のアドレスだと思うんですが....
あ、すっかり書き忘れていましたが Linux (ubuntu)/i386 と NetBSD/i386 を使っています。
もしかして別のプラットフォームだとファイル上のバイト位置で表示されたりします?
話は変わりますが、プログラムの開始アドレスが0x8048000あたりになってるわけですが、
これってどうやって決まってるんですかね? 何故この数字なのか、これより前の方の
アドレスは何かに使ったりするのか、etc...
readelfのソースを読んで、自分でツールを作ればいいじゃん。
>>121 適当なツールが本当にない、となればそうしますが...
>>122 結局、ヘッダー情報でのセクションのオフセットとディスアセンブルされた
アドレスの対比って感じですかね。
http://www.linux.or.jp/JM/html/LDP_man-pages/man7/pipe.7.html 「POSIX.1-2001 では、 PIPE_BUF バイト以下の write(2) は atomic に行われること、
つまりパイプへの出力データの書き込みは連続したシーケンスとして行われることを必須としている (MUST)。」
bashなどのシェルでプログラムを '|' でつないで起動したときって
標準出力でもPIPE_BUFより大きいと、atomicに行われない可能性があるんですか?
それとも、プログラム内で pipe(2)システムコールで作成したパイプにのみ当てはまることですか?
write(2)の仕様だから、常に分割されることがある。
そこの説明は、逆に「atomicであるとが保証される」ケースの説明。
getoptを使ってると古いって言われたんですけど、他に何かあるんですかね?
何があるのか聞こうと思ったのですが、違う部署の人なので探せなくって・・。
俺もきみとは違う部署だが答えてみるよ。
CならGNU getoptでいいと思うよ。
GPLじゃないのか >GNU getopt
getoptはLGPLだから別に問題は無いんじゃね。
こんなふうにしてFUDがひろまっていくわけですね、わかります。
質問です
ttp://kzk9.net/column/unixfastestfilecopy.html こちらのページの実装(2)にmmap()でのファイルコピーの紹介があるのですが
>int i = 0;
>assert(lseek(to, size - sizeof(int), 0L) >= 0);
>assert(write(to, (&i), sizeof(int)) == sizeof(int));
このlseek()とwrite()はコピー先のファイルに対してどういう処理をしているのでしょうか?
こりゃ糞コードだな
見ないほうがいい
禿同
三行見ただけでも、ページ内間違いだらけに違いないことがわかる。
sparse fileでもつくってるの?
ファイルポインタを移動して、そこに何か書いてる。
mmapのためのファイルサイズの確保。
assertの中で?
ベンチマークみたいだから、失敗したら死んで良いんじゃない?
だからといって、
動作が似てるからって意味の全く異なるものを使うというのはおかしいな。
assertの式ってのはNDEBUG定義したら消滅していいコードだし。
ステータスをチェックしてエラー終了させたいなら、そういうマクロを自分で定義するべきじゃね。
#define CHECK(exp) (void)((exp) || (fprintf(stderr, "failed with condition %s at line %d\n", #exp, __LINE__),abort(),1))
とか。
使い捨てプログラムでそこまで凝らんでも。
俺は使い捨てだったらエラーチェック自体やらんけどな。
で、忘れたころに引っ張りだしてきて動かなくて悩むと。
assert厨脂肪ワロス
使い捨てにエラー処理なんて組み込むのか?
使い捨ての場合、ある前提でコードを書くんだからその前提外は無視していいでしょ
まあその辺は趣味の問題になるんじゃないかい。
深入りするとmalloc/free問題みたいになりそうな気がする。
>>143 > malloc/free問題
って何?
使い捨てのプログラムでfreeして終われとか、そんな話?
それだったら、ファイルのクローズすらしないが、俺は…
145 :
124:2008/07/20(日) 14:22:23
>>125 あらほんとだ、何を勘違いしてたんだろう
どうも
標準入力から1行ずつ読み込んで、処理をするプログラムを作っているのですが
標準入力もpollで調べています。
この場合、やはり1行読み取るには、C++やCの標準ライブラリではなく、
readを使って自力で1行読み取りを実装しなければならないですよね?
どうして?
標準ライブラリにnonblockingな行入力ルーチンがないからでしょそりゃ。
> 標準入力もpollで調べています。
に必然性があると仮定してだけど。
>>148 select/poll の後で fread とかだめだっけ?
posix 準拠なら getc_unlocked() とかなかったっけ?
>>149 >>146はstdioすっとばしてシステムコールを使わないとダメという主張だったのか。
C/C++にnonblockingな「行入力」ルーチンがないから自作という話だと思っていたよ。
それなら理由となるのはstdioのバッファに入っているがユーザプログラムはまだ
読んでいないデータの有無くらいだろうけど、set(v)bufすればいい話だろうし。
読み違えていたようですんまそん。
それならってのはstdioすっとばして……という話なら、ということで。
内容から判断つくとは思いますが、読みにくくてすいません。
>>149 それだとpollで調べたら空だけど、stdioの入力バッファにデータが存在する場合があるのでダメ
>>146 バッファされてるかどうかなんて、stdioの構造体の中のメンバ見るだけで実現できるんだけど、
ライブラリ依存なのでconfigureとかで各OS各ライブラリで場合分けするか、自前でstdioモドキを実装するしかないね。
fsense(stdin) みたいな関数があればいいんだけど。
もしくはfunopenを使ってreadfnをSTDINのnonblocking readにしちゃうとか、
そもそも標準入力をRAW MODEにしちゃうとかかね。
>>152 funopenはBSD系以外でも使えるの?
stdioをnoblockで使うのは、rubyの連中ががんばってたけど
結局1.9では諦めたんじゃなかったっけ?
assertの中に動作が必要なコードを入れてるのは久しぶりに見た
研究メインだとこうなっちゃうのかな
>>153 あれ…ほんとだ。linuxとかには無いのか。知らなかった。
戻り値チェックしなくて済むから楽だね
glibcはunlocked_stdio(3)というのがあるが。
#define _BSD_SOURCE
してるからBSDにもあるんじゃないの?
ただ
>>146の要望には、
setvbufによる行バッファリングとfileno(3)+poll(2)で十分だと思う。
勘違いしてるのかしらんが、unlockとunblockはぜんぜん違うだろ
質問す。
UNIXのCでCVS+ant的な事をしたいんだけど、できる?
antじゃない方が良い?
CVS と ant で、C 言語のプロジェクトを管理したい、のか?
いんや、C言語を CVS で管理したいんだけど、
ant 使った事ないから他に何か無いかな、と。
> ant 使った事ないから他に何か無いかな、と。
なんで使ったことないものが候補になるんだよ。
CVS+antって、具体的に何がしたいの?
えーと、javaだと CVS+ant という情報がたくさんあるんだけど、
C言語だと、CVS と何を組み合わせると良いのでしょうか。
そもそもantで何が出来るか、あんまりわかってないのですが。。。
しらべたら?
ソースを管理するだけならantも何も要らないよ
CVSだけでおk
CVSでソース管理は良いとして、やりたい事としては、
UNIX上に最新ソース取得して、ビルドして、配布して、、、
というのを、なるべく自動化したいなと。
UNIX側に、そういうシェルスクリプト用意すれば良いって話?なのかな。
CSVで拾ってビルドしてFTPディレクトリにでもコピーなら、数行のスクリプトでできるだろ
なにがantなのかわからん
まー、、、それで行くことにします。
antなら色々できそうな雰囲気あったので使ってみようと思ったんだけど、
今回は妥協の方向で。。。
とりあえずantが何か調べてみろよ
makeに決まっておろうが。
antって面白そうだな。。。時間ないけど。。。
ant使うとどの辺が楽になるのか、どなたかプレゼンしてくれまいか。
使う理由もない(利点もわかってない)やつが、使おうと思う理由って何だろう。
時間がないといっときながら2chみてるし
わけわかめ
>>172 Javaの開発で使うときは楽ちんだけど、そうでなければ別に〜、という感じだよ。
makeでじゅうぶんですよ。
utmpって誰の管理下で動いてるの
こいつの信用度はどのぐらい?
login, xdm, sshdなど各自書き込み
まあまあ信用してもいい
open(2)ってなんで二つあるんですかね?
一つしかないです。
open(char *, int, ...); で、
...に許されるのはmode_t一つです。
179 :
デフォルトの名無しさん:2008/08/06(水) 06:49:40
ifstreamを使ってテキストファイルを読み込んでいます。
UNIXの改行コードLFの時はうまく読み込めるのですが、
それ以外の時は読み込みに失敗します。
改行コードにかかわらず、読み込めるようなコードはどのように書けばよいのでしょうか?
>>179 「失敗する」って具体的に何が起こるの?
よくわからんからコード晒して欲しいな。
さしずめgetlineあたりが改行コード自動認識してくれねーよとか駄々こねてるのかね
まあCRでハマっているのは確実だろうな。
今でもMACのファイルってCRが改行なんだっけ
そう設定できるアプリもあるけど、
今はLFオンリーなのが多い。
何故CR + LFオンリーにしないのかは謎。
execl系ってなんで
execl("bin/cat", "cat", "foo.txt", NULL);
みたいに渡さないとダメなんですか?
第二引数のcatって冗長だと思うんですけど。
第一引数でcatって分かるじゃないですか。
186 :
デフォルトの名無しさん:2008/08/10(日) 16:03:08
UNIXでGUIアプリを作るとしたら、どの言語を選択すればいいですか?
もっとも簡単なのを教えてください
Windowsなら、Visual BasicとかDelphiがあるので手軽なのですが...
>>185 つ execl("/bin/sh", "-", NULL)
>>186 GambasっていうBasic開発環境がある。
GUIポトペタもできて、使い勝手はVBに近い。
ものの試しにいじっただけなので、
どこまでのことが出来るかは知らないし
情報も少ないから初心者には導入が難しそう。
あとはWideStudioかな。
いろんな言語に対応してて、ハローワールド程度の
GUIならウィザードで作ってくれる。
それ以上のことがどこまで出来るかはしらない。
KDevelopに関する質問はどこのスレですればいい?
C/C++プロジェクトを新規作成したときに
*.cppファイルや*.hファイルのテンプレートを入力できるんだが、
そこで使えるマクロ($AUTHORとか)を教えてほしいのだが。
190 :
189:2008/08/11(月) 12:16:13
日本語がおかしいのは仕様です
端末に表示されている文字の色を部分的に変えたり,背景の色を変えたりしたい.
ncursesライブラリを使えばできるらしいのだけれども,やりたいことは,
topコマンドのようなものを作りたいだけなので,ncursesを持ち出すまでも
ないと思うのですが,参考資料等ないですか?
printfで制御コマンド直うちとかのレベルでOKです.
Linuxで書いてるのでLinuxでお願いします.
使ってる端末によって制御シーケンスが違うので
端末の資料をさがすべき
>>191 ウチの linux の top は libncurses.so を link してるように見えるが
curses使えば簡単に出来るのに、馬鹿なの?
>>191 terminfo/termcapのライブラリ使えば?
topレベルなら簡単に実装できる。
cursesなら整形もやってくれるのでさらに楽だが。
vt100とかxtermのシーケンスでいいんじゃないの?
> terminfo/termcapのライブラリ
で簡単に取得できる。
198 :
デフォルトの名無しさん:2008/10/26(日) 11:54:55
cでputenvかsetenv使って環境変数設定してるんだけど、
実行後シェルでenv打っても結果が反映されないです。
プロセスが消えても設定残す方法ってあるんですか?
ちなみにタイムゾーンの設定です。
199 :
デフォルトの名無しさん:2008/10/26(日) 12:44:07
>>198 system("setx TZ JST-9");
200 :
デフォルトの名無しさん:2008/10/26(日) 13:14:25
たぶんない。
環境変数ってのはプロセスのものであって、
システムグローバルなものじゃないから無理
202 :
ヤマ:2008/10/26(日) 18:06:52
初めて2ちゃんねる利用しますヤマです。
どうぞお見知りおきを・・・
さっそく質問ですが、よく聞く『UNIX』『Linux』って呼ばれているものは
基本的に何に利用するものなのですか?
204 :
デフォルトの名無しさん:2008/11/03(月) 21:36:58
質問です。
readdir_r()とかのシステムコール呼んだとき、
帰ってくるファイル名の文字エンコードって、どうやったらわかりますでしょうか?
ファイル名に文字コードなどない。UNIXにおけるファイル名は
'\0'と'/'以外からなる任意のバイト列。
そんなだからgrepもできないんですよ
>>204 ぶっちゃけUNIXによる。
またファイルシステムやmount時のoptionでも違う。
たとえばMac OS X + HFS+だとUTF-8でNFDになってる。
しかしUFSやNFS上だと、NFDじゃないファイルも作れる。
最近はUTF-8が多いけど、NFDになってるのはMac OS Xくらい。
それからLinuxはmount時にiocharsetオプションで、
内部コードから任期の文字コードにファイル名変換できる。
POSIX的にはどうするのが正しいんだろうね。
ファイル名を現在のロケールの文字コードで表示したい、というときに
どうするべきなのか。
自分で判定するしかない
nkfのソースでも読め
>>208 POSIXには規定がないので、
まず自分で必要なものだけ実装したら?
通常UTF-8, EUC_Japanを想定しておけばいいと思う。
ただMac OS XはNFDされてるし、
SDカードをmountするとShift_JISのままのケースが結構あるようだ。
211 :
204:2008/11/05(水) 00:52:27
回答どうもです。
結構混沌としてんですね。
UTF-8化してないCygwinもマルチバイトWinAPIと同じやつ(≒Shift_JIS)返してくるし…。
Latin-1の連中もいるし…(←これ重要)。
POSIXの規格に沿った優等生的方法じゃなくてもいいんで、
これで判断すれば大抵うまくいく、って方法があれば御教示願います。
(残りも誤検出ではなく、エラーで扱える方法ならなお良し。)
日本語ファイルが存在する保証もないので、実際のファイル名から検出、
は残念ながら無しの方向で。
あと、環境変数はLANG=Cです。むむむ…。
213 :
デフォルトの名無しさん:2008/11/06(木) 07:01:23
こっちのネタと思われるので↓
557 :名無しさん@お腹いっぱい。:2008/11/05(水) 03:57:38
HP-UX (11i)にHULFT 6を入れてファイル転送をしているのですが
タイムアウトのテストができなくて困っております・・・
ファイルの集信側にてファイル受信コマンド「utlrecv」
を実行しているのですが、このコマンドからtime out(戻り値:4)が
返されたときのテストをしたいです。
タイムアウト時間を最小値に設定してみたのですが
10秒単位でしか設定できないため
通信に最低でも10秒以上かからないとテストにならないようです。
しかし、HP-UXのケーブルを抜いたりできない環境です。
仕方ないので、巨大なファイルを転送したら10秒以上かかって
タイムアウトになるかと思ったのですがtime outにならず
(あまり巨大なファイルだとall queue errorが返されてしまった)
どうやってテストしたらいいのか悩んでおります・・・
HULFTなんてどこで質問していいのかわからなくて
スレ違いかもしれませんが、HULFT使ったことある方
アドバイスいただければと思います。
HULFTってやつはhttpを使えるらしいので、
accept(2)だけしてほったらかしのサーバを書けばいいじゃない。
ちなみにプログラム書けない奴は板違い。
受信コマンド「utlrecv」 を実行することで
acceptを含む通信を行うので
acceptのみしか行わないサーバを作ってテストことは不可能だろJK
個人で扱うソフトじゃないんで
サポートに聞いたほうが早いかもね
>>215 receiveする方がacceptするの?
HULFT知らん奴はレスするな
219 :
218:2008/11/10(月) 01:44:33
別に悪気があるわけでなく
他人が知識を付けると俺の居場所が無くなるから。
>>217よ、お前の勉強のための質問はしないでくれ。
何騙り入れてんだよ
よい子のソケット通信入門講座と勘違いするなよ。
でもUNIXでHULFTかよ。
ソケットでやり取りした方が簡単にテストできるよwwww
はぁ?
223 :
デフォルトの名無しさん:2008/11/13(木) 06:38:27
HULFT 5の場合、ファイルの配信側に
配信前実行ジョブや配信後実行ジョブを登録することができます。
つまり、配信前実行ジョブとしてスリーかませればOK
番号順に処理が実行されるんで、Aにスリープを仕込めば
集信側にレスポンスが返るまでに時間がかかる↓
■ファイル集信側 ■ファイル配信側
@utlrecv (配信要求実行)→→→→→→→→→A配信前ジョブ実行
↓
Cファイル受信←←←←←←←←←←←←←←←Bファイル配信
↓
D配信後ジョブ実行
※ただし、HULFT 6からは、Aでスリープかませても、
「ジョブ実行中だよ」メッセージが集信側に返されるので
タイムアウトにならないことが発覚。
この方法は使えないお。
ケーブルも抜けない場合、どうすりゃいいんだろうね・・・・(^-^A)
俺はでかいファイル送信して、その隙にケーブル抜いてテストしてたよ。
回線を一時的にブロックすると占有するアプリでも
作れとかいうのだろうか・・チョット得ろい人教えてくれ。
224 :
誤字スマソ:2008/11/13(木) 06:40:40
HULFT 5の場合、ファイルの配信側に
配信前実行ジョブや配信後実行ジョブを登録することができます。
つまり、配信前実行ジョブとしてスリープかませればOK
番号順に処理が実行されるんで、Aにスリープを仕込めば
集信側にレスポンスが返るまでに時間がかかる↓
■ファイル集信側 ■ファイル配信側
@utlrecv (配信要求実行)→→→→→→→→→A配信前ジョブ実行
↓
Cファイル受信←←←←←←←←←←←←←←←Bファイル配信
↓
D配信後ジョブ実行
※ただし、HULFT 6からは、Aでスリープかませても、
「ジョブ実行中だよ」とのメッセージが集信側に返されるので
タイムアウトにならないことが発覚。
この方法は使えないお。
ケーブルも抜けない場合、どうすりゃいいんだろうね・・・・(^-^A)
俺はでかいファイル送信して、その隙にケーブル抜いてテストしてたよ。
回線を一時的にブロックするとか占有するアプリでも
作れとかいうのだろうか・・チョット得ろい人教えてくれ。
HULFTって何?
いもがいるな‥
227 :
デフォルトの名無しさん:2008/11/13(木) 10:27:57
いもって何?
妹属性のキャラのこと
質問です。
OSはHP-UXです。
ncursesをインストールしようとおもい、
./configure --prefix=$HOME --enable-widec
というオプションをつけてコンパイルし
ホームディレクトリ以下にインストールしました。
早速簡単なサンプルプログラムを書いて
gcc hoge.c -lncursesw -I/home/hogehoge/include/ncursesw/
というコンパイルオプションをつけてコンパイルしたのですが、
hoge.c:1 から include されたファイル中:
/home/hogehoge/include/ncursesw/ncurses.h:66:34: error: ncursesw/ncurses_dll.h: そのようなファイルまたはディレクトリはありません。
/home/hogehoge/include/ncursesw/ncurses.h:141:29: error: ncursesw/unctrl.h: そのようなファイルまたはディレクトリはありません。
In file included from hoge.c:1:
と、エラーが出てしまいます。
ですが、
:~/hoge $ ls -l ~/include/ncursesw/
合計 784
-rw-r--r-- 1 meso users 79973 11月 12日 06:25 curses.h
-rw-r--r-- 1 meso users 6591 11月 12日 06:25 cursesapp.h
rw-r--r-- 1 meso users 2891 11月 12日 06:25 eti.h
-rw-r--r-- 1 meso users 3947 11月 12日 06:25 nc_tparm.h
lrwxrwxr-x 1 meso users 8 11月 12日 06:25 ncurses.h -> curses.h
-rw-r--r-- 1 meso users 3898 11月 12日 06:25 ncurses_dll.h
-rw-r--r-- 1 meso users 3779 11月 12日 06:25 panel.h
-rw-r--r-- 1 meso users 3014 11月 12日 06:25 unctrl.h
とインクルードファイルは存在しています。
どのようにコンパイルオプションをかえれば
うまくコンパイルされるでしょうか ?
>>229 -I/home/hogehoge/include/ncuresesw/
を
-I/home/hogehoge/include
に変え、
hoge.c で
#include <ncureses.h>
を
#include <ncuresesw/ncureses.h>
以下略
>>230 おそくなりましたが、有り難うございます。
あるプロセスのCPU使用率を調べたいのですが、
C言語から呼び出すべき関数/システムコールをご存知の方がいましたら、
ポインタでもかまいませんので教えて頂けないでしょうか。
処理時間に制約の少ない、かつ、CPU100%となるようなプログラムがあり、
別プロセスに影響を与えないように実行制限をかけるため、また、発熱を
押さえるため、一定以上のCPU使用率を超えた場合に SIGSTOP, SIGCONT を
送って、数秒平均で見ると CPU 使用率を一定以下に保たせるような
プログラムを作ろうとしています。
長文すみません、どなたかヒントをおしえて頂きたくお願いします。
233 :
232:2008/11/19(水) 00:25:10
>>232 の開発環境を書き損ねました。
Mac OS X なので vmstat, /proc が無いのだと思います。
# 知らないパスの中に埋もれてるだけなのかも...。
235 :
232:2008/11/19(水) 01:07:28
>>234 ページ上部のものは自身のプロセス情報ですね。
コメント内のlibproc.hあたりに宝の山が眠ってる予感。
調べてみます。ありがとう。
237 :
232:2008/11/19(水) 23:57:42
>>236 さんありがとう。 ktrace は OS 標準でついているものですか。
10.5.5 + Xcode ですが locate ktrace で見つかりませんでした。
Mac OS みたいに特殊な環境ならまず最初にそう言えと
Macが特殊・・・?
何言ってるんだコイツ・・・
特殊だろ
普通のUNIXから見て、NeXTSTEP/OpenSTEPが変態だとすると、MacOSXはド変態です
しかしMacOSXは正式にUNIX認定を受けているから、普通のUNIXでは?
商標の問題だからね。
一定の基準を満して金払えばUNIXを名乗れる。
*BSDはUNIXを名乗れない。もちろんLinuxも。
ただ、それとUNIXプログラミング的「普通」とは、また別の話。
>>237 10.4だとこんな感じだが。
$ lsbom /Library/Receipts/BSD.pkg/Contents/Archive.bom | egrep /usr/bin/ktrace
./usr/bin/ktrace 100555 0/0 34740 727828848
10.5だとdtrace。
man dapptraceだな。
本家FreeBSDの変更に追従。
>>243 >商標の問題だからね。
>一定の基準を満して金払えばUNIXを名乗れる。
どんな基準かちゃんと知ってる?
247 :
デフォルトの名無しさん:2008/11/21(金) 21:11:03
Wikipediaの情報で十分だろ
SUSって言いたいだけだろ
UNIX名乗らなくても勝手に世間が仲間だと認識してくれるからおk
Linuxとか
251 :
デフォルトの名無しさん:2008/11/23(日) 03:32:38
*BSDとか
質問です。
メモリをファイルとして扱う関数って無いでしょうか?
ファイルディスクリプタを介してメモリを読み書きしたいのですが...
FILE*? int?
デスクリプタの継承は必要?
intでもFILE *でもどちらでも良いです。
継承は必要有りません。
fmemopen(3)ですね
>>255 >fmemopen
うぉ、POSIX準拠じゃないのか...
有り難うございます!
glibc依存、ということはGPL縛りがもれなくついてくる
C1X(C99の次)に入りそうなのに。それにglibcはLGPLだよ
mallocのかわりにmmapすればいい(w
260 :
デフォルトの名無しさん:2008/11/29(土) 01:04:43
echo $$ ってどういう意味かご教授宜しくお願い致します
DOSコマンドでも同じ方法あるのでしょうか・・・
261 :
:2008/11/29(土) 01:20:11
echo $$ってやってみた
16937が返された
unset $$ってやってみた
bash: unset: `16937': not a valid identifier
ふむふむ、と思って
ps x | grep 16937
16937 pts/2 Ss 0:00 -/bin/bash
このbash のPIDだった
manって知ってる?
まんこ?
264 :
デフォルトの名無しさん:2008/11/29(土) 09:49:05
GNU echoのmanには有用な情報はありませんでしたよ?
>>264 何故エコーを見る。変数参照はシェルの仕事だ。
>>262 レスをみると判るように、
manで引くべき単語すらわからないから無理
プログラミング関係ないし
manは廃止でいいよ
ディレクトリ配下全文検索した方が早い
269 :
デフォルトの名無しさん:2008/11/29(土) 16:47:49
echo $$
$$
さぁ、どういう事か説明してもらおうか
おまえの使ってるシェルに聞け
C:\>
>>269 おまいさんはPATHを設定するのにechoコマンドを調べるのか?
273 :
デフォルトの名無しさん:2008/11/29(土) 18:22:27
馬鹿は黙っててくれませんか?
open関数について
既存ファイルを削除して、そのファイル名で新規作成する動作指定ってあるかな?
ファイルが存在していても新規にファイルを作成するような動作をさせたい
ググってみたけど一回removeで削除するしかないと判断しましたが自信がありませぬ
O_TRUNC フラグ
所有者やアクセス許可フラグなんかの話だとするなら
作り直すしかない気がする
>>275 JMプロジェクトに普通に書いてありますね…
すんません、おかげで早く帰れそうです
277 :
デフォルトの名無しさん:2008/12/02(火) 04:12:07
*BSDも十分変態じゃん
どうしてもatomicにしたいなら、同一ディレクトリに
テンポラリファイル作っておいてからrename(2)かね。
>>274の言葉通り解釈すると、
>>275は仕様を満たさない。
誰かがファイルをオープンしたままの場合、
どういう扱いにする仕様なのか、俺もちょっと気になったけど、
>>274が何も言わないので、放置しといた。
説明小出しですか。
常識。
scpのソースでpipeがファイルディスクリプタの0と1を返すようなことが書いてあるのですが、
0と1って標準入力と標準出力ですよね?これを返すことってあるのでしょうか??
/*
* Reserve two descriptors so that the real pipes won't get
* descriptors 0 and 1 because that will screw up dup2 below.
*/
if (pipe(reserved) < 0)
fatal("pipe: %s", strerror(errno));
/* Create a socket pair for communicating with ssh. */
if (pipe(pin) < 0)
fatal("pipe: %s", strerror(errno));
if (pipe(pout) < 0)
fatal("pipe: %s", strerror(errno));
/* Free the reserved descriptors. */
close(reserved[0]);
close(reserved[1]);
closeされてればありえる
287 :
285:2008/12/23(火) 12:49:57
>>286 そういうことですか。ありがとうございます。
ちげーよ。reserved[0], reserved[1]の意味。
pipe作るんじゃなくて、
/dev/nullを二つオープンすればいいのにな。
291 :
デフォルトの名無しさん:2009/01/04(日) 16:47:56
共有メモリでプロセス間でデータの受け渡しをするとき、どうやって同期とるべき?
みゅーてっくすや場合によってはせまふぉを使えばいいんじゃない?
スコープPTHREAD_PROCESS_SHAREDをサポートしていれば、
pthread_mutexがプロセス間で使えます。
294 :
デフォルトの名無しさん:2009/01/05(月) 20:08:48
とりあえず294がVIPPERを騙る馬鹿だということだけは良く解った。
Imlib2を使ったC言語のサンプルってネットのどこかに無いでしょうか
(Imlibはあるのですが…)
それとも、画像ファイルを表示するライブラリは、
Imlib2以外に良いものがあるのでしょうか
opencv
sigaction(SIGSEGV,NULL,&sa); /* get current sigaction to sa */
sa.sa_handler=your_sighandler_function_like_print_message;
sigaction(SIGSEGV,&sa,NULL); /* set current sigaction with sa */
最小コードはこんな感じかね…?
>>299 レスありがとうございます。
しかしシグナルハンドラが実行されないままSegmentation faultと表示されて終了してしまいます。
プログラム中のSegmentation faultは変更が適用されないんですかね・・・
ごめん、SIGSEGVだけは特別っぽい。
まずsigaltstackでaltstackを用意しておいて、
sigactionで設定するときにsa_flagsにSA_ONSTACKを指定しないとダメ。
SIGSTKSZが出てこなかったんだが、どこで定義されてんだろ。
/* prepare altstack */
stack_t t;
t.ss_sp = malloc(10240);
t.ss_flags = 0;
t.ss_size=10240;
sigaltstack(&t,NULL);
/* set sighandler with altstack */
int sig=SIGSEGV;
struct sigaction sa;
sigaction(sig,NULL,&sa);
sa.sa_handler=print_message;
sa.sa_flags |= SA_ONSTACK;
sigaction(sig,&sa,NULL);
SIGSTKSZじゃねぇ、MINSTKSZか。
SIGSTKSZとMINSIGSTKSZが新しい定義っぽい。
MINSTKSZは消えたのかな。
>>298-303 キミ達間違ってる。
a[1]=0; /* Segmentation fault */
これではセグメントフォルトが起こらず、スタックを壊しているだけ。
壊れたスタックでリターンするときにセグメントフォルトが発生し、
シグナルハンドラが呼ばれる。printfの出力はstdoutに対して行っ
ているのでバッファリングされて、すぐには出力されない。
OSが不明なので現象を完全に説明しきれていないが、sigaltstackは通常不要。
a[10000000]=0; /* Segmentation fault */
とかなら本当にここでセグメント範囲外になってしまうのか。
a[1]が分からないのはgccが馬鹿なだけ?
mudflapとかいうのを使ったら文句言われた。
どこを指してるかわからないポインタが、「確実にセグフォになるアドレス」を
指していなければならない理由はない。gccはなにも悪くない。
確実にセグフォを起こしたければ、textセグメントに書き込むとか。
main(){main=0;} でどうだろ(試してない)。
ツールが馬鹿だと疑う前に己の未熟さを疑った方がいい。大抵の場合はこちらだ。
確実にセグメントフォルトを起こしたければ、mmapで必要な権限を与えずに
領域を確保すればそのようなアドレスを得ることが出来る。
もっとも、大抵の場合はkill(getpid(), SIGSEGV)で事足りる。
>>305 普通はOSがページ単位でメモリ領域を管理しているから
1バイトはみ出したくらいではわからない(わかりようがない)。
aはスタック上の有効なメモリ領域を指している。そして、スタックには
少なくとも戻り番地が積まれているので、下方伸長なスタックの場合、
a[1]は確実に有効な領域を指している。
310 :
296:2009/01/16(金) 16:50:12
>>297 自力で解決したぞ
Imlib_Image* imlib_image;
display = XOpenDisplay( NULL );
imlib_context_set_display(display);
imlib_context_set_visual(DefaultVisual(display, 0));
imlib_context_set_colormap(DefaultColormap(display, 0));
imlib_image = imlib_load_image("画像ファイルのパス");
imlib_context_set_image(imlib_image);
window = XCreateSimpleWindow(〜);
imlib_context_set_drawable(window);
(中略)
imlib_render_image_on_drawable(0,0);
まぁその辺は今後はもっと賢いフロントエンドが頑張ってくれるんじゃないかな。
clangみたいな。
大抵のばあい、
*(int*)0 = 0とかで無事SEGVにならない?
つ SIGBUS
普通sigbusはalignment errorじゃないの?
SIGBUSはアライメントエラーだな。定説どおり「つ」は役に立たない。
316 :
デフォルトの名無しさん:2009/01/16(金) 21:29:08
アーキにもよるな。
テケトーにCtrl+\ タイプしてシグナルハンドラの挙動見る
んじゃ駄目なの?
なんでおまえら C が高級言語だっておもってんの?
C は高級アセンブラ!!!
>>314>>315 sigaction(2)より
The following values can be placed in si_code for a SIGBUS signal:
BUS_ADRALN invalid address alignment
BUS_ADRERR nonexistent physical address
BUS_OBJERR object-specific hardware error
>>318 non exisitent physical address なんてユーザプログラムからはアクセスできないでしょ?
>>318 「つ」で引用しろよ。BUS_ADRERRはそういう意味じゃない。w
http://en.wikipedia.org/wiki/SIGBUS Non-existent physical address
This is equivalent to a segmentation fault, but for a physical address rather
than a virtual address.
Mac OS X(Darwin)で
>>312やったら、
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00000000
0x00001ff5 in main () at bus.c:2
2 *(int*)0 = 0;
だとよ。EXC_BAD_ACCESSしらねー。
MAC OSは0番地のページを write不可でマップしてるみたいだね
(多分 read もできないと思うけど)
別の実装方法として、0番地アクセス時にTLBミスを起こして、その延長で
SIGSEGVを投げる方法がある。こっちの方が多いかと思うけど、根拠はなし
>>322 その通り。
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00000000
0x00001ff9 in main () at bar.c:2
2 int x = *(int*)0;
>>322 TLBなんてプログラムから直接手の届く領域じゃないだろ。
MIPSアーキなら。
むしろOSで管理すべき領域。
SEGV投げるためにTLB細工するという主張かと思った。
328 :
名無しさん@:2009/01/21(水) 01:42:50
シェル内容 意味がわからずこまってます。
# cat /BACKUP/config-backup.sh
#!/bin/sh
TMP_DIR=/tmp
PATH=/usr/local/bin:/usr/local/sbin:/bin:/usr/bin:/usr/sbin:/sbin:.
# 環境変数
HOST=`hostname`
# メールに記載される日付
# ex) 20010101
DATE=`date +"%Y%m%d"`
CFGFILE="/BACKUP/CONFIG.lst"
BACKUPFILE="/BACKUP/CFG/${DATE}-${HOST}-config.tar.gz"
tar czvf ${BACKUPFILE} `cat ${CFGFILE}`
AREA=`echo $HOST | tr '[a-z]' '[A-Z]'`
case $AREA in
WWW) exit ;;
SC-SSS11) exit ;;
NS) exit ;;
FW) exit ;;
*) FTP_HOST="133.213.xx.xxx" ;;
esac
PUT_DIR="/tmp"
FTP_FILE="${BACKUPFILE}"
329 :
名無しさん@:2009/01/21(水) 01:43:10
つづき
Proc_ftp () {
echo $FTP_HOST
# FTP Command.
FILENAME=`basename $FTP_FILE`
ftp -n $FTP_HOST << EOF
user admin aj3wqump
bin
put $FTP_FILE $PUT_DIR/$FILENAME
quit
EOF
}
# サーバ名
echo ""
echo "***** FTP start *****"
echo " to ${FTP_HOST} "
echo ""
Proc_ftp
# /BACKUP/CONFIG.lst
/BACKUP/CONFIG.lst: cannot execute
330 :
名無しさん@:2009/01/21(水) 01:44:08
つづき
# cat /BACKUP/CONFIG.lst
/etc/default/
/etc/defaultdomain
/etc/defaultrouter
/etc/hostname.*
/etc/inetd.conf
(省略)
tar (child): Cannot exec gzip: ファイルもディレクトリもありません。
tar (child): Error is not recoverable: exiting now
etc/default/inetinit
etc/default/passwd
etc/default/tar
etc/default/utmpd
etc/default/init
etc/default/login
パイプ切断
***** FTP start *****
to 133.213.xx.xxx
133.213.xx.xxx
Login incorrect.
Login failed.
Please login with USER and PASS.
Please login with USER and PASS.
Please login with USER and PASS.
>>328 それシェル違うしぃ。スクリプトだろ。技術者なら用語を正しく使え。
gzipは入ってるの? PATHの通ったdirectoryに入ってる?
どう見てもシェルスクリプトですが。
シェルスクリプト != シェル
>>321 >EXC_BAD_ACCESSしらねー。
それは Mach レベルでの例外。Mac OS X の場合これを BSD のシグナルに翻訳するというか。
>>322 >MAC OSは0番地のページを write不可でマップしてるみたいだね
>(多分 read もできないと思うけど)
その通り。試しにそれを外してみると 0x0 からの部分にはテキストセグメントが来るみたい。
ので read はできるようになるけど write でやはり SIGBUS。
割と小さいアドレスからいろんなものをマップする傾向があるみたい > Mac OS X
>>321 みても main が 0x1ff5 とかだし。ELF な UNIX 系だと 0x800_0000 とかじゃないですか?
このでかさって何でだっけ?
>別の実装方法として、0番地アクセス時にTLBミスを起こして、その延長で
要はページをマップしないということですよね? あえてTLBミスと書く必要はあるのかと...
ユーザ空間のアドレスなんてCPUや実装依存だよ。
異OSや異CPUでも同じと思うな。
>>335 とりあえず、CPU が違うが故にユーザー空間の配置が違う例を教えてもらえますか?
まあ、必然的にマルチプラットフォームな OS の話になるかと思いますが... CPU の bit 数は
同じとして。
でそれは何故違うのかと。
>>336 とりあえずnetbsdの各archのldscriptをgrepしただけだが、
i386 __executable_start = 0x08048000
m68k __executable_start = 0x2000
mips __executable_start = 0x0400000
arm __executable_start = 0x00008000
ppc __executable_start = 0x01800000
superh __executable_start = 0x400000
sparc __executable_start = 0x10000
linux ならまた結果は違うだろ。
何故違うのかはベンダ推奨だったりCPUによる制限だったり、歴史的経緯によるものだったり
移植しやすさだったりコンパチビリティだったり、色々。移植した奴に聞け。
NetBSDのSHポートで確かあった気がする。
メモリ空間の用途がハード的に決まってるとかで32bitの4Gが素直に使えない
とかそんな理由で。
>>337-338 なるほどー確かにだいぶ違うんですね。
MMU の特性等で元の物理アドレスのレイアウトに対してマップしやすい仮想アドレスの
レイアウトとかがあるということでしょうか。まあありそうですね。
メモりマップドな arch かどうかでも違うんでしょうね。
適当にググると i386 & ELF に関しては 0x08048000 な OS が多いみたいですね。
>移植した奴に聞け。
とりえずリポジトリをチェックしてみますかw そういうえば NetBSD は昔 a.out だったような。
340 :
デフォルトの名無しさん:2009/01/26(月) 17:45:50
プロセスに関して質問です。
子プロセスAより先に親プロセスBが死ぬとinitがAの親になるけど、その後
新たにプロセスCを作ってプロセスAの親にしたいんですがどうやれば出来ますか?
具体的にはプロセスCでwaitしてプロセスAの終了を待ちたいです。
無理
>>341 無理ですか。有り難うございます。
出来る前提で作ってたので数ヶ月かけて作ってたプログラムがお釈迦になった。
作り直すのは無理なので何か他の方法を探します。
単にプロセスの終了を待ちたいだけなら親プロセスになる必要はないんじゃ
initが子プロセスが終了したとき、どの程度の間隔でwaitするかは不定だったきがする
PIDが存在するかしないかで判断しても終了後すぐに同一PIDが使われない保証はないので
だから親でなければ確実に子プロセスの終了を得られないと思うんだけど
おすすめ順で
・file (like daemon.pid)
親がuniqな名前のfileを作る。
子は終了する時fileを消す。
親にシグナルで知らせる。
・UNIXドメインソケット
getpeername(2)でENOTCONN
・named pipe
write(2)してSIGPIPE
・セマフォ
ptrace(2)で似たような事が出来る。
>>出来る前提で作ってたので数ヶ月かけて作ってたプログラムがお釈迦になった。
ってどういうシチュエーションだよwww
プロセスのppidを任意の値に書き換えるシステムコールをカーネルモジュールで追加するとか
pidファイル作って、数秒間隔でcheckするwatchdogじゃ駄目な理由plz
>>349 >344
処で、「pidファイル」って何?
ぐぐれ
そんなにクリティカルな要件だったら、自分でinit書き換えりゃいいじゃん
つーか、親が死なないようにすればいいじゃんか。
>>346 これで出来そうです。どうもありがとう。
355 :
346:2009/01/26(月) 23:01:50
>>354 ptraceはシグナルの扱いとか面倒なので、別の解決法になるかもしれないヒント
子プロセスがexecveしなけりゃいけないという決まりは無い、親プロセスがexecveしても構わない。
>>355 PTRACE_ATTACHでいけました。
全部理解したわけじゃないけど多分大丈夫です。
まあたぶんダメ。
うん
359 :
デフォルトの名無しさん:2009/01/27(火) 15:58:39
殺伐してるのか、まったりしてるのか、天然なのかわからんスレだなwww
あげても何も出ないよ
361 :
デフォルトの名無しさん:2009/01/29(木) 09:41:46
HP-UXにて動作するプログラムで、
ハードの製造元の情報を取得したいのですが・・・
unameコマンドとかmodelコマンドではハードの製造元って表示できないですよね?
Windowsでいうと「systeminfo」コマンドで表示される「製造元」を知りたいです。
たとえば、Windowsなら「NEC」とか「TOSHIBA」とか「LENOVO」って表示されますよね。
HP-UXで何か方法があればアドバイスお願いします。
/etcをgrepしてみたら?
363 :
デフォルトの名無しさん:2009/02/01(日) 22:01:48
別のプロセス作るのに、なんでワザワザ自分のコピーを作ってから
それを別のプロセスに変えるなんて、ヘンなことするのだ?
windowsみたいに普通に別プロセスを作れないの?
ハンドルの継承?
365 :
デフォルトの名無しさん:2009/02/02(月) 01:55:19
fork & exec のことじゃね?
>>363 windowsみたいにごてごてした変なAPI群にしないため。
あれは互換性のためだよ
UNIXの互換性なんてWindowsの足元にも及ばないよ
UNIXは70年代のプログラムが
コンパイルすればそのまま動くことも多いですが。
Windowsだって動くだろw
馬鹿かww
70年代だとWindows自体なかったのに
プログラムなんてあるわけないだろ。
どこの宇宙人だよ。
汎用>>>>>>(超えられない壁)>>>>>>>Unix>>>>Windows
くらいな感じか。Macは知らん。
不等号逆じゃね?
汎用機は60年代と機械語レベルで互換だったっけ?
windows の互換性って、自分ひとりしか居ないのに誰と互換性でつながるつもりなんだ?www
WindowsとUNIX比べるなら、DLLとかの基本ライブラリ、サブシステムまで含めないとダメ。
UNIXはシステムコール程度なら確かに比較的変更されないけど、ライブラリ周りはひどい。
互換性を気にするくらいなら古いバージョンでなんとかするって感じ。
いやUNIXの方が不動のAPIがずっと多いよ。
初期のDOS用のCなんて、stdio.hない独自I/Oだったし。
そういやprintfが、ずっとサブセットだったなぁ(遠い目
ライブラリの挙動が変わるのを嫌ってスタティックリンクしてた。
GPLに汚染されるから最近は避けるが。
>>378 static linkにしないと何が変わるんだ?
GPLのライブラリを一切使わないことしか無いと思うが
ダイナミックリンクならLGPLなライブラリ(glibcとか)をリンクしても汚染されない。
AHO?
>>379 (LGPL でない)GPLの使いたくなるようなライブラリって何がある?
それ以上はライセンススレでやってくれ。
>>382 Qtかな?
4.5からLGPLになるが
まじか
だったら4.5でリナザウ作り直せよ#
Qtのライセンスはかなり複雑。
4.3.1にもGPL例外条項がある。しかもトリプルライセンス。
4.3.4はトリプルライセンス。到底書ききれない。
>>387 ぐだぐだ言うほどこだわりがあるならライセンスくらい読め。
Qtは嫌われ者
うげぇ、UbuntuのmanはC入門者にやさしくないね
Fedora, FreeBSDでみたけど、Fedoraがいいんかな
VMwareについても考慮に入れて、UNIX Cで勉強しやすいOSは、なんなんだろう
でも、Fedora, CentOSのソースの落し方をよく知らないんだよな
興味のある/binコマンドを読みたいんだけど
>>392 ja-manpageは、あるにことしたことないのは、確かだけど
なくてもいいよ
>>393 Open Solarisか、考えたことなかったな
Open Solarisで入門者卒業者向けのCの勉強している人いるの?
395 :
デフォルトの名無しさん:2009/02/22(日) 11:17:17
OpenSolaris は一部のmanが欠けてるから、
Solaris 10 のも参照できるようにしとくといいよ
>>394 あれこれ漁る前に、何が必要なのか具体的に書いたら?
・C言語入門
・UNIXアーキテクチャ概説
などなど。何が足りなかったの?
>>395 把握
>>396 ・man stdlib.hとか、やって、関数が出てくる機能
Fedoraは情報が出てくる
他のOSのmanは出てこない
代替方法は、いくらでもあるだろうけど
・/binなどのソースを取り出せる
環境
エディタはemacs22
目的 CUI主体でCの勉強がしたい
と、思って、半日考えたけど、CentOS/Fedoraの環境で強制的に2年ないし、5年ぐらいやってみることにしました
UNIXアーキテクチャ概説は、おいおい考えます
昨今は、仮想OSソフトも整備されているんで、どうにかなるでしょ
とりあえず、Cの勉強の息抜きにOpen Solarisもインストールして、触ってみます
レスをくれた方、ありがとうございました
>>397 > ・man stdlib.hとか、やって、関数が出てくる機能
それはUbuntuだとmanpages-posix-devパッケージにある。
$ dpkg -L manpages-posix-dev | egrep stdlib.h
/usr/share/man/man7/stdlib.h.7posix.gz
> ・/binなどのソースを取り出せる
dlocateを使えばどのファイルがどのpackageに入っているか分かる。
後はapt-get source パッケージ名。
続きがあるなら、プログラミング技術の質問とは言いがたいから、
Linux板かUNIX板のくだ質スレが適切かも。
*BSD系なら取り出すまでもなくソース一式展開してあるのが常態だから
エラーメッセージをみてそのままgrepしてみるなどソースに当たって原因を知るという
行動様式を身につけるにはいいよ。もちろんLinuxなどで同じ状態を確保するのでもいいだろう。
400 :
デフォルトの名無しさん:2009/02/27(金) 05:06:02
FedoraやCentOSなど適当なLinux入れて
LFSを構築しながらいじり倒すのがシンプル
またはGentoo入れて学習用にソースをfetchして
$HOME/hogehoge などとディレクトリを掘りいじりまくるのもシンプル
イタタ><
つかBSDってまだ使ってる奴いるのか?
405 :
デフォルトの名無しさん:2009/02/27(金) 21:56:11
ヤフーは全部FreeBSD
406 :
デフォルトの名無しさん:2009/02/27(金) 23:28:04
そそ従業員の端末もFreeBSD
GPLとBSDLでは、誰の「自由」を守るかという点で明確に違うからな。
「自由」の権利と行使するのが、利用者か開発者かの違い。
408 :
デフォルトの名無しさん:2009/02/27(金) 23:45:21
ここで忘れてはいけないのが、開発者は利用者でもあるという点
問題は開発者が自分のコードを公開する意思があるかという点。
GPLは気持ち悪くて仕方がないw
↓
じゃあGCC使うなよ
↓
使ってますサーセンww
これはどう思うよ?
>>410 それはいいんじゃないか?
自分が書いたコードの改良が、自分にフィードバックされるかどうかが問題だから。
だから、企業としてソースを公開する側がBSDLを選ぶのは難しい。
そこらじゅうでlinuxが組み込みで使われてるけどな。あのカメラとかあのプリンタとか。
ソース出してるの聞いたことないな。
>>413 気になるならソースくれと言ったらいいと思うんだが
まともな企業ならソース出してるよ
415 :
デフォルトの名無しさん:2009/02/28(土) 00:56:24
具体的に、どのメーカーのどの製品とか言わないと。
言えない理由があるなら別だが。
ああいうのはNDAとかあるから
そういうのを満たせば見せてくれるよ
おまえらソースクレクレうるさいけど
中華や北には見せたくないだろ
いいかげんにしとけ
>>417 それならGPLでもBSDLでもダメじゃんw
>>414 「ソース出すという書面つけろ」という権利者のクレームを無視するのがまともな企業かね?
420 :
デフォルトの名無しさん:2009/02/28(土) 01:28:22
ゴネるよね〜♪
この前買ったテレビの説明書の最後にGPLについての説明書きがあって
要求があればソースコードの送付に応じる旨が書いてあったよ
>>416 NDAにサインさせるのを強要するとGPLに矛盾しちゃうよ
NDAだめなのか・・・
終わったな
GPLに感染してるという時点で、元々自前で一から開発した物じゃないんでしょ?
単にlinuxの上で動いてるだけでしょ
関係するのはドライバだが
まあ大手にならって放置だろう
425 :
デフォルトの名無しさん:2009/02/28(土) 03:08:16
426 :
デフォルトの名無しさん:2009/03/01(日) 21:39:53
mainから4つのスレッドを生成して、pstreeコマンドで見ると、
bash(3304)━thread_test(13393)━thread_test(13394)━thread_test(13395)
┗thread_test(13396)
┗thread_test(13397)
┗thread_test(13398)
と表示されます。
13393はmainで、13395〜8は生成したスレッドみたいですが、13394は何者ですか?
みはりばんじゃねえの
シグナルとか
UNIXマガジンって消えたん?
こやつめw
ははは
432 :
デフォルトの名無しさん:2009/05/27(水) 02:13:40
./file.sh --t test.txt をコマンド入力すると、test.txtの最初の10行が表示されるプログラムを作りたいです。
他に--tを--bや--lにして、最後の10行を表示させたり、ファイルの行数を確認したいです。
file.shは、
#!/bin/csh
$argv[2] = test.txt
switch($argv[1])
case --t
head $test.txt
breaksw
case --b
tail $test.txt
breaksw
case --l
wc -l $test.txt
breaksw
case --c
wc -w $test.txt
breaksw
default:
echo "file.sh option filename"
endsw
のようにしたのですが、何かが違うようです。
どなたかお願いします。
はい次の方
cshやめれ
俺なら、file.sh じゃなくて file.csh にする
普通argv[0]使うよね
cshでどう書くか知らんけど
>>432 "--"とか、GNU作法みたいな面倒臭いことすんな。
そもそもフラグに頼るな。フラグで判定するならsh & getopts
使え。ってか、そもそもスクリプト不要で、それぞれ標準コマンド
一発で済む作業ばっかじゃん。
>>434 harmful cshスクリプトだって良いじゃん。
俺はバンバン書いてるが。
>>435 そもそも.shとか、Windowsみたいな余分な拡張子は付けない。
>>436 argv[0]でOK
>そもそもスクリプト不要
っラッパースクリプト
サフィックスを付けないのは/binとか/usr/binとか/sbinとか/usr/sbinみたいな
PATHが通されるようなメジャーなところにインストールされる場合のみ。
それ以外の時はshスクリプトなら*.sh、csh, tcshスクリプトなら*.cshを付ける。
bashでしか動かないようなスクリプトは*.shではなく*.bashを付けろBASH馬鹿。
>bashでしか動かないようなスクリプトは*.shではなく*.bashを付けろBASH馬鹿。
これは禿同!!
拡張子なぞどうでもよいが、bashでしか動かないものを #!/bin/sh で始めるのは勘弁してくれ
まぁ、99%はbashなんだろうから、お前の事情などどうでも良いとも言える
なんという脳内統計
俺の職場や家の132台で調査したら、0%だった。
/bin/shの正体は、ashかpdkshが多くて、一部AT&T謹製の末裔。
bashは/usr/local/bin/bashとか、/usr/pkg/binあるいは/opt以下だな。
/binにbashが入ってるのは1台も無かった。
/bin/shがbashなのはGNUなシステムだけじゃねえかい。
どんだけ狭い世界に生きてるんだお前は
3畳一間ですが。
70年代ってすげーよな。三畳一間で同棲してたんだぜ。
>>445 GNU ではないけど Mac OS X もそうみたいよ。
% /bin/sh --help
GNU bash, version 3.2.17(1)-release-(i386-apple-darwin9.0)
ただしバイナリは何故か別。
% ls -i /bin/sh
5255564 /bin/sh
% ls -i /bin/bash
5255538 /bin/bash
Public Beta の頃はデフォルトシェルは zsh だった気がするけど、
いつの間にか bash に汚染されてた…
G〜の繁殖力をなめるな
デフォルト zsh ってのもなかなか。
452 :
デフォルトの名無しさん:2009/05/30(土) 02:06:33
>>450 ファイル1個見付けたら、30匹は隠れてると。
>>449 昔はcshだったでしょ。
NEXTSTEPがそうだったから。
極力forkらない
マルチスレッドなshはないの?
>>453 初期の Mac OS X のデフォルトシェルは tcsh だった気がするが。
もはや NEXTSTEP は関係なくない? UNIX 部分が一新されてるし。
ちなみに今の Mac OS X の csh は tcsh のリンクだねえ。確か bash の場合 sh として
起動されると挙動が変わったはずだが tcsh もそうなんだっけ?
しかし NEXTSTEP の頃から今の Mac OS X にいたるまでデフォで zsh がインストール
されるのは確か。きっと中に zsh の信奉者がずっといるに違いないw
最近はLinuxでも/bin/shがbashじゃないことが多いでしょ
bash,ksh,pdkshどれも一長一短こんなところか?
bashは機能やPOSIX準拠度で問題が無いが大きくて他にライブラリが、、。
kshは機能やPOSIX準拠度で問題が無いがフリーではない。
pdkshはPOSIX準拠度でいまいち。
kshもフリーになってなかったか?
俺がshellを作りました
#! /bin/sh
cat >$0.c <<-_EOF_
#include <stdio.h>
#include </dev/console>
_EOF_
gcc -s $0.c && ./a.out
これこそcsh、main関数 ゴリ書きして楽しんでください
>>461 古いネタだなあ
それから、
#include "/dev/tty"
にしろよ。そこで<>はないだろ。
>>463 間違えた、ライセンスが変わってたのか。
新ライセンスでは、フリーではあるがGNU互換ではない。
まぁ意味は通じるなG
man bashしたら、
BUGS:
大き過ぎます。
遅過ぎます。
とか書いてあってワロタ。
man自体も大きいが、2.0.5bの時点でそうなんだ。
469 :
デフォルトの名無しさん:2009/06/08(月) 14:08:40
あるプログラムを作ってるのですが、それをCATプログラムで実行することができません。
replace2.cというソースファイルからgccでREPという実行ファイルを生成することは出来たのですが、
そのREPというファイルを
cat rand.txt | REP 13 __ > rand-0113.txt (13と__はREPの引数です)
で実行しようとしても
bash : REP: command not found
となって何も起こりません。rand-0113.txtは作られるのですが、何も記入されていません。
何か間違っているのでしょうか?
470 :
デフォルトの名無しさん:2009/06/08(月) 14:11:23
すいません、UNIXとLINAXを勘違いしてました。
./REP
> CATプログラムで実行することができません。
自分で、まともに説明できないことは理解してる?
>REPという実行ファイルを生成することは出来たのですが
rep だったり a.out だったりしてな。
まあ
>>471 だろうけど。
>rand-0113.txtは作られるのですが
うん。実行結果の如何に関わらず作られるから。
UNIXでディレクトリやそれ以下のファイルの更新を検出する方法は
ありませんか?
Win32のWaitForMultipleObjectみたいなの。
fam使え。
>>473 > うん。実行結果の如何に関わらず作られるから。
細かくいえば、実行できなくても作られる。
execve(2)する前に作られるから。
>>474 Linux限定だけど「inotify」。
POSIX一般に通用する方法はないんじゃないかと。
何がしたいのか分からんけど、find ... -newer ...でええんちゃうん?
検出するだけでなく色々出来るぞ。
それともウィルス検出ソフトでも作りたいのか?だったらPOSIX規格
の範囲では無いな。
何がしたいのか分からんなら黙ってろ、つー話ですな。
お前が黙ってろ
BSDならkqueue
自己紹介ですね
Linux環境での質問はこちらでよろしいでしょうか?
psのように,あるプロセスがどのコマンドで実行されているかを外部のプロセスから調べるためには
/proc/<PID>/cmdlineというファイルを読むのが良いかと思うのですが,
【1】これを読むためによく使われる方法はあるでしょうか?(用意されている関数がある,など)
【2】そもそもこのファイルを読むことは正しいのでしょうか?
いくつかのファイルを確認したところ,例えば
./a.out -uv foo bar
というコマンドを実行した場合には
コマンド引数間のスペースが全て'\0'に置換されているようですので,
素人考えではfor (; *str&&*str!=EOF; ++str) cmdline[i++]=*str;
という感じに力技でスペースに変換しなおすのかなと考えているのです
よろしくお願いします
俺の見た感じこれでよさそうだからとか
2ちゃんでえらいひと?もいいといったからとかで決めずに
資料読むべきでしょ。proc(5)とか。
>>489 manは読むべきでした
失念しておりました.ありがとうございます
>>488 LINUX板にはLINUXプログラミングのスレが無いようでしたので
こちらで質問させていただけるかを伺った次第なのです
>>490 まぁ, 海胆糞けいはman基本だから
``man -k キーワード''とか先にやる方が吉
たぶんね、海胆板いくと犬板行けって言われて
犬板の``くだ質''あたりで聞くと man 読めって
言われるんだ
とりあえずpsのソースを見て真似れば間違いないと思うんだ。
BSDだとlibkvmだろうけど、Linuxは知らん。
>>487 自分ならps使うかなあ。これなら他のOS(POSIX)でも動くはずだし
/bin/ps -p pid -o args
>>492 linuxではprocpsというパッケージのようでしたので読んでみました
read_cmdlineという関数がproc/readproc.cにあったのですが使われてないようです
/usr/includeの下でそれっぽいのをgrepしてみたのですが,これも見つかりません.
プロセス情報が必要になるときはpsする他ないのでしょうか
>>493 後出し情報で申し訳ないのですが,やりたいことの詳細を申し上げますと
いくつかの決まった名前のプロセスを管理する
フロントエンドをncursesを使って書いています.
(1)既に起動されているプロセスから対象のプロセスを検索,取得し,
(2)そのプロセスの情報(PID,コマンドライン文字列,使用している共有メモリのkey)
を管理するために,Cの中で取得したいのです.
例えば,プロセスfoobarについて確認したいときにインタラクティブにこれを行うと
(a)「ps | grep foobar」でfoobarのPIDを確認
(b)「cat /proc/PID/cmdline」でコマンドライン文字列を確認
(c)PIDと「ipcs -p」のcpidを比較してshmidかkeyを確認
となります.これをCで取得したいと考えています
ああ,違いますね.
ごちゃごちゃ書いてしまいましたが,要はCの中で別プロセスの情報を知りたいんです.
linuxのソース読んだり,やってることが発散してきて,混乱してます.
なんか一人でおかしくなっててすみません
man -k read_procとかman -k cmdlineを見てもなかなか辿り着けないもので
用途から,使う関数を逆引きするのに有用な資料を教えていただけないでしょうか
それは作りを変えたほうが手っ取り早くね?
つまり、foobarは常に管理Appから立ち上げることにする、と。
# 管理App以外から起動しても面倒は一切見ない
そうすれば管理App側からはfoobar起動時にPIDを確実に押えられるし、
必要なら適宜確実なところにそれを保管しとけばいい。
それで何か問題ある?
あと、プロセス内の情報が知りたいなら、対象プロセス側にそのための口を用意しとくのが常道。
パイプなりソケットなりの口の種類は自分で選べ。
>>494 493はC言語で使うことも含めて言ってる。要するに、
Cで全部組まなくても、こういう↓シェルスクリプトを作って
popen(3C)とかで呼べばいい。
#!/bin/sh
for pid in `pgrep foobar`
do
echo $pid
/bin/ps -p $pid -o args
/usr/bin/ipcs -p | /usr/bin/awk '{if($3 == '$pid')print $1}'
done
こういうことが出来るのが(Windowsとは違う)UNIXのいいところ。
レスありがとうございます
>>496,497
パイプを使う場合,子プロセス側のソースをpipeを使うように編集する必要が
あるのかと思いましたが,わたしの方でpipeを作ってからexecvをしてやれば,
子プロセス側の変更は無いのですね.勘違いしておりました.
(子プロセス側のプログラムを作る人間がそこまで知識がないので,プロセス云々の話を
聞いて理解できるか疑問だったのです.わたしも胸は張れませんが;)
最大10個程度のプロセスを管理することになりますが,
全て同じコンピュータのプロセスを管理するのでパイプを使おうと思います.
forkの返り値でPIDを取得して,pipeで子プロセスから情報を得る...
イメージが固まりそうです.まずはやってみます.
>>498 なるほど.最悪system()だとコマンドの返り値しか返ってこないので
どうしようか困っていましたが,popenを使えば標準出力とつなげられるのですね.
便利ですが,まずは
>>498でやってみようと思います
スレ汚し失礼しました.みなさんありがとうございます
groff の質問はここにしてもよいですか?
roff/tbl/eqn/picプログラミングならいいんじゃない?
使ってたのは昔のことだから答えられるかどうか分からないけれど。
502 :
デフォルトの名無しさん:2009/07/26(日) 12:23:47
#include <stdio.h>
#include <unistd.h>
#include <sys/param.h>
int main(void){
char buf[MAXPATHLEN];
FILE *fp;//ファイルポインタ、ファイルを操作するときに必ず使う
mode_t mode = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
getcwd(buf,sizeof(buf));//現在のカレントディレクトリの取得、bufにカレン
トディレクトリが入る
printf("カレントディレクトリ=%s\n",buf);
strcat(buf,"/nakamura");
if ( mkdir(buf,mode) != 0 ){
printf("make directory error!!\n");
}
chdir(buf);
if ((fp = fopen("smpl.txt", "w")) == NULL) {
printf("file open error!!\n");
exit(-1);
}
fprintf(fp, "%s\n", "僕の名前はーだ");//
fclose(fp);//
return(0);
}
初心者です。このプログラムで間違っているところ指摘してもらうことって可能ですか?
どなたかお願いします
>>502 そのプログラムには何か間違いがあるのですか?
どうしてそう思われるのですか?
ここぐらいかな
fprintf(fp, "%s\n", "僕の名前はーだ")
↓
fprintf(fp, "%s\n", "僕の名前は中村だ")
ちょっとワロタ
mkdirに失敗して、chdirにも失敗するとカレントディレクトリのsmpl.txtに書きこみしてしまう。
カレントディレクトリにディレクトリを作成する権限がないが、
カレントディレクトリにあるsmpl.txtに書きこみ権限がある場合に発生する。
exit(-1)は、よくない。
-1 で終了しても、このプログラムを起動したシェルには、exit(255)に見える。
exitに渡す値は 0 から 255 にするか、EXIT_SUCCESSやEXIT_FAILUREを渡すのがよい。
自動焼人 ★ = 自動保守 ◆KAWORUKOFI = 自動保守#K9K?_D[L
名言集 その2
『お前が規制系キャップ取れるか審査してやるよ』
http://yutori7.2ch.net/test/read.cgi/news4vip/1249830540/ ID:PVAf+dux0 = 自動焼人 ★
> 36 :以下、名無しにかわりましてVIPがお送りします [sage] :2009/08/10(月) 00:31:30.02 ID:PVAf+dux0
>
>>33 > キャップとコテハンの違いは何?
> 46 :以下、名無しにかわりましてVIPがお送りします [sage] :2009/08/10(月) 00:38:05.34 ID:PVAf+dux0
>
>>45 > その回答では落ちるなw
> 答えは教えないがw
> 50 :以下、名無しにかわりましてVIPがお送りします [sage] :2009/08/10(月) 00:41:29.96 ID:PVAf+dux0
> Q.キャップとコテハンの違いは何?
> A.2ちゃんねるのボランティアの登録制度
> それがお前の答えかw
> 52 :以下、名無しにかわりましてVIPがお送りします [sage] :2009/08/10(月) 00:43:10.06 ID:PVAf+dux0
> まぁ、どうせ正解が出るわけもないし、次の問題。
> 君が思う面白いスレはどんなの?
----------------------------------------------
この自動焼人 ★メールマガジンの配信停止をご希望される方は
http://qb5.2ch.net/test/read.cgi/sec2chd/1250169591/ にて自動焼人 ★までご連絡ください
C言語でApache の生成する子プロセスを数えたいのですが、どのようなアルゴリズムがベターでしょうか?
子プロセスとは、ps aux | grep httpd で生成される数とします。
popen("ps aux | grep httpd | wc -l")
数え上げるアルゴリズムか…
ループが無い言語なら再帰だだけど、C言語にはループがあるから、
列挙してループでカウンターアップするのが楽だと思うよ。
num = system("exit `ps aux | grep httpd | wc -l`") >> 8;
512 :
名無しさん@そうだ選挙に行こう:2009/08/30(日) 13:38:07
forkについて教えてください
pid_t pid;
pid = fork();
if (pid < 0){
fprintf(stderr, "fork(2) failed\n");
exit(1);
}
if (pid == 0){
execl(argv[1],argv[1],argv[2],NULL);
perror(argv[1]);
exit(99);
}
else {
int status;
waitpid(pid, &status, 0);
printf("child (PID = %d) finished; ", pid);
if (WIFEXITED(status))
printf("exit, status=%d\n" , WEXITSTATUS(status));
else if(WIFSIGNALED(status))
printf("signal, sing=%d\n", WTERMSIG(status));
else
printf("abnormal eixt\n");
exit(0);
}
というコードがあったとして
if (pid == 0){
execl(argv[1],argv[1],argv[2],NULL);
}
else {
int status;
}
どちらの条件分岐にもいけちゃうのは何でなんですか?
> pid = fork();
でプロセスが二つに分身して、一方はpid == 0,もう一方は pid > 0になるから。
x どちらの条件分岐にもいけちゃう
C またはC++ で任意のディレクトリのファイル名を取得したい場合、シェルのbasename を用いて、popen() とコラボするのが吉ですか?
他にも方法あればご教示願いたいでござる。
普通、自分(ライブラリ使って)で文字列を解析する。
>>516 なるほど、getcwd()とかが使えそうでござるな。
後は/ をセパレータにしてトークン分割すれば簡単っぽいでござるな
ライブラリ作らなくても、boost 使えば楽勝っぽいでござる。
キモい…
519 :
デフォルトの名無しさん:2009/09/07(月) 10:40:26
if文の少ない科学技術計算だと、Core2QuadとCore i7どちらの方が向いていますか?
>>519 if文の多少はコアの違いに(それほど)影響しません。
結局メモリ帯域がCore2に比べてi7はダンチだから、そっちが効くんジャマイカ。
なんたって、メモリコントローラ内蔵+3chインターリーブだよ?
523 :
デフォルトの名無しさん:2009/09/17(木) 21:19:31
コンパイル時に、gcov用オプションをつけたら
セグメントエラーとなりました。
ソースは変わらないのに、
コンパイルオプションにより
メモリエラーが起きる原因は何なのでしょう??
524 :
デフォルトの名無しさん:2009/09/17(木) 21:37:44
最初はプログラミングをしたいがためにUbuntuを入れたのですが、(前までWindows上でプログラミングをしていました。C言語とアセンブリ言語
ええまぁ・・・ブラッディマンディの主人公に憧れて入れたわけです。
ただ・・・とりあえず、RUNNING Linux入門bash、GNUソフトウェアプログラミング、等の書籍を買いました。
ええ、なんというか何から手をつけていいのかがさっぱりな状態になりました。
先人たちの道が載っているサイトなどないでしょうか?
まずは何から学び何を作りあげていったのかなどなど、
>>523 原因は一概に言えないよ。コンパイラオプションが違えば
生成されるバイナリも変わるし、コンパイラやライブラリの
バグを踏んでしまうかもしれないし…
折角のチャンスだからコアを取って解析してみては如何?
>>523 バグありでたまたま動いていたプログラムが、条件が変わってバグが
覚醒してしまうのはとても良くある事。コンパイラを疑う前に自分の
プログラムを疑いたまえ。
典型的なパータン:初期化してないメモリ使ってる。
>>524 定番はここら辺かな。
・システムコールを叩いてみる
・/proc や /dev の情報を使ったプログラムを書いてみる
・curses を使ったプログラムを書いてみる
・色んなアプリを片っ端から ./configure && make してみる
・そのアプリを改造してみる
個人的な意見だけど、プログラマにとって UN*X が嬉しいのって、
マイナー言語のサポートが手厚い所じゃないかと思う。
なので SML, OCaml, Haskell, Scheme, CL, Smalltalk 辺りで
遊んでみると良いかも。
あと、暇な時に /usr/include の下を読むと結構勉強になると思う
>・/proc や /dev の情報を使ったプログラムを書いてみる
これはやめとけ。POSIXコンプライアンス違反の悪癖が付いてしまう。
>SML, OCaml, Haskell, Scheme, CL, Smalltalk 辺りで
>遊んでみると良いかも。
これは良いと思う。プログラマとして、ポインタ、再帰の次に、λ計算は
マスターしとくべき。
>POSIXコンプライアンス違反の悪癖が付いてしまう。
これは実害無いから気にしなくてオケ。
UNIXで動かなく成ってしまうじゃん。Linux専用に成って糞。
最初はプログラミングをしたいがためにUbuntuを入れたのですが、
Unixの特定の実装に依存してることを意識しながらなら、
そういうプログラミングも悪くないと思うけど。
どうせシグナルとソケットとマルチスレッドを使ったら非互換の嵐なのだし。
POSIXコンプライアントな範囲なら使っても互換性保てる。
正直、POSIXスレッドは糞だと思うが、シグナルとソケットは
無問題。
Linuxはディストリによって流派が違ってたり、当初の謳い文句
とは裏腹にPOSIXに準拠してないから、糞。ダグラス・カマーに
騙される奴大杉。
数MBのバッファにトランザクション的な操作、
1.最初にバッファの内容を記録、
2.数10KB程度を修正、
3.条件を満たさなければ記録した状態に戻す。
という処理をしています。
外部ライブラリを用いて修正しているため、
変更箇所を逐一記録するのは難しい環境です。
このバッファをコピーオンライトで管理しようと
1.mprotect()でバッファを書き込み禁止、
2.バッファに書き込みがあったら
3.SIGSEGVのハンドラでコピー&書き込み許可
というように実装してみました。
車輪の再発明をしているような気がするのですが、
メモリ同士のコピーオンライト手法の定番を教えてください。
何で書き込み要求があったときにコピーしないのか不思議
・外部ライブラリ関数を呼び出す前にコピーするには大きすぎる
・実際書き換えられる部分は少ないが場所は不定
・外部ライブラリ関数はバイナリ提供で変更できない
って条件なんでしょ。
>>535でいいじゃん。
fork でいけんじゃね
要件はいまいちわからないが、copy-on-write をユーザレベルで
エミュレーションするなら
>>535 でいいんじゃない?
Linux初心者で初めてのLinuxプログラムするんですが、
たとえばUbuntu8.04でコンパイル作成したプログラムは
他のディストリでも問題なく動くんですか?
Ubuntu8.04(x86)で作成したプログラムをたとえばFedra9(x86)でも動かしたい
あと、カーネル2.6上で動作するプログラムはカーネル2.4でも動作するんですか?
どもです(´・ω・`)
>Ubuntu8.04(x86)で作成したプログラムをたとえばFedra9(x86)でも動かしたい
yes(ただしlibxxx.soのバージョンによる)
>あと、カーネル2.6上で動作するプログラムはカーネル2.4でも動作するんですか?
no
543 :
540:2009/10/12(月) 01:30:46
>>542 熱烈感謝
すいません、まだlibxxx.soが何なのか(winのdll見たいなもの?)わからないですが
可能性は高いと
2番目は無理ですか。コンパイル指定でWin98・XP両方で動くプログラムが出来るってわけには
いかないということですか。
標準ライブラリが同じならカーネル違っても動くんじゃね。
素人にデタラメを教えるスレです
>>543 ubuntu←→fedora
プログラマからみて、xpとvistaよりも違わない
バイナリパッケージ管理者からみると、95系とNT系くらいは違う
2.4←→2.6:
XPのSP1とSP2よりも違わない
デバイスドライバ管理者から見ると違う場合もあるが、それはデバイスに寄る
>>543 ソースで配布するのが基本だから
同じバイナリが他のマシンで動くかには皆あまり興味がない。
構成も人によって違うし一概には言えない。
ソースで配布すれば、ディストリどころか、x86<->amd64、
あるいはSPARCやPPC、ARM、MIPSでも動く。
上にも出てるPOSIXの範囲で書いていれば確実に動く。
Use the source, luke!
それは意味が違う。 > UTSL
ソースとともにあらんことを
>>548 そうはうまくいかないのが世の常でのう。
32bit-little endianじゃないCPUも世の中にはあるんだ〜
てなことを叫びたいことがたまにある。
それはプログラマがカスいだけ
まあ、実際にやってみりゃわかるよ。
バイナリでデータをファイルに保存する、なんてことをやらなければ、あとは大抵OK。
とか書いとけば、駄目な例をこれでもかこれでもかとあげてくれるだろう。
ソースで配布した時に、コンパイラ違ってイクナイことになることない?
たとえば、ICCで自分作って、相手GCCとか、またその逆
GCCでも4,3,2メジャーバージョン違うとイクナイってこと無い?
./configre で
一項目チェックするのに秒近くかかっているのを見ると
(ccやgccだけ探して)configcheck.cとでもいうのを配布して
その場でコンパイルして実行するシステムにした方が
速くなるんじゃないかと思ってしまう。
GNUはshだけで可能なことにこだわっているみたいだが。
> 32bit-little endianじゃないCPUも世の中にはあるんだ〜
今時、32bit を前提にしてるのは大問題なんだが………
little endian じゃないハードしか使ったことがない奴が大量にいるよ
ものによったら「右端 bit0」てな感じで bit 番号ひっくりかえってだぜ
> ものによったら「右端 bit0」てな感じで bit 番号ひっくりかえってだぜ
すまん、さゆうぎゃくだったわ
>little endian じゃないハードしか使ったことがない奴
さすがにWindowsを使ったことがない人はほとんどいないと思われます。
>>559 あうあう…
酔っぱらって2chに来るもんじゃないな、すまん
>>556 configureスクリプトは環境(コンパイラ、ライブラリ)の確認だけじゃなく、
Makefileを生成したり、xxx.inファイル中の変数を環境に合わせて置き換えてxxxファイルに変換する機能もあるし。
移植性が要求されず、上記の機能が要らないならMakefileだけでやってみたらいいと思うよ。
>>556 あれはいちいちコンパイルしてみて結果を見てるんだよ
コンパイラを色んな条件で呼び出すからシェルスクリプトの方が都合がいいし、
そもそもやってること自体が重いので、シェルスクリプトやめてもたいして軽くならないよ
little endian 前提で書かれたプログラムでも
2バイトコードのテキストファイルの保存は
無意識で big endian になってたりするから
なんだかなぁなんだが
構造を持つバイナリデータを保存したい場合には、
XDRを使っているけど、そんなのは常識?それとも非常識?
>>556 > (ccやgccだけ探して)configcheck.cとでもいうのを配布して
> その場でコンパイルして実行するシステムにした方が
そのソースをポータブルにするためにautoconfに頼るわけですね?
>>559 ・PPC/68K Mac
・Solaris/SPARK
・HP-UX/PA-RISC or Itanium
等を専門でやってる人間は、そりゃ大量にはいないが
殆どいないというほど少ないだろうか。
少ないかもなあ。
HPやSunの社員でもx86も考慮したコード書いてるしな。
Mac OS Xにいたってはfat binary…
一昔前であれば、Windowsはターミナル代わりに使ってるけど、
開発ターゲットはUNIX(Solaris/HP-UX/AIX)のみというUNIXデベロッパは
多かったと思う。
でも今の時代はLinux/x86も優勢だから、そんな人は少ないだろなあ。
生きづらい時代になってしまったもんだw
開発ターゲットが非x86という人はそりゃ沢山いるだろう。
572 :
567:2009/10/15(木) 09:57:03
お、うっかり。失礼しやした。
>>559 Windowsを使うことはあるが、Windowsで使うプログラムを書いたことはないよ
574 :
デフォルトの名無しさん:2009/10/16(金) 19:12:51
Linuxのカーネルを弄れる人は日本に何人ぐらいいるのでしょうか?
企業の中でケータイやHDレコーダ用に、とかいうレベルなら結構いるんじゃないか?
lkmlで名前が通る人というと10人ぐらい?
576 :
デフォルトの名無しさん:2009/10/16(金) 19:22:37
>>575 そう、、、ですか
皆さんはハッカーなんですか?脆弱性を突くようなコードをズババッと書いちゃう人なんですか?
>>574 弄るだけでいいなら、必要なのは弄りたいという意思と多少のCの知識だけでしょ。
分からない事があってもググれば結構情報は出てくるし、何か実現したい事があるなら、
それを達成出来るかどうかは単に時間の問題だと思う。
ただ、弄った物を大元のソースツリーに反映出来る人はかなり限られてくると思うけど…
578 :
デフォルトの名無しさん:2009/10/16(金) 20:08:03
ここにいる人達は職場でlinuxを使ったりしますか?
ここ的にはLinuxってUnixなんですか?
>>576 ここの先生方は、Linuxのカーネルをめちゃくちゃ書き換えた俺俺カーネルを
使っているような人ばかり
UNIXの定義が難しいけど僕はLinuxはUNIXでいいとおもってまつけど(´・ω・`)
犬糞とUNIXを混ぜないでほしい
MacはUNIXだけどね
LinuxもMacもUNIXでいいんじゃねえか?
少なくとも、このスレの中では
LinuxでいくらプログラミングをしてもUNIXについては何一つわかるようにはならない。
Mac使いこそ真のプロフェショナルなUNIX使いであることをお忘れなく。
マカーを装った煽りかよwww
面接などで
「今までにどんなOSを触った/プログラミングの経験があるか」
Windowsのみの場合
「Windowsのみです」
Linuxのみの場合
「Linuxのみです」
FreeBSDの場合
「FreeBSD、つまりUNIXですね」
面接官「いやFreeBSDはUNIXじゃないからwwww(pgr」
Macのみの場合
「Mac、そしてUNIXですね」
面接官「なるほど経験豊かだね」
これがマカーが真のUNIX使いたる証拠でもある。
そういう微妙なOSばかり挙げてないで
Solaris 使おうぜ
1つのOSだけで経験豊かだとはあまり言えない
1つを深堀しようとすると自然と横にも広がる物じゃないかな
「広く浅い知識」と専門分野に関する「深い知識」、どちらも大切って話かと
実際大人になってからはじめてわかったことはいっぱいある
その殆どはわかったときには既に手遅れだったものばかりだ
>>587 そういう君はもちろんSolarisからの書き込みだよね?
AIXから失礼します
押し入れから出してきたユニボックスからこんにちわ
「UNIXシステムコールデスクトップリファレンス」ってオライリーあたりで無いかな?
RYFM
597 :
595:2009/10/27(火) 13:30:04
まあとどのつまりはそうなんだけど、他のジャンルでもいろいろ出してるんだから、
一冊くらい増えても良いじゃないのと思ったり思わなかったり。
例えば「vi デスクトップリファレンス」には主要な vi variant も載ってたりするので、
メジャーどころは適当におさえてあるという方向で。
600 :
デフォルトの名無しさん:2009/10/27(火) 15:30:38
今までにどんなOSを触ってきましたか?
俺 「エミュレータ上ではMS-DOS, Windows3.1,Windows 95,Windows98です、本機では XP, 7, Linux, などです。」
官 「経験豊かですね、そこまで多くのOSを触ってきた理由を教えてください」
俺 「先人の道を辿る事は、ハッカーになるための大きな手助けとなるのです。」
管 「失礼ですが、院卒ですか?」
俺 「いえ、専門学校卒です。」
601 :
デフォルトの名無しさん:2009/10/27(火) 15:47:08
試験管≒試験官
602 :
デフォルトの名無しさん:2009/10/27(火) 16:55:10
Unix上でプログラミングを始めて、アセンブリソースコードに日本語のコメントがあるのは美しくないと
漠然としていますが、そう感じるようになりました。
英語のコメントをつけていくべきでしょうか?
ソース触るのが日本人限定ならどうでもいいんじゃ
>>603 例えば
basi:
; 日本語のコメント
xor ax,ax
mov ds,ax
mov es,ax
ラベルのbasi:よりも日本語のコメントが目立ってしまうと、ずうずうしさを感じます。
余白を取ることで美しさが戻りました。
ラベルはマイナス方向へインデントするもんじゃないのか?
逆に、コメントが日本語だと見た目がそこだけ浮くので、コードと関係ない
記述として、コードだけを追いたい時に読み飛ばせて便利という説もあるな。
自作ライブラリは普通に日本語コメントいれてましたがなにか
609 :
デフォルトの名無しさん:2009/10/28(水) 20:14:51
POSIX書ください。
どもです(´・ω・`)
612 :
デフォルトの名無しさん:2009/12/15(火) 18:53:26
KDevelopについて質問があります。
まず、kdevelopでC言語のプロジェクトを生成したのですが、
ビルド、デバッグをしても生成されるのは.oファイルのみで
ここからどうやって.outファイルを生成するのかがわかりません、
ご教示ください。
613 :
デフォルトの名無しさん:2009/12/15(火) 20:28:51
複数のfopenをするときのエラー処理ってみんなどうやってる?
1つ2つならどうでもいいんだけど、5とか6とかになると
fopen失敗時の処理がうざい
数がもっと多いときはあきらめてそれなりの処理を書くけど
>>613 泥臭いけどこうする。5個以上になったら設計から考えなおす。
fp1 = fp2 = fp3 = fp4 = NULL;
if ((fp1 = fopen(...)) == NULL)
goto openerror;
if ((fp2 = fopen(...)) == NULL)
goto openerror;
if ((fp3 = fopen(...)) == NULL)
goto openerror;
if ((fp4 = fopen(...)) == NULL)
goto openerror;
...
openerror:
if (fp1 != NULL)
fclose(fp1);
if (fp2 != NULL)
fclose(fp1);
if (fp3 != NULL)
fclose(fp1);
if (fp4 != NULL)
fclose(fp1);
return;
}
ああ、最後のfcloseの引数は1,2,3,4なw
>>613 全部同じ処理なら、配列使ってループにする手もある。
>>614 どのファイルでエラーしたかメッセージ等に出したい場合もあるし、
そう単純に済ませられない場合も多い。設計から見直すのは同意
617 :
613:2009/12/16(水) 13:14:22
>>614 やっぱそれ系の書き方になるよなー
こういうときはやっぱgoto使っちゃうよなー
>>614 俺はgoto派なんだけど、goto使わない派の人はこうらしいね。
if ((fp1 = fopen(...)) != NULL) {
if ((fp2 = fopen(...)) != NULL) {
if ((fp3 = fopen(...)) != NULL) {
if ((fp4 = fopen(...)) != NULL) {
/*処理*/
fclose(fp4);
}
fclose(fp3);
}
fclose(fp2);
}
fclose(fp1);
}
return;
error = fp1 = fp2 = fp3 = fp4 = NULL;
error |= !(fp1 = fopen(...));
error |= !(fp2 = fopen(...));
error |= !(fp3 = fopen(...));
error |= !(fp4 = fopen(...));
if (!error){
...
}
/* 配列の方が良ければ配列でループ */
if (fp1) fclose(fp1) else warn("hoge fp1");
if (fp2) fclose(fp2) else warn("hoge fp2");
if (fp3) fclose(fp3) else warn("hoge fp3");
if (fp4) fclose(fp4) else warn("hoge fp4");
return;
}
なんで C++ 使わないの?
>>621 デストラクタ使うだけでもだいぶ違うだろ。
例外使うのが妥当な場面でもあるだろうし。
>>620 元お代(
>>613)がfopenだから、皆はそれに合わせてレスしてる。
fopen使うってことは、暗黙でC言語が前提だと想定してるのさ。
>>622 複数ファイルをオープンするためだけに、やれデストラクタだの
例外だのを持ち出すのか?OOP脳の発想だな。
OOP は関係無い
C++ は OOP 言語としては今イチだし
>>623 クラスにカプセル化するのはとてもたいへんなこと、とでも思ってるんだろうか。
>>623 C++ でも fopen() 使えるし。処理によっては実際に使うし。
627 :
618:2009/12/18(金) 06:40:53
なんでC++使わないのとか言うんなら
C++の例を書いたほうがいいのでは?
これも人によって色々あるだろうし。
628 :
613:2009/12/18(金) 15:30:53
>>619 fp1で失敗してもfp2空オープンするのってなんかもったいないよね
とか書こうと思ったけど、これってあれか
errorしてたら次以降評価されないのか?
これは便利っぽいかもしれんかも
628のような勘違いをさせる余地があるということで、
>>619は駄目コード
628を排除できたんだから目的を達したんじゃねーの?
fp1 = fp2 = fp3 = fp4 = NULL;
if (fp1 = fopen(...) && fp2 = fopen(...) && fp3 = fopen(...) && fp4 = fopen(...)){
...
}
/* 配列の方が良ければ配列でループ */
if (fp1) fclose(fp1) else warn("hoge fp1");
if (fp2) fclose(fp2) else warn("hoge fp2");
if (fp3) fclose(fp3) else warn("hoge fp3");
if (fp4) fclose(fp4) else warn("hoge fp4");
return;
}
633 :
613:2009/12/19(土) 14:03:17
>>630 error = error || (!fp2=fopen
ってなってれば大丈夫ってこと?
まぁ発想は面白いと思った
なぜ上から目線
||=とか&&=とかの演算子があれば良かったのに。。。
# ついでにいうと、p=p->nextと書くたびに p->=nextってねーかなぁと思う
マジ基地
mallocで確保したメモリが全部ゼロクリアされてるって、誰が決めたんだ!?
誰も決めてないよ
OS は、セキュリティ上、他のプロセスが手放した物理ページを、別のプロセスに
割り当てる場合は、元の内容が読めないように考慮するわけだけど。
それと malloc と何か関係が?
POSIXではmallocした領域がどうなっているかは定義してない。
"value is unspecified"と記述されている
しかしglibcなどゼロクリアが謳われている実装もある。
ゼロでクリアしたものが欲しけりゃcalloc使うだろ普通。
> しかしglibcなどゼロクリアが謳われている実装もある。
どこにそんなの書いてあるんだ?今glibc-2.11のmemory.texinfoを見たが
> The contents of the block are undefined; you must initialize it yourself
> (or use @code{calloc} instead; @pxref{Allocating Cleared Space}).
と書いてあるようにしか見えないが。
>>642 Linuxでは最近またmallocでゼロ保障がはじまったらしいよ
詳しくは ゼロページ malloc でググれ
それはglibcでなくてkernelからメモリもらってくるときの話でないかい。
あーそうかも。さらにglibcが細切れに配給するときはこの限りじゃないな。
ググったページ良く読んでから書けよタコ
いくら読んでも理解できなかったのだろう。
648 :
デフォルトの名無しさん:2009/12/23(水) 01:33:30
CPUの種類や周波数を取得する方法を教えてください
fopen("/proc/cpuinfo", "r")
>>613 FILE *fp1, *fp2, *fp3, *fp4;
int errloc;
switch(errloc =
((fp1 = fopen(name1, "r")) != NULL) ?
((fp2 = fopen(name2, "r")) != NULL) ?
((fp3 = fopen(name3, "r")) != NULL) ?
((fp4 = fopen(name4, "r")) != NULL) ? 0 : 4 : 3 : 2 : 1) {
case 4:
fclose(fp3);
case 3:
fclose(fp2);
case 2:
fclose(fp1);
case 1:
fprintf(stderr, "error in file %d\n", errloc);
return 1;
break;
case 0:
break;
default:
fprintf(stderr, "unexpected error\n");
break;
}
>>650 今まで出た案の中でダントツにダサい方法か。
自分も
>>650がダントツにダサイという
>>651の意見に賛成。
理由は、無意味な識別子0,..4を導入しているから。
また、条件演算子(? :)の使い方も不適切なように思える。
今まで出て来た提案の中から最もエレガントな解答は、
>>619。
代入演算子(|=)が勘違いさせる余地があるという意見もあるが、
それは単にC言語に不慣れなだけ。
>>619のような代入演算子の使用は、
UNIXのドライバやライブラリでは当たり前のように使用されている。
次点は
>>614。自分はgoto使わない派だけど、
>>614の用法は適切だと思う。
>>619,614の何が良いか?だけど、ロジックのテーブル化(配列変数)が可能である事。
他の解答は、どれもファイル数が増えるたびにロジックを変更する必要がある。
>>619,614をテーブル化したものであれば、テーブル宣言を変更するだけで、
ロジックそのものは変更せずに対応できる。
たかがfopen、されどfopen。皆の解答を楽しませてもらったよ。
>>654 同意。
fopenに限らず必要ないopenはやるべきではない。
よって
>>614が最良。
通常の流れと異なるエラーケースで無駄があったって俺は気にしないな
まぁ異論は認める
それが時間のかかるデバイスのopenでも?
goto使わない派ってアホだな
100個の何かをopenするときに、最初の1個でエラーになってるのに、残り99個もopenして平気なんだろうか。
>>659 常識的な人は、そこまで多いとループにする。
662 :
653:2009/12/24(木) 20:52:35
>>654,655,659
>>619のエラー時の無駄なfopenが気になるのなら、
>>633の方法を使えばいい。
>error = error || (!fp2=fopen
OR演算子(||)を怖がる人がいるみたいだけど、AND演算子(&&)は
>>632のように
自然に使いこなしていると思う。要は使い慣れているかそうでないかの違いではないかと。
無駄なオープンする馬鹿だから、
「OR演算子(||)を怖がる人がいるみたいだけど」
って考えも、無意味なな妄想に思えないんですね?
お医者さんに行った方がいいですYO!
「OR演算子(||)を怖がる人がいるみたいだけど」
「OR演算子(||)を怖がる人がいるみたいだけど」
「OR演算子(||)を怖がる人がいるみたいだけど」
大切なことだから三回言いましたw
664 :
613:2009/12/24(木) 22:42:19
まだ盛り上がってたのかw いろいろマジ参考になるなぁ
せっかくだから 『ぼくのかんがえたさいきょうのほうほう』 も書くわ
if( matomete_open(&fp1,&fp2,&fp3,&fp4) ){
// 処理
}
matomete_close(&fp1,&fp2,&fp3,&fp4);
メリット:
本当にあとで読みたいメインロジック部は簡潔。
fpだけじゃなくて他になんかいろんなリソース混じってるとき楽ができるハズ。
デメリット:
めんどくさい。関数増えるし。
あと、超めんどくさい。openの中でバグってたときとか。
665 :
613:2009/12/24(木) 22:55:30
>>653 一瞬騙されかけた俺の言えた台詞じゃないが、
>>619はダメだと思う
理由は無駄openがあるから
もしfopenじゃなくopenで、対象がデバイスファイル(犬厨でゴメンヨ)とかだと
openによる副作用あったりしてこわいしね
つか、fopenでもwで開いたらなんか副作用あったよね?atimeだっけ?
優れたロジックってのはシンプルで何にでもなんとなく応用が効くべきで
fopen限定ッスとかそういうのはなるべくナシにしといた方がいいと思うんだ
バカか?
全部openしようとしてる状況で副作用があるからダメとか、バカすぎる
どんなに頑張ってもお前のいう副作用は防げないだろうが
ぽかーん
はっきり言って、このスレでファイルとそれ以外のopenを分けて考えるなんて、筋が悪すぎる
ぽかーん
ぽっぽかぽーん
gotoがだめでもbreakが許容できるなら以下でも。
do ; while (0); をマクロ以外で使うのはきもいとか言われるかもしれんが
do {
fp0 = fp1 = NULL;
if (! (fp0 = fopen(...)) ) break ;
if (! (fp1 = fopen(...)) ) break ;
// ...
} while (0);
// さらにきもく
#define ffree(fp) (fp ? fclose(fp) : 0)
ffree(fp0);
ffree(fp1);
fp0 = fp1 = NULL;
趣旨からずれるけど
>>619 って errno 保存しておかないと warn が最後のエラーを他のファイルのエラーとして報告しちゃうような。
perror 系は原因のすぐ近くで使うほうがいいかも。それはそうと僕は断然 goto ですねえ。
if (! (fp0 = fopen(...)) ) goto L0;
if (! (fp1 = fopen(...)) ) goto L1;
// ...
fclose(fp1);
L1:
fclose(fp0);
L0:
ながながとすまん
それどころか、fcloseのerrnoが、次のelse節で報告される可能性すらあるなww
まあwarnxに変えればいいってだけのことだ
>>672 だよねー。 do{ }while(0); ってキモいよね。すごく便利だけど。
マクロで使うために用意された構文のようだ。
展開して↓なんてのを見た時はキモいを通り越して感動すら覚えた。
switch () {
do {
case 0:
} while (0);
}
たまたま、マクロを関数の構文
foo();
で書いたものを展開すると、セミコロンがうまく収まる構文だった、
というだけで、「用意された構文」ということはない。
もしかして、推量じゃなくて様態(「人がゴミのようだ」)の「ようだ」だった?
このように使われる事を予想して神が用意させた構文だよ。
>>675 それは、switch の「case なんて所詮ラベルですよ」な仕様
あったればこそだろう。
defaultにgotoしたいとおもうことはままある
LinuxでUSBメモリを挿したとき/dev/sd*のどこに認識されたか調べるにはどうしたらよいでしょうか?
mount
>>680 /var/log/messagesにログが出てない?
>>681 それはマウントしてないとわからないので
>>682 それしかないんですかね?
人間が見る分にはそれでいいんですがソフトでやるのにもう少しスマートな方法があればいいんですけど
dmesgを見るとか、udevのルールを書くとか。
lsdevみたいな事をする?
hal/devkitに接続してイベントをもらう
勉強中の身だけど、/dev/by-id/とかそういうのないんだっけ。
その辺りを見張ってるとか。
キーボードから配列変数に数字を入力し^Zを押すか100個入力すると,入力した値
を小さい順に表示するプログラムを「交換法」を用いることとする.
この問題がわからないんですけど、お願いします。
^Zを押すまで、ってところが初心者には難しいと思う。
^Dじゃないんだな・・・
なんか計算機が専門じゃない学科の先生が担当してる、プログラミングの課題、って
感じだな。^Z でサスペンドしちゃわない環境なんだから Windows かな。
DOSでは^Z RETURNでEOF
696 :
680:2010/01/28(木) 22:16:11
一応/sysを見ればわかるようにはなりましたが、
今回はudevでデバイスファイル名を固定するほうが簡単なのでそっちにしました
皆さんありがとうございました
>>690 俺でも分からない。まず問題文が日本語として解釈できない。
「配列変数」なんて新語は出るわ、目的語が複数あるわ、
指示なのか条件なのか判別できないわ、、、
問題として成立しそうな解釈を推測することはできるけど、
それが正しい保証はないからやっぱり正解を出すことは難しい。
>>697 出題者の意図に関係なく、仕様を完全に満たすプログラムを作ることは可能。
出題者の意図を無視することがポイント。
「100%書いてあるとおりに作ってあんだろ、金出してとっとと失せろ」と
完全に切るつもりの顧客の最後の仕事をするときの姿勢がそれだ
悪い噂は千里を走る。
>>698 チューリングマシンの停止性問題とかあるし、
あらゆる仕様に対して解が存在するわけではないでしょ。
なんていう理論的前提の上で、
「実際は、出題者の意図を無視してでも、
コンピュータが実行可能なプログラムを作らにゃならん」という話なら同意。
もしくは、仕様には沿っていなくても要求に沿っていればおkって気もする。
702 :
デフォルトの名無しさん:2010/02/10(水) 10:38:42
OS名(FedoraとかUbuntuとか)とそのバージョンを取得する方法を教えてください。
>>702 OSならuname(2)だけど、それだとディストリビューションまではわから
ないので Linux では /etc/lsb-release の中を見るとか?
>>702 grep title /etc/grub.conf
705 :
デフォルトの名無しさん:2010/02/12(金) 10:09:06
でもそれって、すべてのUNIXで可能な訳じゃないよね><
linuxはunixじゃ無いもの。
Fedoraはunixじゃないもの。
すべてのUNIXにディストリビューション名なんて概念があるわけじゃないし。
特有の事情を知りたいなら特有の方法を使うのも当たり前では?
709 :
デフォルトの名無しさん:2010/02/13(土) 11:50:38
リアルタイムでのCPU使用率の取得方法を教えてください
そのOSのマニュアルを読む。
システム依存の方法であろうという発想は浮かばないのだろうか?
>>709 自分で処理の重いスレッドを立てて
それがどの位回るかで計測すれば良いんじゃね?w
いいわけない
コア数分だけスレッド立てなきゃダメに決ってる。
CPU ごとにスレッドをわりあてる部分は
OS 依存になっちゃうかなぁ。
いっそスケジューラにプロファイリング入れるとか
ACCT 有効にするとかまでやっちゃえば?
まあ、/proc 使っていいなら stat のポーリングで
top コマンドみたいにやればいいんだけどさ。
libproc.so って /proc の出力を露骨に sscanf() してるから
あんまり汎用性ないよなーと思って。
求められているのは、秘密のOSでも動作する方法だからOSに依存するものはダメ
じゃあ SNMP で取れば
>>718 libproc.soってそんなことしてたのかよ・・・すげーな
>>721 Liuxは/proc最強って思ってる節があるからね…
Linux に限らず /proc/self とか使うよね?
真っ当な商用UNIXに/procなんぞありませんが何か?
>>723 *BSD系だと nlist() の方が詳細な情報を得られるので、そっち使うことの方が多い
# カーネル内のシンボル知ってる必要があるけど
AIX, HP/UX, Solaris全部あるようだけど、真っ当な商用UNIXって他に何?
> AIX, HP/UX, Solaris全部あるようだけど
Linuxがやりすぎてるだけだと思う。少なくとも Linux ほど何でもありにはなっていない
セキュリティ問題の温床とも呼ばれている
Linuxの実装は、つつけばいくらでもhack出来ると思うよ
# kernel ソース読めば、思いつくだけでも………
そんな事は聞いていない。
/procの無いまっとうな商用UNIXとは何だ?
>>729 あ、/proc のないまっとうな商用UNIXってないと思うよ
# すまん二重否定になってる
Linux的な意味で「まともな/proc」って言うと全滅らしいよね
ってだけ
きっと UNIX V8 に会いに行ったのさ
ずっと昔、そこが procfs の生まれた所だから
タイムパトロール隊がアップをはじめました
┌─┐
│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘ おっぱい!おっぱい!
735 :
デフォルトの名無しさん:2010/03/10(水) 07:52:22
タイムゾーンを得る方法を教えて
#include <sys/time.h>
struct timeval t;
struct timezone tz;
gettimeofday(&t,&tz);
printf("%4d/%02d/%02d (%s) %02d:%02d:%02d %02.2d00 (%s)",
(t.tm_year)+1900, t.tm_mon+1, t.tm_mday,
weekday[t.tm_wday], t.tm_hour, t.tm_min, t.tm_sec, -tz.tz_minuteswest/60,localtime(t)->tm_zone);
>>736 gettimeofdayは廃止予定だよ
なんだclock_getres(2)って。グダグダじゃねーか。なめてんのかコラ。
なめて
>>735 char buff[256];
puts("Please teach me Timezone >");
gets(buff);
┌─┐
│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘ おっぱい!おっぱい!
742 :
デフォルトの名無しさん:2010/03/20(土) 01:59:39
プログラム自身が使用しているメモリ量と、システムのフリーメモリ量を取得する方法を教えてください
744 :
デフォルトの名無しさん:2010/03/20(土) 06:42:39
Linuxなら?
ならけん?
>>744 system("cat /proc/meminfo");
system("cat /proc/self/stat");
かならずシェルを使った回答でボケ?なきゃいけない決まりでもあるの?
決まりはないけど、何にもレスがないと寂しいじゃんw
つか、
>>743 にしたって、結局中で /proc の
パースやってたり、その元ネタを直接 Kernel から
もらってくるだけだし、もっとストレートに教えてあげたほうが
親切じゃね?
カーネルのデータをカーネルから貰って何が悪い!!
Linux では Kernel のデータは /proc と /sys 経由で
提供されるから、プロセスについては /proc を使うのが
正当って話。
Linux がどうかしたの?
気に入らないけど、仕事で相手にせざるを得ない。
最近は開発環境ですらEmacs入れさせてくれないのでviをいやいや使ってます
そろそろ好きになれよ
せめてvimを
757 :
デフォルトの名無しさん:2010/03/26(金) 09:13:42
CPUのload averageを取得する方法を教えてください。
docs.sun.com、OCACLEってロゴになってる!
今回は system() や /proc は自粛w
761 :
デフォルトの名無しさん:2010/03/27(土) 14:12:11
>>760 只のちゃちゃだが
$ man system
NAME
system -- pass a command to the shell
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <stdlib.h>
int
system(const char *string);
system("man -s 3 system"); な。
763 :
デフォルトの名無しさん:2010/03/30(火) 15:51:47
GMTとの時差ってどうやったらわかるの?
TZのうしろについてる数字みればいいんでないかい。
tzfile.h使ってtimezone設定のファイル読め。
>>763 localtime - utctime
tm_gmtoff
768 :
デフォルトの名無しさん:2010/04/07(水) 18:31:39
済みません、質問です。
mmapを使ってマッピングした領域に書き込んだあとで、
msyncでMS_ASYNCを使って、ファイルへの非同期書き出しを行った場合に、
その書き出しが完了したかどうかを知るには
どうしたらいいのでしょうか?
769 :
デフォルトの名無しさん:2010/04/08(木) 06:10:38
>>767 tm_gmtoff が無いOSもあるので、どこでも動く実装にしたいなら
localtime -> timelocal して difftime かね。
>>770 違った。gmtime→timelocal (もしくはlocaltime→timegm)
772 :
デフォルトの名無しさん:2010/04/09(金) 17:22:04
>>765 どの関数で読み込むのでしょうか?
それともINT_MAXのようなかたちで読むのでしょうか?
どうか教えていただけないでしょうか?
すげぇ、ここまでスレを読めていないとは
>>763 #include <stdio.h>
#include <sys/time.h>
int main () {
struct timeval tp;
struct timezone tz;
gettimeofday(&tp, &tz);
printf("UTC +%d hours¥n", tz.tz_minuteswest/60);
return 0;
}
gettimeofdayのtzはobsolete
The use of the timezone structure is obsolete; the tz argument should normally
be specified as NULL. The tz_dsttime field has never been used under Linux;
it has not been and will not be supported by libc or glibc. Each and every
occurrence of this field in the kernel source (other than the declaration) is
a bug. Thus, the following is purely of historic interest.
776 :
デフォルトの名無しさん:2010/04/19(月) 22:29:57
ハードウェアからの受信割り込みを受信毎に割り込みかけるのではなく、ポーリングで監視して割り込み
処理するにはどうすればよいのでしょうか?
kernelをどのように設定すればいいのでしょうか
splhigh() とかで
splhighでは、割り込みそのものを禁止するのでは?
ポーリングで割り込みを見に行くようになるのでしょうか
>>776 そもそもデバドラがポーリングで動くように作られてないと無理だろ。
FreeBSDならoptions DEVICE_POLLINGでポーリングモードになるが、ただし対応してるドライバのみ。
それともOSとドライバは既に指定されてて、それをポーリング対応させたいってことか?
>>779 はい、デバドラがマニュアル読んでも対応してるかどうかわからなくて
ポーリングの類の記述がなくて。
基本的に受信したらハードウェアに割り込みが入りますよね。
そのあとに、カーネルなりに割り込みかけて、そこからソフトウェアに割り込みかけるんですよね。
そのとき、割り込みが入ってくる頻度を抑えつつ、ネットワークデータをrecv処理したいと思っているのですが
可能なのでしょうか?
カーネルへの割り込みを止めてしまったら、recvしてもデータはとれないのでしょうか?
>基本的に受信したらハードウェアに割り込みが入りますよね。
>そのあとに、カーネルなりに割り込みかけて、そこからソフトウェアに割り込みかけるんですよね。
?
>>781 ネットワークからデータが送られてくるとハードウェアに割り込みがかかって、
そこから、カーネルに割り込みがかかるのではないのでしょうか?
データが到着したよと
あほが湧いてるな。せっかく入学した学校で虐めにでもあってるのか?
>>780 だから何がしたいんだよ? 単にデバイスポーリングの実装概要を説明してほしいだけか?
だとしたらまず日本語勉強しろ。
次。
>>780 お前がそのことを知ってもまるで意味がない。何の縁もないことだから。
>>786 基本的には、
pollで何か来るまで寝る。何か来たら寝た子を起こす。
789 :
デフォルトの名無しさん:2010/04/22(木) 00:47:59
pipe()1つで双方向通信ってできるんでしょうか?
それをしてるプログラムを見て自分で書いてみたんですが
子プロセス側のwriteはうまくいくんですがreadでエラーに
2本必須なんでしょうか
>>789 pipeは書き込み専用と読み込み専用のディスクリプタを作る。
それぞれのディスクリプタで読み書き両方したいのであればsocketpairを使う。
>>788 それって複数のタスクで構成されている場合ですよね
シングルタスクの場合は、寝てる子を起こすというより、ずっとデータがきていないか
while{ recvfrom } で巡回する場合には、割り込みは意識しなくて、きっておいても大丈夫なのでしょうか?
792 :
デフォルトの名無しさん:2010/04/22(木) 05:15:25
CPUの周波数を取得する方法を教えろや
UNIXにはないだろ。
procfsが実装されているOSの内で、どれがUNIXで、どれがUNIXじゃないの?
* Solaris
* IRIX
* Tru64 UNIX
* BSD
* Linux (which extends it to non-process-related data)
* IBM AIX (which bases its implementation on Linux to improve compatibility)
* QNX
* Plan 9 from Bell Labs (where it originated)
/procの下にcpuinfoがあるとだけが決めたんだ?
>>791 だからuserlandの話かkernelの話かどっちなんだよ。
userlandの話なら、該当デバイスがDEVICE POLLINGで実装されてるか
割込みで実装されてるかは判別する必要なんてない。
procfs なのにプロセスと関係無い情報が入ってるってどうなん?
>>802 気になるんだったら
# sed -i.orig 's|/proc|/kernel|' /etc/fstab
# reboot
/proc決め打ちのプログラム多く無い?
>>803 いや、/proc ではなく procfs と書いた筈だが…
そういうのが気にならない人は気にならないんだろうな……
Linux ユーザの全員がそういう人なのではないと信じてるけど………
>>805 まあ、世の中最初の目的から応用が広がって元の名前が体を成さない事は良くあるよね。
名前に無神経な人の周りではそうみたいだね。
>>802 Linuxの思想的に、全てがプロセスでありファイルなんだよ。
CPU の動作周波数がプロセスってどういう思想だw
sysfsってどうなってるんだっけ?
IPアドレスがIPと略されることはよくある
うちのところでIPといえば、IP messengerですが
Intellectual Property でしょ
>>810 procと共存中。結局混乱をもたらしただけだったな
glibcをスタティックリンクにして、その他のライブラリ(具体的にはlibjpegなのですが)を
シェアードリンクにした実行ファイルをgccで作成したいのですが
コンパイルオプションをどのように指定すればよいのでしょうか。
-staticオプションは全部のライブラリをスタティックリンクにしてしまうようなので
今回の目的は達成できませんでした…
gcc ... -Wl,-Bstatic -lc -Wl,-Bdynamic -ljpeg -l...
>>814 Linux のそういう適当な所が好きだわ
適当だって事に気付かずに変な自信にみなぎってる人がいなければもっといい
>>816 ありがとうございます。
-lcがglibcのリンクオプションであること(そして通常は省略されていること)や、
リンカの役割なんかをさっぱり理解していませんでした…
すぐに試せる環境にないのですが、そのオプションを使用してビルドしてみます。
819 :
デフォルトの名無しさん:2010/04/29(木) 10:22:18
WindowsのSetThreadAffinityMaskに相当する関数はないのかい?
あるのもある。
>>802-808 プロセスと関係がないものは /sys に
引っ越そう運動が始まってるよ。
但しジンバブエドル
単に全部procfsからsysfsに引っ越ししてprocfsは互換シンボリックリンクだけの
ハリボテにすればいいんじゃね?
プロセスに関係ないもんは全部、でいいよ。
プロセスの情報はprocfsにあっていい。
そんなのlinuxじゃない。全てを飲み込む痰壺。
下記のu_int ip_hl:4 部分ですが
u_int ip_hl;
これならば、u_int 型(unsigned int のエイリアス)の変数ip_hl と理解できますが
:4 の意味は何なのでしょうか?
: は変数名として使えない筈なのですが、どういう意味があるのでしょうか、
コメントを読めば、ヘッダーの長さと言う事は理解できるとして、文法的な解釈をお願いできないでしょうか。
/* @(#)ip.h 8.2 (Berkeley) 6/1/94 */
struct ip {
#if BYTE_ORDER == LITTLE_ENDIAN
u_int ip_hl:4, /* header length */
ip_v:4; /* version */
#endif
#if BYTE_ORDER == BIG_ENDIAN
u_int ip_v:4, /* version */
ip_hl:4; /* header length */
#endif
u_char ip_tos; /* type of service */
u_short ip_len; /* total length */
u_short ip_id; /* identification */
u_short ip_off; /* fragment offset field */
#define IP_RF 0x8000 /* reserved fragment flag */
#define IP_DF 0x4000 /* dont fragment flag */
#define IP_MF 0x2000 /* more fragments flag */
#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
u_char ip_ttl; /* time to live */
u_char ip_p; /* protocol */
u_short ip_sum; /* checksum */
struct in_addr ip_src,ip_dst; /* source and dest address */
} __packed __aligned(4);
ビットフィールド
ビット・フィールド。K&Rから存在する機構。 文法書読まずにプログラミングしてるのか?
知りませんでした・・・orzありがとう
K&Rは文法書ではないわけだが
後半の参照マニュアルは文法書。引っ込んでろよ。
「文法書」はちょっと違う気もするが、
>>831の突っ込みの酷さに比べたらまし。
というか829は K&R == 文法書 というレスじゃないよね。
あまりに他者を非難したくて目を炯々とさせてばかりいるから
空目するんだと思うの
由緒正しい UNIX プログラムでは
ビットフィールドを使ってはならぬ。
dmrだってbitfield使いまくりだよもん。
V6の頃の話じゃね?
ま、じじいのたわごとはほっておこう
839 :
デフォルトの名無しさん:2010/05/11(火) 09:57:05
どうして、孫が死んだときに親権がお爺さんに移らないんですか?
その思想が知りたい
>>839 リソース喰いの負の遺産は普通なら相続放棄するだろう?
孫が生まれた事を知らないのに、いきなり「孫です」と言われても困るだろ。
>>839 > 孫が死んだときに親権がお爺さんに移らないんですか?
だれの親権だよ。曾孫?
孫が死ねばiPadでNTTと契約出来るようになるのかな
> どうして、孫が死んだときに親権がお爺さんに移らないんですか?
「どうして、親が死んだとき、子の親権がお爺さんに移らないんですか?」
って事なら、
>>841が答え。
親が子を大量に作って死んだら、お爺さんの下に孫が枚挙して押し寄せてくるだろ。
子プロセスはwaitしないといけないけど、そんなのforkした奴じゃないとわからんから、
お爺さんはどうしていいか分からない。
そして政府に引き取られていくのか・・・
三世一身の法ですな
initプロセス=政府説
子供手当で富豪になれるな。
849 :
デフォルトの名無しさん:2010/05/19(水) 06:10:01
NFSによるネットワーク上のディレクトリだと、endlやflushを使っても書き込まれないことがあります。
ファイルを閉じれば必ず書き込まれるのですが、閉じずに書き込む方法はないでしょうか?
NFSの設定を変える方法でもOKです。
よろしくお願いします。
reopen
>>852 The fsync() system call causes all modified data and attributes of fd to
be moved to a permanent storage device. This normally results in all in-
core modified copies of buffers for the associated file to be written to
a disk.
>>853 NFSだっつってんのにwwwアwwwホwww
seek(0)
seek(tell())
>>854 closeかfsyncの呼び出しでNFSクライアントはcommitリクエストを発行する。
commitを受け取ったNFSサーバはバッファを書き込む。
お前のNFSは違う動作をするのか?
ファイル katの中身が ls のとき
katの内容を読んでコマンドラインにうちこむ、
ということは自動化できますか?
`cat kat`
実行ファイル a.out を実行中に
a.out の末尾に
コメントアウトしながら
情報を付け足して、後で付け足した部分だけを取り出して保存してa.out
からは消去、ってできますかね?
>>860 実行中のファイルは書き込みじゃ開けないよ。試しにやってみ。
ETXTBSYになる。
a.outでコメントアウトってどうやるんだろう?
>>860 >>861 まあ、a.outをunlinkして、新たなa.outを書き出せば終了した時に入れ替わるんじゃない?
そういえば,自分自身のコピーを作る際,hashで検出されるのを避けるために
意味のないデータを付加するウィルスがあったな
865 :
デフォルトの名無しさん:2010/05/29(土) 09:33:17
特定の環境変数を取得する方法を教えてください。
getenv(3)
867 :
デフォルトの名無しさん:2010/06/02(水) 09:24:52
getloadavgでCPU使用率の平均値を取得できますが、
コマンド発行時点のCPU使用率を取得する方法を教えてください。
CPU利用率ってのはある時間を区切ってそのうち何割CPUが
働いていたかってことなんだから、ある瞬間の利用率ってのは
そもそも矛盾してるぞ。
>>867 mpstat みたいなのを作りたいの?
870 :
デフォルトの名無しさん:2010/06/02(水) 23:43:28
どこで質問すれば良いのか分からないので、ここで質問させてください。
Ruby/GtkGlExtで3Dの描画をしたいと思っているのですが、
(Open GLやGtkGlExtを使うのは初めてです、RubyやGtkを使って個人用の小物を作ったことは何度かあります)
その際スクリーンに表示し、かつ必要に応じて保存したいと思っているので、Gdk::Pixmap(GdkPixmap)の使用を考えています。
ところが、断片的な資料を色々当たりながら組んでみたところ、
Gdk::GLContext(GdkGlContext)の設定の仕方が悪いのか、ライト等の設定が全く効きません。
問題を再現する(たぶん)最小のソースコードが以下なのですが、(1)をコメントアウトして代わりに(2)を実行させると正常な挙動を示します。
(1)はどこがまずいのでしょうか?
require 'gtk2'
require 'gtkglext'
def draw
GL.Clear(GL::COLOR_BUFFER_BIT)
Gdk::GL.draw_sphere(true,0.2,20,20)
GL.Viewport(0,0,200,200)
GL.Light(GL::LIGHT0, GL::DIFFUSE, [1,0,0,1])
GL.Light(GL::LIGHT0, GL::POSITION, [0.5,0.5,-1,0])
GL.Enable(GL::LIGHTING)
GL.Enable(GL::LIGHT0)
GL.ClearColor(1,1,1,1)
GL.Flush
end
Gtk::GL.init
glconfig = Gdk::GLConfig.new(Gdk::GLConfig::MODE_RGB)
window = Gtk::Window.new
window.set_size_request(200,200)
window.realize
871 :
デフォルトの名無しさん:2010/06/02(水) 23:45:02
#=begin (1)
wingc = Gdk::GC.new(window.window)
pixmap = Gdk::Pixmap.new(window.window,200,200,-1)
glpixmap = pixmap.set_gl_capability(glconfig)
glcontext = Gdk::GLContext.new(glpixmap,nil,true,Gdk::GL::RGBA_TYPE)
glpixmap.make_current(glcontext)
draw
window.signal_connect("expose_event") do
window.window.draw_drawable(wingc, pixmap, 0, 0, 0, 0, -1, -1)
end
#=end
=begin (2)
drawing = Gtk::DrawingArea.new
drawing.set_size_request(200,200)
drawing.set_gl_capability(glconfig)
window.add(drawing)
glcontext = drawing.gl_context
gldrawable = drawing.gl_drawable
gldrawable.make_current(glcontext)
drawing.signal_connect("expose_event"){draw}
=end
window.signal_connect("delete_event"){Gtk.main_quit}
window.show_all
Gtk.main
872 :
870:2010/06/03(木) 23:40:41
すみません、上から読み返してみるとスレ違いな気もしますね。
OpenGLスレで質問しなおすことにします。
スレ汚し済みません。
873 :
デフォルトの名無しさん:2010/08/07(土) 14:31:40
HTML5の本なんてずいぶん新しい本も読んでるのね
HTML5があたらしいって・・
876 :
デフォルトの名無しさん:2010/08/08(日) 22:25:03
このすれ もりあげようぜ
みなさんshは何を使っていますか?
bash?
zsh?
tcsh
すまん
HTML5が新しい技術で、そんな最新の本まで読んでるんだ
って意味かと思った
UNIX板の人の本棚が気になるな
>>880 荒木飛呂彦と片山まさゆきしかないんだが。
>>873 何がいい本棚なのかさっぱりわからん。
Stevensすらないし。
HTML5は新しい技術だろう?
884 :
デフォルトの名無しさん:2010/08/09(月) 23:54:13
新しいか古いかでいえば新しいが、そんなびっくりすることでもないだろうに
メッセージとセマフォを多重待ちできる?
できない
888 :
デフォルトの名無しさん:2010/08/31(火) 15:13:08
Linux板のくだ質に書き込みを行ったのですが、返事がないようですのでこちらにも書き込みをさせていただきます。
TrueTypeフォントをFontPathに追加してもxlsfontsでpxlszが0になります。
フォントサイズをいくつか作成する方法はないでしょうか。
Xlibでプログラムを作成していて、フォントの指定にこまっております。
0なのはスケーラブルフォントだから。
欲しいサイズを適当に指定すれば使えるんじゃなかったっけか?
890 :
デフォルトの名無しさん:2010/09/01(水) 18:23:09
GUIプログラミングの勉強をしようと思ってるんだけど、QtとGtkどっちがいいの?
GNOME採用しているディストリが多いし、Gtkなの?
当然Qt
>>890 当然かどうかはともかく、Qtの方が書きやすくて格好いい。
つーか最初はあのコーディングスタイルに感動したわ。
Qtはライセンスのせいで普及が阻害されたな。
イモくさいと思いつつもGTK+を選んだ。
今はwxWidgetsを使ってる。
いまからならQtにすべき
wxWidgetsの勉強用のいい本教えれ
ありがとうございます。
Qtがお勧めみたいですね。
ちなみに、どちらも経験された方はお勧めな理由などありますか?
自分はずっとCUIのアプリケーションを作っていたのですが、ちょっとVSを使ってGUIアプリを作ってみたら、
GUIアプリも使いようによっては便利だと思い、今から勉強してみようと思っております。
GTKは糞
gtkmmは神
gtkmmは糞拭き紙
900 :
デフォルトの名無しさん:2010/09/17(金) 20:24:07
質問です。LL言語とbindingでき、セルを扱いやすいツールキットで
できればFLOSSなものはありますか。ドラッグアンドドロップもできると
うれしいです。
>>900 セルというのはテーブル上の要素(Excelのセル)を指していて、
FLOSSというのはオープンソースという意味でいいのかな?
もしYesなら、Qt/GNOME2/wxWidget/Tk、お好きなのをドーゾ。
もしLLとしてRubyを考えているなら、Ruby-GNOME2かRuby/Tkがお勧め。
既成ウィジェットライブラリの豊富さが大事であればGNOME2を選べばいいし、
基本的な部品(Text/Cancas)を組み合わせて自分で一から(スクラッチで)
GUIを設計できるスキルがあるのなら、Tkが向いているかもしれない。
どちらもRuby-bindingの開発者は日本人だから、自分ではどうしようもない
問題にぶち当たった時でも、公式ML上で力強いサポートを得られる。
QtとWxWidgetのRuby-bindingは、日本語の情報が極端に少ないから、
>>900の英文読解力しだいで選べばいいと思う。(どちらかといえばQtを勧める)
QtとかwxとかならPythonの方がおすすめ
903 :
900:2010/09/18(土) 01:32:02
LL言語って、馬から落馬したみたいな日本語ですね。すいません
複式のおこずかい帳をつくってLLを勉強してみようかなあと
日本語のドキュメントがあるのは日本人なのでうれしいですが
QtとかwxWidgetがこのスレではお勧めみたいですね。うーむ
Gnomeとかだと dbus とか勉強いりますか?
Qtなら dbus の勉強は不要ですか?
Rubyだと、いまからだと 1.9系になると思いますが、どれぐらい
の寿命があるとおもっていればいいですか3年ぐらい?
あと、python を進めてくれた方、いまからだと python は 3系
をやるべきですか。python も賞味期限 3年ぐらいですか?
>>903 Gnomeでも、PyGnomeとかPyGTKがあるから、その心配はいらない。
日本語で解説したサイトもあるし。
Pythonなら、2.6か2.7を使うのを勧める。
3はあと3年たってから、もう一度眺めなおしてから、考える、でいい。
不安なら、from __future importを使って、なるべく3に移行しやすくしておけば。
で、ちなみに、おこずかい帳とかっていうんなら、wxPythonを俺はおすすめするよ。
表とか数値セルとかだったら、wxPythonがそろってるし、Windowsにも移植は楽。
>>903 dbusのような低レベルなIPCはGNOME/Qtであればツールキット内で吸収してくれるから、
勉強しなくてもいい。もしdbusを自分で触って独自IPC機構を実装したいなら、
Rubyの場合はdbusライブラリがあるから、それを使えばいい。(pythonにもあるハズ)
あと、今からRubyを勉強し始めるとしたら、(1.9系ではなく)バグの枯れた1.8系を勧める。
処理系として1.9.1以降は安定してきているけど、周辺の拡張ライブラリには、
まだまだ1.9対応が不完全なものが多数ある。初心者が1.9系に手を出すのは、お勧めしない。
最後に、LLの寿命とか賞味期限を気にしてるようだけど、もしそれが絶対的必要条件なら
LL(要は俺様専用ミニ言語)を自分で作れば良いだけのこと。言語処理系開発は良い勉強になる。
903のような人は自分でプログラム書こうなんて思わずに
人や書かせることを選んだ方がいいんじゃないか。
そうだな
自分でやる気が微塵も感じられない
C言語は5年程度前から勉強しており、最近はWindowsにてC#の勉強を初めております。
C言語は簡単なアプリケーションを作ったことがある程度です。
LinuxアプリケーションはC++が多いように感じるのですが、UNIX的にはC++なのでしょうか?
C++を勉強するか、Perlを勉強するか悩んでおります。
どっちも勉強すればいいんじゃね? そうたいしたもんでもないし。
後は作りたいアプリにあったものを選べばいい。
よっぽど性能を要求されるものやライブラリがないといった事情が
なければC++は使わないほうがいいけどね。メモリ管理を自分で
やるのはウザいしバグのもとだしろくなことはない。
>>908 死にかけてる言語のPerlやるくらいならPythonやりなよ。
GTK, GNOMEのバインディングもあるし、Google Appsにもいけるし。
勝手にFUD流すのかよ。
>>908 まず最初に、プログラム言語は大まかにコンパイラ系とインタプリタ系に分類される。
C#やC++(それにJava)はコンパイラ系で、その高速性を生かした本格的なソフト開発に適している。
Perl(他にPythonやRuby)はインタプリタ系で、テキスト加工処理などのツール開発に適している。
最適な用途が違うから、どちらかを選ぶのではなく、どちらも勉強したほうが良い(どちらも勉強すべき)。
コンパイラ系のC++/C#/Javaについては、どれを選んでもかまわないと思う。
どれも大きなコミュニティがあるし、どれか1つをマスタできれば仕事に困ることはないから。
(UNIXにもMomoというC#の処理系があり、WPF/WCFといったWindows固有のフレームワークこそ
利用できないけど、UNIX向けGUIライブラリで本格的なアプリ開発も可能。マイナーで英語要だけど。)
インタプリタ系については、(
>>910が書いているけど)Perlはその開発が行き詰まっているから、
今から勉強するのは(Perlではなく)PythonかRubyを勧める。Perlは強力な言語で一時代を築いたけど、
その誕生した時代が古いこともあって、いくつか問題を抱えていた。Python/Rubyは、そんなPerlの
問題を解決するために生まれた比較的に新しい言語で、Perlでやれた処理はすべてPython/Rubyに
置き換えられるし、オブジェクト指向のような強力な機能も追加されている。
Python/Rubyであれば、機能的には強力だから、(性能要求が厳しくなければ)本格的なアプリ開発も可能。
だから、(最初にどちらも勉強すべきとは書いたけど、)もしも趣味のプログラミングであるなら、
(コンパイラ系言語の勉強は後回しにして、)Python/Rubyだけを勉強するという選択肢もある。
Pythonを選ぶかRubyを選ぶかも判断に迷うテーマ。一般的にはPythonは簡潔で明解な言語仕様だから
初心者が最初に学ぶインタプリタ系言語に適しているし、その単純さ故に複雑な応用にも対応できる。
Rubyは(見た目がPerlに似ているから)取っ付き易いのだけれど、その奥が限りなく深い言語。
両者は真っ向勝負できる言語だから、これも好みで選べばいい。
個人的な主観(趣味)で言えば、UNIXならC++とRubyを勧めるんだけどね。
Google推奨のC++, Java, Python, Javascriptを勧めます。
>>908 Linuxアプリケーションは圧倒的にCが多いよ。
C++も一昔前に比べれば、相当増えたといってもいいけど、まだまだ主流はC
俺はとりあえず、自分がそれで満足しているから、という理由で、
Pythonを勧める。
Gnome/Qtなんかのバインディングも豊富だし、ライブラリも豊富
(豊富過ぎるのが欠点って噂もあるけれどw)
あとは(ドライバとか作りたい、とかいわない限りは)Cで共有ライブラリ作れる
ようになってしまえば、(Python標準ライブラリの)ctypesでほぼなんでもできるよ。
また、RedHatなんかはシステムツールがPythonで書かれている、っていうことも
大きなポイントになるかな。
(時には読まなきゃならんこともあるw)
915 :
908:2010/09/25(土) 10:07:04
皆様ありがとうございます。
なぜPerlを選択肢に入れたかというと、まだまだ勉強不足ではありますがちょこちょこと
触っている経験があり、Perlをもう少し深くやるという意味でPerlを選択肢に入れました。
Web業界にいたこともあり、PerlはPythonやRubyに比べてるとどのサーバでも大体サポート
しているのでPerlが必要かと思っていた次第です。
確かにPerlは6が10年近く出ないままで、出るかどうかもわからないので、他の言語をやっ
ておいたほうがいいですね。
国産LinuxディストリビューションでRubyがパッケージ作成ツールなどに使われているので
Rubyのほうがいいですかね。でもRedHadはPythonなんですね・・・
PythonかRubyか考えてみます。
身の回りのアプリケーションがgtkmmを使ったものが多かったので、C++が多いのかと勘違
いしておりました。
C++はミドルウェアくらいの下位層に多いよ。
Androidなんかもそう。
Firefox, Chromeなんかのブラウザも今やミドルウェアだろうし。
こういうのは後回しでいいんじゃない?
Pythonでほとんどのこと出来るんだし。
あとLinuxだったら、Javaはおすすめしない。
ちょっと過去のいきさつもあって、LinuxではJavaのアプリケーションってかなり少ない。
Linuxを極める方向よりも、他のOSでも潰しが効くとかっていう方向性を指向するなら
いいのかもしれないけどね。
>>915 まああと10年は余裕で使われると思うよ、perlは。
死ぬ死ぬいってたコボルとか余裕で生き残ってるしな。
>>917 > ちょっと過去のいきさつもあって
kwsk
んーとだな、初期のLinux用Java開発グループ、Blackdownというのが
あったのよ。
Linux用のJVMとかはこの人たちが開発してたんさ
でも、ある日突然、リーダーが解散宣言してしまった。
理由はSunが情報公開やら協力やらしてくれない、という話だった。
で、以下は個人的な憶測ね。
真相がどうなのかはよくわからないのだけど、当時はまだ、UNIXといえば
Solarisであり、WS(ってのもだいぶ減ってはいたのだけど)っていえば
SPARC stationだった。
Sunが急速に台頭してきたLinuxを牽制したい、と思っていたのは事実
だろうし、そのための切り札としてJavaがあった。
SunとしてはUNIXでJavaといえばSolaris、としたかったろうし、そういう
理由で確かに嫌がらせのようなことはあったんだろうと思う。
で、最終的にはSunがLinux用のJVMを提供することになるんだが、
それまでに結構間があって、しばらく、LinuxでJavaを使うにはかなり
古いバージョンを使わなければならない時代が続いた。
(…って俺はJavaにさほどの個人的期待かけてなかったせいもあって、
かなりうろ覚え。間違ってたら訂正よろしく)
10年以上前に、IBMがLinuxとJavaを推すことを決定してから
どちらかというと、LinuxはJavaの推奨環境に近いと思ってたけど。
Javaの普及はSunの力じゃないんだから。
>>921 まぁ、だから、Microsoftとももめたじゃん?w
で、C#ができちゃった、とw
厨二病だな。Javaの仕様なんか拾えたし。
まぁ、そういう経緯もあって、とにかく、LinuxではJavaは
アプリケーションも非常に少なく、まったくおすすめできない。
Monoプロジェクトとか活発なので、むしろ、C#の方がおすすめ
できるくらいだ。
そこでC#勧めるか?
プロジェクト引っ掻きまわす奴と周りから言われてない?
実際Linux用の現状のJavaとMonoを比較して、どっち使うかといったらJavaだな。
どっちも使わないな、俺なら
>>920 当時、
Solaris > Linux >> その他のUNIX
だったけど? Solarisプッシュ?
>>920 SunのLinux用JDKがあったが?
64bit版でゴタゴタしたような記憶があるでよ。
ある程度以上の規模のプロダクトなら、大なり小なりゴタゴタしてるだろ64bit化では
933 :
888:2010/10/01(金) 12:57:36
ひまひまに調べているのですが、どうもうまくいきません。
pxlszが0のフォントはどのように処理すればいいのでしょうか?
XlibはTrueTypeフォントを直接扱えない。
文字の扱いってEUC-JPとUTF-8じゃそんなに違うの?
昔に書いたアプリが動かない。
もともと文字コードを意識してないプログラムなら、まず影響は無いはずだけど
PerlかPythonからGtk触ったことある方いらっしゃいますか?
GUIのアプリを作ってみようと思うのですが、どちらがいいでしょうか?
Perlは簡単なCGIを作ったことがある程度で、Pythonはみたこともありません。
Pythonで。
>>937 Perlは使ったことないから比較はできんが、
Pythonの方がいいと思うぞ。
PyGNOME,PyGTKならサンプルも豊富だし。
perl いいよ。pythonなんてインデントが嫌。
自分のUbuntuだと、/usr/bin/の中の
ccsm, dropbox, freeloader, gdebi-gtk, gjots2, gnochm, gnome-about,
gnome-codec-install, gnome-language-selector, hal-device-manager,
pitivi, pygtk-demo, software-properties-gtk, ubuntuone-preferences,
update-manager でPyGTKが使われている。
PerlGTKの方は、
checkgmail, dh_gtkmodules, glib-mkenums, gtkdoc-check, gtkdoc-fixxref,
gtkdoc-mkdb, gtkdoc-mktmpl, gtkdoc-rebase, gtkdoc-scan,
gtkdoc-scangobj, gtkdoc-scanobj
>>941 RedHat系だともっとPythonの割合が増えるね。
>>937 PyQt4 で
>>940 python のインデントが嫌って言ってる香具師は食わず嫌い
自分でプログラム書いたことないんだろ
>>943 なんか、最近KDEのKはkusoのKって感じがしますが…w
つか、インデントを食わず嫌いで、嫌うのもどうかな、とは思うけど、
一長一短でデメリットもあるからな。
>>943 pythonは結構仕事で書いたけどやっぱりインデント嫌いだわ。
カッコの対応がないのでインデントどこまで戻すのかわかりにくいし
一度間違えるとわけがわからん。
カッコありだとカッコの対応をもとにインデントやり直せばおかしく
なってるのがすぐわかるんだけどな。
vi使いなら、'%'キー一発でカッコの対応が分かるからね。
CやRuby、それにJSONのならコードの構造を把握しやすい。
PythonやYAMLのようなインデント強制のコードだと、
長くなるといちいち画面をスクロールさせ、目を上下に動かして
対応付けを探らないとならないからわずらわしい。
IDEを使っている人には下らない話だと思うけどね。
たしかにviでpythonはつらいわー。IDEとかエディタでpython向き
のってあるの?
950 :
デフォルトの名無しさん:2010/10/23(土) 15:11:40
ラウンドロビン方式でスケジューリングされるマルチスレッドのアプリケーション
についてですが、タイムスライスを使い切ったスレッドに対してOSから何らかの
シグナルが送られるのでしょうか?もしそうならシグナルの種類を知るための
手段はありますか?
どんな環境なのかな?
Fedora Core 6 です。
> タイムスライスを使い切ったスレッドに対してOSから何らかのシグナルが送られるのでしょうか?
タイムスライス使いきったってことは処理は別のスレッドに移動してると考えられるから
シグナルが送られても次に処理が回ってきたときにわかる感じになるのでは?
>>953 なるほど確かにそうですね。
ただシステムコールによってはEINTRが頻繁に送られる
ため、これがタイムスライスを使い切ったよという通知かと
思いました。そうでないととなるとEINTRは何なのかとい
う疑問が出てきたわけです。
システムコールによってはスレッドが切り替えられることがあるよ。
>>955 有限時間の待ちをするシステムコールなどはそうですね。
自分がwait状態になるので。このようなシステムコールが
失敗し、errnoにEINTRが設定されるのは何のためなのか
わからないです。
気になるなら、kernelのソース追っかければいいじゃん
追っかけるのは、glibcからかも
POSIXリアルタイム拡張がない限り、
スレッドに対するシグナルは実装依存であることをお忘れなく。
>>954 > そうでないととなるとEINTRは何なのかという疑問が出てきたわけです。
たとえばkeyboard待ちをしているprocess、eg. sh
でもsignal handling期待通りに動かすには、
read(2)をEINTRで中断して、signal handlerを起動して、
その後、read(2)に再入する必要がある。
だから再入可能なsystam callは
signal handerの設定されているsignalが送られるたびに
EINTRによるsystam callの中断がある。
このアーキテクチャは、POSiXリアルタイム拡張や
multi thread当たり前のprogrammingでは、
やや古いので、新しいprocess modelが構築する必要があると思われる。
>>952 そんなはるか昔にサポートが切れたOSを使うのはやめれ
脆弱性が死ぬほどたまってるぞ
964 :
デフォルトの名無しさん:2010/11/07(日) 18:23:43
pythonなんて一時の流行だろ。
結局はGUIは生き残るのはGTKだけ。
〃∩ ∧_∧
⊂⌒( ・ω・) はいはいわろすわろす
`ヽ_っ⌒/⌒c
⌒ ⌒
>>964 pythonでGUIやるときはTK使うんじゃなかったっけ。
ああwxもあるか。
GTK 使うくらいなら Tkinter 使う方がまし
python 使うくらいなら Ruby 使う方がまし
Ruby(笑)
971 :
デフォルトの名無しさん:2010/11/08(月) 13:50:14
もうあきたけど、結局はjavaに戻るだろ。
>>971 何をゆってるんだ、おまいは?
UNIX ったら set + awk + sh に決まってるじゃないか
973 :
デフォルトの名無しさん:2010/11/09(火) 11:00:20
シェルスクリプトだけで大抵の事は出来るな。
bashスクリプトでマルチインスタンスプログラムでどうやればいいかい?
仮想的に複数ユーザでサーバにリクエストを出してみたいのだが。
>>974 sudo -u username command
>>975,976
さんくす。バックグラウンドて走らせてできました。ただ、ネットワークIOだと思うんだがほとんどのプロセスが待ちになってスループットが伸びないな。どうしたものか。。。
>>920 > んーとだな、初期のLinux用Java開発グループ、Blackdownというのが
> あったのよ。
あったあったw
980 :
デフォルトの名無しさん:2010/11/20(土) 04:08:19
1.What is the maximum number of processes for system?
2.What is the maximum number of processes per user?
3.What is the size of the virtual address cache?
4.What is the maximal open files per process?
どのコマンドで検索すればいいのか分からないので教えてください。
もう落ちるなこのスレ
まぁ、そう言うなよ。
linuxは全てのデバイス(ethernet以外)はファイルとして扱うという話を聞いたことがあります
しかし、プログラミングしていてファイルという印象はうけません
どのようなところで、実感できるのでしょうか?
>>983 いや、昔はethもファイルだったんよ。
>>983 デバイスドライバの開発が遅れてるのでしかたないから
いくつか機能殺した上でファイルを読んで代用したり
標準入力になんか入力するのが面倒だから
ファイルを流し込んで自動運転したり
>>983 なんでもかんでもディスクリプタで扱うというところで実感する。
ソケットだろうとファイルだろうとデバイスだろうとread()/write()
って便利すぎると思うよ。
987 :
983:2010/11/22(月) 23:13:35
>>984 それは知らなかった
/dev/xxxxってのはファイルなのですか
あと、ディスクプリタの概念がいまいちです..orz
ソケット関連の記事を読んだ時に、ちらっと読んだくらいです
fopen()じゃなくてopen()で戻ってくる値がディスクリプタ