トップページ⇒linux
1001コメント332KB

Linuxプログラミング

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001login:Penguin01/09/02 20:31ID:8eEfRqZ2
教えてよ。ゲームが作りたいんだ
0808login:Penguin03/11/15 22:29ID:BWJ3qu85
>>806
forkはできないけど、スレッド(pthread)なら可能。
0809login:Penguin03/11/16 00:04ID:q7HsnD3J
Javaで自分のPCのIPアドレスを取得したいんですが、InetAddress.getLocalHost() して getHostAddress()を使用 すると127.0.0.1のローカルループバックしか取得できません。
ifconfigでeth0に割り当てられているIPアドレスを取得したいのですが・・・。
試しに同じコードをWindowsで動かしたらちゃんとLANカードに割り当てられたIPアドレスが表示されました。
Javaでeth0に割り当てられているIPアドレスを取得する事ってできるのでしょうか?
0810login:Penguin03/11/16 02:26ID:UocxIZFD
>>809
Linux上での名前解決の設定が"127.0.0.1"にされているからでは。
もし、DNS検索でhostsファイルが優先されているなら
/etc/hostsにちゃんとIPアドレスとマシン名が設定されているか確認したほうがいい。

例えばホスト名がhoge(192.168.1.1)の場合、/etc/hostsファイル設定は
/etc/hosts:
127.0.0.1 localhost.localdomain localhost
192.168.1.1 hoge
081180903/11/16 13:32ID:q7HsnD3J
>>810
レスありがとうございます。
/etc/hostsに直接記入した場合、IPアドレスが変更になった時はいちいち書き換えなければならないのではないでしょうか?。
動的にIPアドレスが割り当てられている環境なので、できれば自動で取得する方法を知りたいのです。
ifconfigなどでは表示されているので、なんらかの方法があると思うのですが・・・。

Linux初心者なもので、もし見当違いな事を言っていたら申し訳ないです。
081281003/11/16 16:14ID:jLgv/+o8
>>811
以下のページの"DynamicDNS"を参照
http://www.nsknet.or.jp/~kamichan/linux/installdiary/dns.html
0813login:Penguin03/11/17 18:18ID:R6kCcdNZ
forkした子プロセスをpipeでつないでstdoutを非同期に取りたいのだけど
selectが Bad file descriptorとか言って怒ってる (;つД`)
selectが使えないと相手のcloseを知るタイミングもSIGCHLDだけで複数パイプのどれだか分からず…
神様助けて下さい。(-人-)
0814login:Penguin03/11/17 18:47ID:R6kCcdNZ
出来たよ(;´Д`)
0815login:Penguin03/11/23 03:57ID:lcDeSyj7
RedHat なのですが、あるプログラムを実行させたときに、かかった時間だけでなく、
メモリをどのくらい消費したのかとまで調べる方法はありますか?
0816login:Penguin03/11/23 19:50ID:wjjvLLiv
>>815
やる。
memcheck.sh
#!/bin/bash

$* &
com_id=$!

max_memsize=0

while ps $com_id > /dev/null
do
memsize=`ps --no-headers --format '%mem' $com_id`
if expr $memsize '>' $max_memsize
then
max_memsize=$memsize
fi
sleep 1
done
echo "Max memsize is $max_memsize"

使い方
memcheck.shとして保存して、
chmod +x memcheck.sh
./memcheck.sh jikkou sitai command

いじょ。
0817login:Penguin03/11/23 21:33ID:wjjvLLiv
WideStudio + Rubyプログラミングめも

WSCvifieldで、数値のみ入力にする浮動小数点編

以下のプロシージャをトリガ FURCUS_CHで登録

def vifi_tof(object)
strval = object.getProperty("labelString").getCharPtr()
return if strval == ""
fval = strval.to_f
object.setProperty("labelString",fval.to_s)
# object.update()
Mpfc::WSGIappDev().update()
end
0818login:Penguin03/11/24 00:32ID:aGsdOEbv
Linuxでのプログラムの勉強に
GNUソフトウェアプログラム と C++プログラミング入門
を購入してきたんですけど方向として間違っていますか?

一つ目の目標としては、エディタを作ってみることです。
参考にエディタのソースを探しているんですけど、見つからないですw。
向いてないのかなぁ。。。
0819login:Penguin03/11/24 00:46ID:ouo7pXOj
>>818
viのソースとかemacsのソースとかedのソースとか、その辺に転がってる罠。
0820login:Penguin03/11/24 01:16ID:aGsdOEbv
edとviのソースを拾ってきたものの
src.rpmの状態からソースを取り出すのには
どういった手順が必要なのか。。。
本見てもインストールの仕方ばかりで。。。
もちょっと頑張らなくちゃ。
082182003/11/24 01:56ID:aGsdOEbv
結局rpmからのソースの取り出し方が判らない。
情報の集め方が間違ってるのか。。。
0822login:Penguin03/11/24 02:00ID:/rv1sO3H
>>821
ttp://www.atmarkit.co.jp/flinux/rensai/linuxtips/522rpmcpio.html
082382003/11/24 02:05ID:aGsdOEbv
>>822
有り難うございます。
rpmの中身が出てきました。
これで勉強できそうです。
0824login:Penguin03/11/24 03:32ID:7bs+maWP
src.rpmならrpm -iでインストールすればソース(とSPEC)がでてくるから
わざわざrpm2cpio使うまでもない
0825login:Penguin03/11/24 09:11ID:DPOPBf2o
>>816
とりあえず、使ってみます。
どうもです。
0826login:Penguin03/11/25 14:48ID:VkzcVBqK
下らない質問スレですべき質問かもしれませんが、
a a.orig b b.orig
と4つのファイルがあって、diff をつかって複数のファイルから差分を一度に表示させることはできますか?

今は、
$ diff -u a.orig a > foo
$ diff -u b.orig b > bar
とやって foo と bar を連結させているという非常に回りくどいことをやっているのですが、
もっと簡単にできないものかと。
0827login:Penguin03/11/25 19:50ID:YPqveVlU
>>826
ディレクトリ別にして、-urとかじゃだめなの?
例えば、ディレクトリhogeにaとbを配置し、
ディレクトリhoge.origにa.origをaに名前をかえて、b.origも同様にして、
$ diff -ur hoge.orig hoge > hoge.diff
するとか。
0828login:Penguin03/11/27 08:46ID:JsWTr2uN
v4lデバイスから取り込んだ動画をmpeg4で圧縮して
最終的にはネットワーク配信をできるようなものを作りたいんですけど
mpeg4を扱えるようなライブラリ等はどのようなものがありますか?
0829login:Penguin03/11/27 11:03ID:Q5CHQ0kV
>>826
やる。

#!/bin/bash
for i in `ls | grep -v '.orig$'`
do
if [ -f $i.orig ] ; then
diff -u $i.orig $i
fi
done
0830login:Penguin03/11/28 00:12ID:NrG8nS+O
>>828
>v4lデバイスから取り込んだ動画をmpeg4で圧縮して
>最終的にはネットワーク配信をできるようなものを作りたいんですけど

既に無かったっけ?ストリーミング鯖
0831login:Penguin03/11/28 14:24ID:0uPTkcP3
videolanとかはどうなの?
http://www.videolan.org/
0832login:Penguin03/11/28 16:47ID:reTvTi2f
>>787
遅レスだけど、実行ファイルの中に文字列定数として持っとくってのは不可?
ライブラリの場所 (/usr/lib/foo-1.0/ とか) がコンパイル時に決定される
ソフトウェアがあるよね。あれと同じ要領で実行ファイルがインスコされる
絶対パスをコンパイル時に決めちゃうわけ。Makefile だとこんな感じ。

bindir = /usr/bin

foo: foo.c
  gcc -o foo -DEXEFILEPATH=$(bindir)/foo foo.c

install:
  install -m 755 foo $(bindir)/foo

プログラム中ではシンボル EXEFILEPATH を見れば実行ファイルの場所が分かる。
0833login:Penguin03/11/29 21:57ID:+eWQ4cVT
>>832
>ライブラリの場所 (/usr/lib/foo-1.0/ とか) がコンパイル時に決定される
>ソフトウェアがあるよね。あれと同じ要領で実行ファイルがインスコされる

automakeとかautoconfとかのこと?
0834login:Penguin03/11/29 22:32ID:ymOcP7gS
>>833
俺は832じゃないけど、Automakeは
$ make DESTDIR=/hoge/fuga install
のようにインストール時に(というかバイナリパッケージ作成時)に
インストール先を変更することが可能になるように設計されているから、
AC_DEFINE_UNQUOTEDなんかを使ってconfig.h(または-D)で定義しても
インストール時に変更される可能性があって、問題あるかも。

だから、Makefileに書けってことじゃない?
083583203/11/30 08:09ID:IEIlDXip
いやいや、そこまで深い意味はなかった。要するに、実行ファイルの場所を
コンパイル時に決めて、実際にそこにあると仮定してプログラムを書けば?
という提案だった。
083683403/11/30 09:24ID:pSa56DZI
そういうことか。深読みしすぎた。
そうなると、元質問者のargv[0]から求めるっていうのは、
/procへの依存性も無いので、悪くない気がするね。
いずれにせよinstall前のデバッグがちょっと面倒そうだけど。。。

# 俺は自己参照型のプログラムを書いたこと無いんでよく分からん。
083783203/11/30 10:46ID:IEIlDXip
自分を書き換えるプログラムって Unix ではあんまり見ない気がする。

ひょっとして、作ろうとしているのはウィルス?(w
083883203/11/30 10:48ID:IEIlDXip
× 自分を書き換える
○ 自己参照を行う
0839login:Penguin03/11/30 15:49ID:TjROfage
自己書き換えが必要なプログラムって最近の高性能PCで必要?
084083203/11/30 15:59ID:IEIlDXip
なんか8ビットCPU時代のみみっちさを連想するよねw>自己書き換え
0841login:Penguin03/11/30 17:07ID:x2UJDG/9
>>787
#include <stdio.h>
#include <linux/limits.h>

int main(int argc, char *argv[])
{
char buf[PATH_MAX];

printf("%s's current working directory: %s\n", argv[0], getcwd(buf, PATH_MAX));
return(0);
}

詳しいことは以下を読め
man getcwd
0842login:Penguin03/11/30 17:22ID:pSa56DZI
>>841
それって、カレントディレクトリを表示するんじゃない?
0843login:Penguin03/11/30 17:24ID:pSa56DZI
↑すまん。そう出力されてた。
0844login:Penguin03/11/30 18:01ID:IEIlDXip
(´∀`)おーい山田君、841のザブトン全部持ってっちゃって(w
084584103/11/30 18:33ID:x2UJDG/9
>>842-844
>Linuxで、実行中のプログラムのファイルの絶対パスを知る簡単な
>方法はないでしょうか?
>今はmainのargv[0]から自分の名前を取ってきて、それに対してpopen
>ストリームにwhichコマンドを流す事で絶対パスを取ってきていますが、
>もっと簡単で確実な方法がありましたら教えてください。
>自己参照を行うプログラムなので、どうしても知る必要があります・・
>>787は、結局のところ自身のコマンドの絶対パスが知りたいんでは?違うのか?
0846login:Penguin03/11/30 19:18ID:IEIlDXip
そだよ。それが分かってて841のようなコードを示すのは何故?
0847login:Penguin03/11/30 19:59ID:x2UJDG/9
>>846
間違った!!!!!w
これってPATHで参照できるコマンドの絶対パスが知りたいってことか。
んなもんシステムコールやライブラリには無いと思うが。
そんなことする作りが変では無いか?
084884203/11/30 20:50ID:pSa56DZI
俺てっきり釣られてしまったと思って欝だったんだが(w

>>847
だからウィルス?って予想もありだよね。
0849login:Penguin03/11/30 21:31ID:x2UJDG/9
>>848
>だからウィルス?って予想もありだよね。
いぁ、それはわかんないけど。
(もしそうだとしても、それだけではウィルスとして使い物にならん)
PATH次第によっては見つかったり見つからなかったりするんで
やはり作りが変?だと思う。
(自身のコマンドが絶対PATHを知っていると何が幸せなのかわからんし)
それに現在popen、whichで出来てるんだったらそれでいいじゃんって感じ。
0850login:Penguin03/11/30 22:07ID:xWqa/CxV
設定ファイルを自分と同じディレクトリに置きたいとか。
DOS時代の作法にあったなあ…
0851login:Penguin03/11/30 22:44ID:x2UJDG/9
あっそれから>>787について思ったのは、誰かが意図的に
PATHの先頭の方に同名の偽コマンドを置けば
在るようにみせることが出来るよ。
脆弱性ハケーンかな?w
0852login:Penguin03/11/30 22:45ID:IEIlDXip
ふと思ったんだけど、whichコマンドに相当するコードを自前で実装しても
大したステップ数にはならない予感。
0853偽which作ってみた03/11/30 22:54ID:x2UJDG/9
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <linux/limits.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>

int main(int argc, char *argv[])
{
char *ppath, *ptr;
char buf[PATH_MAX];
struct stat st_stat;
int ret;

if(argc != 2){
fprintf(stderr, "Usage: %s command\n", argv[0]);
return(1);
}
if((ppath = getenv("PATH")) == NULL){
fprintf(stderr, "PATH not exist\n");
return(1);
}else if(strlen(ppath) == 0){
fprintf(stderr, "PATH is empty\n");
return(1);
}

ptr = strtok(ppath, ":");
while(ptr){
0854偽which作ってみた03/11/30 22:54ID:x2UJDG/9
strncpy(buf, ptr, PATH_MAX-1);
strncat(buf, "/", PATH_MAX-1-strlen(buf));
strncat(buf, argv[1], PATH_MAX-1-strlen(buf));
ret = stat(buf, &st_stat);
if(ret == 0){
if(S_ISREG(st_stat.st_mode)){
printf("%s\n", buf);
break;
}
}else if(ret == -1){
if(errno != ENOENT){
perror("stat");
break;
}
}
ptr = strtok(NULL, ":");
}
if(ptr == NULL){
fprintf(stderr, "%s not exist\n", argv[1]);
}

return(0);
}
0855偽which作ってみた03/11/30 22:57ID:x2UJDG/9
これは、勢いで作成したんでかなり端折っています。
権限とか全然チェックしてません。
0856login:Penguin03/11/30 23:07ID:IEIlDXip
(゚Д゚)ウマー
0857login:Penguin03/11/30 23:18ID:W0msD5oz
whichを使う前にargv[0]が絶対パスかどうか調べた方がいい。
まあexecve(2)の第一引数とは違う可能性もあるんだが。(UNIXで完璧なのを作るのは無理)
ちなみにldd, ld.soに参考になるcodeがある。
0858login:Penguin03/11/30 23:34ID:x2UJDG/9
>>857
>whichを使う前にargv[0]が絶対パスかどうか調べた方がいい。
argv[0]にbasenameをかませばいいだけ。

>まあexecve(2)の第一引数とは違う可能性もあるんだが。(UNIXで完璧なのを作るのは無理)
argv[0]は変更できるんでそこんところは大目にみてくれ。

>ちなみにldd, ld.soに参考になるcodeがある。
さいですか。
0859login:Penguin03/12/01 13:41ID:MB98Kdx1
ご存知の方がいらっしゃいましたら教えて欲しいのですが、
X上で表示されている各ウィンドウを非表示にしたりまた表示したり
(XMapWindow?)することを他のアプリケーションから行いたいのですが
どうすれば良いのでしょうか。

バーチャルデスクトップが使えるウィンドウマネージャの
ソースとか見ると分かるのかもしれませんが、
僕には太刀打ちできませんでした。

キーワードだけでも教えていただけるとありがたいです。
よろしくお願い致します。

#Xはスレ違いだったらごめんなさい。
0860login:Penguin03/12/01 22:47ID:ihH/I9Em
>>859
ム板にXlibスレがあったけど、最近は保守だけみたいだから、、、
自慢じゃないが俺には分からん。
0861login:Penguin03/12/01 22:58ID:8njOyIGV
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>

int main(int argc,char *argv[])
{
char *display;
int ch;
Display *disp;
Window w;

w=0x1c01ad0;

display=getenv("DISPLAY");
if (display!=NULL) {
disp=XOpenDisplay(":0.0");

XUnmapWindow(disp,w);
XFlush(disp);

ch=fgetc(stdin);

XMapWindow(disp,w);
XFlush(disp);
} else {
fprintf(stderr,"Environment variable DISPLAY is undefined\n");
}
}
086286103/12/01 23:01ID:8njOyIGV
XのウィンドゥはIDさえわかれば他のプログラムから自由にいじることができる。

上の例だと、 w=0x1c01ad0; となっているのがウィンドゥIDで、
これはxwininfoで
xwininfo: Window id: 0x1c01ad0 (has no name)
みたいに表示されている。

ここを書き換えてコンパイル、実行すれば、xwininfoで調べた
Windowが消える。
なにかキーを押せば復活する。

問題は、このウィンドゥIDをもっとちゃんとした方法で知ることであるが
これはプログラムの用途によって方法が異なってくると思うので
用途にあった方法を考える。
0863login:Penguin03/12/01 23:59ID:I6e583iL
>argv[0]にbasenameをかませばいいだけ。
他ディレクトリへの相対パス指定されたら駄目でしょ
0864login:Penguin03/12/02 00:52ID:IGK1dN5i
E. レイモンドの"The Art of Unix Programming"を早速よんだ人っています?
0865login:Penguin03/12/02 03:56ID:jmEuRE+2
文芸的UNIXプログラミング?
0866login:Penguin03/12/02 07:05ID:0RsR6Dsz
「UNIXプログラミングの技芸」でしょ
「文芸的〜」は"Literate UNIX programming"

http://www.amazon.co.jp/exec/obidos/ASIN/0937073806
http://www.amazon.co.jp/exec/obidos/ASIN/0201896834
http://www.saiensu.co.jp/books-htm/ISBN4-7819-0302-9.htm
http://www.amazon.co.jp/exec/obidos/ASIN/4320097106
http://www.amazon.co.jp/exec/obidos/ASIN/0262193388
0867login:Penguin03/12/02 07:19ID:UbgA1PcH
>>787
http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/stdlib/realpath.c?rev=1.20&content-type=text/x-cvsweb-markup&only_with_tag=MAIN
あたりをパクるのが楽かと思われ。
086886703/12/02 07:25ID:UbgA1PcH
もしかしたら、glibcにもrealpathがあるかもしれないが、
私はLinuxユーザでないので知らない。

例えばSolarisのrealpathでは、相対パスが与えられた時には
絶対パスが返されないことがあるらしいので、glibcにrealpath
があったとしても、その辺の振る舞いをチェックする必要がある
でしょう。
0869login:Penguin03/12/02 07:54ID:0RsR6Dsz
ありますね。
REALPATH(3) Linux Programmer's Manual REALPATH(3)
NAME
realpath - return the canonicalized absolute pathname
087085903/12/02 12:02ID:SNYAPZHJ
>861-862

解説、どうもありがとうございます。
サンプルプログラムまで頂けて感激です。
こんなに短いコードで済むなんてびっくりですね。
なんかの本に「メカニズムとポリシーをはっきり区別してるところが
Linuxの設計の優れたところだ」と書いてあったのですが、
もちろんこのことはXにも当てはまるわけですね。
大げさかもしれませんが、そんなことを感じました。

今、ちょっと手元に環境が無いのですぐ試せないのが残念ですが、
あした、早速試して見ます。

>860
レスつけてくれるだけでも充分ありがたかったです。(w
0871login:Penguin03/12/02 12:47ID:y4gvX7HI
>>862,>>870
例えば

$ xwininfo -tree -root | grep -i kterm

とすれば kterm という名前のウィンドウを全部リストアップできるね。
とゆーことで xwininfo のソースを見れば参考になるんじゃないかな。
xprop コマンドのソースも参考になりそう。オプソまんせー(w
087286203/12/02 13:03ID:SNYAPZHJ
>871

どうもありがとうございます。
xwininfoってこういうことも出きるんですね。
ウィンドウをクリックする使い方しか知りませんでした。
一度はmanでちゃんとチェックすべきですね。

ソースも見てみます。
#ただ、毎回の事ながらわからなくて挫折してしまうのですが(w
0873login:Penguin03/12/02 13:08ID:0RsR6Dsz
>>871
login時にiconにしておきたいのに、-iconicがちゃんと働かないbiffを、
それでid調べて無理やりicon化したことがあったな。
0874login:Penguin03/12/02 13:14ID:y4gvX7HI
漏れも読みたくなったので探してきた。
http://cvsweb.xfree86.org/cvsweb/xc/programs/xwininfo/
http://cvsweb.xfree86.org/cvsweb/xc/programs/xwininfo/xwininfo.c?rev=1.10
http://cvsweb.xfree86.org/cvsweb/xc/programs/xlsfonts/dsimple.c?rev=3.7
0875login:Penguin03/12/02 13:17ID:y4gvX7HI
>>872
例えば xwininfo -root -tree を実行したときにどういう流れで処理が進むのかを
追いかけてみるといいよ。必要な部分をコピペしてその処理の流れを再現する
プログラムを書いてみるのもいい。
0876login:Penguin03/12/04 00:43ID:6iyb4CU8
C でプライベートな関数(自分が定義されているファイル内でしか参照されてない)の
プロトタイプ宣言をヘッダファイルでなく定義されているファイルに
一気に移したいんですけど、
プライベートな関数を調べてあげてくれるツールとかありますか?
ちなみに GNU で開発してますが ld にこんな機能あったらいいのに。
0877login:Penguin03/12/04 00:48ID:rKCakjnk
grep static *.h とか?(w
0878login:Penguin03/12/04 22:28ID:sWWDYweq
cat `grep static *.h` dest.c
0879login:Penguin03/12/06 23:34ID:wQbZ0jXD
>>876
>C でプライベートな関数(自分が定義されているファイル内でしか参照されてない)の
>プロトタイプ宣言をヘッダファイルでなく定義されているファイルに
>一気に移したいんですけど、
コピペすればいいじゃん。

>プライベートな関数を調べてあげてくれるツールとかありますか?
無い。必要ないから。

>ちなみに GNU で開発してますが ld にこんな機能あったらいいのに。
いらないと思うが。

ちなみに関係無いけどlddで共有ライブラリへの依存関係を調べられる。
0880login:Penguin03/12/07 22:33ID:zLB/2gLG
>>879
> ちなみに関係無いけどlddで共有ライブラリへの依存関係を調べられる。
マジ関係ない
0881login:Penguin03/12/11 12:46ID:rNX2TzV0
質問です
XFree86上で動くゲームを作りたいのですが、
WindowsのAPIにおける
PeekMessageみたいな関数はXLibにありますか?
それと、60FPSにするために60分の1秒ウェイトする方法を教えてください。
おねがいします。
0882login:Penguin03/12/11 18:45ID:8lyIoHlg
>>881
> PeekMessageみたいな関数はXLibにありますか?
pollとかselectのことかな?

> それと、60FPSにするために60分の1秒ウェイトする方法を教えてください。
usleep じゃだめなんか?

ゲームなら、zsnesのソース見て参考にしたらどうかな。
0883login:Penguin03/12/11 23:59ID:qZwK1/aw
usleepよりかはnanosleepのほうがいいかと思われ。POSIXだし。

しかしXであればXtAppAddTimeOutなんかでタイマーをセットして
コールバック関数をよんでもらうほうがX風だったり。

GtkとかQtにも同様の関数はあると思われ

画面リフレッシュに同期して描画したいというなら
...ちょっとわからん。
0884login:Penguin03/12/12 04:00ID:p1r0xxMa
>>882
881が、どの程度の精度を求めているかによるんだけど、
usleep使うと描画時間分ずれていくから、オトゲー系はきつい。

俺は、setitimerつかったよん。

とりあえずなら、SDLつかうのも楽かも。
0885login:Penguin03/12/12 20:01ID:xTw+tehD
make ファイルの書き方とかってどこで勉強すればいいのですか?
0886login:Penguin03/12/12 20:21ID:kKRUSP86
http://www.google.co.jp/search?num=50&hl=ja&ie=UTF-8&oe=UTF-8&q=%22makefile%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%22&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
0887login:Penguin03/12/12 20:39ID:vXDic0I4
$ info -f make
0888login:Penguin03/12/12 23:32ID:0mhoD5bA
>>887
日本語で頼むわ
0889login:Penguin03/12/13 00:14ID:q8/xqIaE
http://www.google.co.jp/search?q=make+info+%E5%92%8C%E8%A8%B3&ie=UTF-8&oe=UTF-8&hl=ja&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
0890!88803/12/13 00:38ID:LET2eCCS
これをもさがしてたよありがと〜
ftp://ftp.ascii.co.jp/pub/GNU/make/make-jp-3.79.1.tgz
089188103/12/13 21:47ID:O4yV8qD+
レスありがとうございます。
色々試してみましたがウェイトはsleepよりWindowsにあるtimeGetTimeみたいな関数が欲しいです。
誰か知りませんか?
0892login:Penguin03/12/13 22:37ID:DMJyYxYj
>>891
http://www.mech.tohoku-gakuin.ac.jp/rde/contents/linux/control/lcycle.html
0893login:Penguin03/12/13 22:37ID:DMJyYxYj
>>891
ビジーループで休むって事ですか?
0894login:Penguin03/12/13 22:44ID:CXIgy1ww
rtcを使うとか?
http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.4/rtc.txt.html
089588103/12/14 10:39ID:J1jDGD1W
WindowsのtimeGetTimeなら
while(1) {
if( timeGetTime() - oldtime > 1000/60 ) {
画面描画
}

while( PeekMessage(略) ) { // イベントがあるか調べる
イベント処理
}
}
って感じにできるんです。
linuxだとずいぶん大変そうですね・・・諦めてWindowsでゲームつくろっかな。
0896login:Penguin03/12/14 11:00ID:A6qOSZwn
>>895
gettimeofday使って自分でポーリングするか、
setitimer使ってシグナルでタイマーが切れたことを知らせてもらうか、
SDLなどのゲーム用ライブラリを用いるか
になるのではないかと。

いずれも秒以下の時間制御のためには使ったことないのでどの程度精度が
いいものかわからないけど。
0897login:Penguin03/12/14 11:58ID:fdUDptKQ
>>895
timeGetTimeをgettimeofdayにそのまま変えれば
ほぼ同じロジックで組めるのだが
そのロジックだとプログラムが常に走りっぱなしになるから
ふつうはそんな組み方はあまりしない
(時間がくるまで待つ(sleepする)ように組む)

自分のプログラムだけでCPUを100%使いきらないための配慮だが
このあたりはWindowsでも同様と思うのだが。

ちなみにgettimeofdayで同様に組むと10ms程度の精度
(タスクスイッチの時間単位)になると思う。
2.6カーネルだとタスクスイッチが1ms単位になっている気が
しないでもないが。
0898login:Penguin03/12/14 12:11ID:fdUDptKQ
> PeekMessageみたいな関数

イベントを調べる関数として、XNextEvent等があるが
イベントがくるまで処理がとまることのないものとして
XCheckWindowEventあたりがいいかも
0899login:Penguin03/12/14 12:30ID:fdUDptKQ
連続スマソ
Xでそれらしいように組むにはこんな感じか
画面処理ルーチン() {
// イベントチェックはメインルーチン側で行う
// 1/60秒ごとにまわってくるようにするので時刻チェックは不要
画面描画
}
int main() {
...いろいろ処理...
// 割り込みの設定
sigemptyset(&smask);
sigaddset(&smask,SIGALRM);
sigtocall.sa_handler=画面描画ルーチン;
sigtocall.sa_mask=smask;
sigtocall.sa_flags=0;
sigaction(SIGALRM,&sigtocall,NULL);
// タイマーの設定
itimeval.it_interval.tv_sec=0; // タイマ間隔
itimeval.it_interval.tv_usec=16667; //およそ1/60s
itimeval.it_value=it_interval; //最初に割り込みがかかるまでの時間
setitimer(ITIMER_REAL,itimevak,NULL)
// メインルーチン
while (終了フラグ=0) {
// イベント処理
XNextEvent(略);
}
}
0900login:Penguin03/12/14 17:24ID:G6zew8S8
あるファイルの全角文字の ”。”を改行ゴードに変換しようと思っています
下のコマンドでやってみたんですけどダメでした
なにがいけないのでしょうか?

# tr '。' '012' < FILE

0901login:Penguin03/12/14 20:09ID:73Xfjjuv
>>900
trが多バイトに対応していないからかな?
置換ならsedとかが楽かも。
# 俺はemacsでやるかな。
0902login:Penguin03/12/14 21:40ID:+2AOP9r5
プログラムを始めようとしてCのテキストを購入し読み込んだんですが
いざ他人のソースを読むとなるとまったく手がつきません。

考えてみるとCのテキストには自分で1から作り起こす方法は書いてあるのですが
他人のソースを読むときの取り掛かり方とかが全然乗っていませんでした
(そのためgrepの存在とかも知らなかったりした(^^; )

こういった「脇を固める技術」を得られる本などはありませんか?
0903login:Penguin03/12/14 21:45ID:CALh7Otq
>>902
RubyHackingGuideとか
0904login:Penguin03/12/14 23:05ID:TmFBnZWo
>>902
C じゃなくて何かスクリプト言語から始めるのはどう?
Java とか。

Cは初心者向きじゃないよ。
0905login:Penguin03/12/14 23:16ID:WylokYMj
>>906
次にお前は 「Javaはスクリプトじゃあありません!」 と言う
0906login:Penguin03/12/14 23:40ID:KWkCvRBM
>>901
ありがとうございます。とりあえず本屋に行ってみます

>>902
>Cは初心者向きじゃないよ。
もう読み終わってポインタとか構造体とかファイル入出力とか
使えるようになっちゃったよ..._| ̄|○


まぁ、完璧マスターというわけじゃないけど
0907login:Penguin03/12/14 23:54ID:hPxKBa60
>>906
そんなサクッとポインタが使えるようならセンスあるよ。
手助け不要と思われ。
レス数が900を超えています。1000を超えると表示できなくなるよ。