約 1,345,533 件
https://w.atwiki.jp/my-sql/pages/93.html
HOME 関数 日付と時刻関数 UNIX_TIMESTAMP UNIX_TIMESTAMP UNIX_TIMESTAMP() UNIX_TIMESTAMP(date) 引数なしで呼び出された場合、Unix タイムスタンプ('1970-01-01 00 00 00' GMT からの秒数)を符号なしの整数として返す。date 引数を指定して呼び出された場合、UNIX_TIMESTAMP() は引数に指定された日付を '1970-01-01 00 00 00' GMT からの秒数として返す。引数 date には、DATE 型文字列、DATETIME 型文字列、TIMESTAMP 型の値、YYMMDD または YYYYMMDD の形式の現地時間のいずれかを指定できる。 mysql [[SELECT]] UNIX_TIMESTAMP(); - 882226357 mysql SELECT UNIX_TIMESTAMP('1997-10-04 22 23 00'); - 875996580 UNIX_TIMESTAMP を TIMESTAMP 型のカラムに使用すると。``文字列から Unix タイムスタンプへの'' 暗黙的な変換を行わずに、内部のタイムスタンプ値が直接返される。 UNIX_TIMESTAMP() に範囲外の日付を渡すと、0 が返されるが、この場合、実行されるチェックは基本チェック(年 1970 〜 2037、月 01 〜 12、日 01 〜 31)に限られる。 UNIX_TIMESTAMP() カラム値を差し引く場合、結果を符号付き整数にキャストする必要がある場合がある。 _uacct = UA-4617913-1 ; urchinTracker();
https://w.atwiki.jp/soscomp/pages/123.html
Unix系OSの歴史を学ぶとどんないいことがあるか 基本的に,「日本の歴史を学ぶとどんないいことがあるのか」という問いと同じである 今のIT業界全体がどうしてこんな状態になっているのかわかる手がかりになる Unix系OSを選んで使う上でのヒントになる Unixをお手本に設計されたシステムは星の数ほどあるので, それらを学ぶ上で手がかりになる Unixの歴史 = インターネットの歴史なので, インターネットを学ぶ上で手がかりになる Unix系OSの歴史を学ぶには Wikipediaかいつまんで要点だけまとめてあるので全体を把握しやすい Unix初心者や人間初心者には何が書いてあるかさっぱりわからないかも 所詮Wikipedia. 全ての事実を網羅しているわけでもないし, 主観が入らないという保障も無い一般的にUnixを語る上で主観を完全に取り払うのは難しいんだけどね 絵や写真が少ない. Unixの歴史はワークステーションの歴史でもあります. それらの写真が無いなんて寂しいじゃないか! 書物Unixの歴史について書かれている書物はたくさんあります 暇なときに図書館をぶらぶらしてみるのもいいかも 個人のサイト探してみると結構あると思います. ページのタイムスタンプ自体が"199x/xx/xx"だったりして, より一層歴史を感じられます. それ系の授業を取る何かあったっけ? 先生方に聞く大学教授 = Unix信者と言っても差し支えない学部学科が全国津々浦々結構あるんでね? 話し好きの先生がいたらUnixについて語らせてみましょう 知能学科 小笠原准教授知能学科内でも有名なBSDer ただし"BSD"がわかる学生が皆無に近いので「あの人BSDerだよね. アクマだよね」とか言っても反応してくれる人いないと思うよ 部屋のマシンは全部BSD. 愛機のThinkPad X60もBSD 「何かあったときのため」Windowsマシンも1台だけ用意しているらしい twmやw3mを常用してるこの人にとって「何か」って一体何なんだろう 気になった人はゼミへGo 知能学科 三宅芳雄教授2時間くらい空き時間を確保できたら話を聞きに行ってみましょう Unix系OSの歴史超コンピ研的まとめ Unixの誕生 だれかかけ 名前 コメント このページへのアクセス数 total - today - yesterday - このページのタグ一覧
https://w.atwiki.jp/uec1class1/pages/15.html
Unixコマンド一覧 ls -l カレントディレクトリのファイルの一覧(リスト)を表示する pwd カレントディレクトリを表示する cd directory カレントディレクトリを directory に変更する mkdir directory ディレクトリを directory を作成する man command command に関するオンラインマニュアルを表示する man マニュアルページの表示 cat ファイルの内容の表示 history 実行したコマンドの履歴が表示 . 現在のディレクトリを表す相対パス .. 親ディレクトリを表す相対パス / ルートディレクトリを表す絶対パス mkdir ディレクトリを作成する mv ファイルやディレクトリを別のディレクトリに移動 rm ファイルの削除 rmdir ディレクトリの削除 head ファイルの内容の先頭部分の表示 tail ファイルの内容の末尾部分の表示 diff 2つのファイルの内容の比較 cmp 2つのファイルの内容の比較 cat ファイルを連結して表示 Control キーを押しながら d キーでコマンドを受け付ける状態に戻る bc 対話形式によって演算処理の結果を表示 echo 文字列 を内容とするファイル filename が作る diff 指定したファイルの末尾にコマンドの出力結果を追加
https://w.atwiki.jp/nina_a/pages/18.html
カテゴリ「UNIX」に属するページ一覧 UNIX/gnuplot
https://w.atwiki.jp/sunbalcan/pages/22.html
UNIXコマンド ◆基本 cat ファイルの内容を表示する(パイプ)。複数のファイルを連結する cd カレントディレクトリを変更する。[[シェル]]の内部コマンド。 chdir カレントディレクトリを変更する。cd と全く同じ chmod ファイル・ディレクトリの属性を変更する。 cp ファイルをコピーする date 現在の日付を表示、設定、変更する emacs 高性能エディタ grep 指定のパターンにマッチする行を表示(パイプ) gzip 高機能なファイル圧縮・展開ツール (gunzip) id ユーザー名やID、グループを確認する less ファイル表示プログラム (ページャ) ls ファイル・ディレクトリを表示 man オンラインマニュアルを表示する more ファイル表示プログラム (ページャ) mv ファイルの移動、リネーム (名前変更) pwd カレントディレクトリを表示する。 rehash ハッシュテーブルを再構築する。csh・tcsh の内部コマンド rm ファイルの削除 tar アーカイバ。複数のファイルを1つにまとめる。 vi 基本的なエディタ ◆実践用 touch ファイルのタイムスタンプを変更、ファイルを新規作成する touch ファイル名 wc ファイルの中の行数(-l)、単語数(-l)および文字数(-m)の表示 wc -l ファイル名 chown ファイルの所有者を変更する su root (スーパーユーザ) になる。他人の名前でログインする uname システムの情報を表示 uname -a prtdiag システムの診断情報の出力 /usr/platform/`uname -i`/sbin/prtdiag prstat report active process statistics sed 行を削除 sed '1,5d' test.txt ⇒1から5行目を削除 置換① sed s/'a'/'b'/ test.txt ⇒各行の最初に見つかった'a'を'b'に置換 置換② sed s/'a'/'b'/g test.txt ⇒各行の全ての'a'を'b'に置換 cat -n test.txt |tail +3|head -2 test.txtの3行目~4行目を表示する find . -name "*.sql" -exec grep "test" {} \; 現在のディレクトリ以下サブディレクトリも含めて、*.sqlファイルからtestをgrepする
https://w.atwiki.jp/sakawork/pages/36.html
デバッガgdb実行オプション 主なコマンド 小技/TIPSなど デバッガ gdbについて書く dbxに(あまり覚えていないが)簡単な設定変更で gdbと同じようなインタフェースに変更できる(gdb on/off ?) とりあえずのところgdbについてだけ書いておく gdb GNUのデバッガ コンパイル時に-gオプションをつけた実行ファイルに対してデバッグできる $ gdb italic(){実行ファイル} コアファイルの解析 $ gdb italic(){実行ファイル} core 実行オプション オプション 動作 -s ファイル名 ファイル名のファイルをシンボルテーブルとする -e ファイル名 ファイル名を実行ファイルとして使用 -c ファイル名 ファイル名をコアファイルとして使用 -x ファイル名 ファイル名をコマンドファイルとして実行コマンドファイル gdbコマンドをあらかじめ書いたファイル -d ディレクトリ名 ソースファイルを検索するパスにディレクトリ名のディレクトリを追加 -r シンボルファイル内のシンボルテーブル全体を起動直後に読み込む起動が遅くなるが毎度毎度呼ばない分動作は速くなる 主なコマンド コマンド(短縮) コマンド 動作 r run 実行 実行時の引数をオプションとしてつけられるr 1 2 3 ・・・など q quit 終了 h help ヘルプ表示 コマンド(短縮でも可)指定でコマンドのヘルプ b 位置 breakpoint ブレークポイント設定 デフォルトは現在の実行位置をブレークポイントにする行番号,関数名,ファイル名 行番号・・・などの指定ができる d 番号 delete 指定した番号のブレークポイントを削除 n next 次の処理を実行(関数の中には入らない) s step 次の処理を実行、関数の内部に入る c continue 次のブレークポイントまで飛ぶ u up 呼び出した上位の関数へ移動、移動できない場合は次の処理を実行 d down その行で呼ばれる下位の関数へ移動 p print 出力 p/format でフォーマット指定可能C言語と同じように型変換して出力することも可能値を代入したり関数実行も可能 printのオプション 内容 p/a アドレス p/c 文字 p/d 符号付き10進数 p/f 浮動小数点数 p/o 8進数 p/t 2進数 p/u 符号なし10進数 p/x 16進数 x hex メモリの内容表示 printと同じオプションのほかに以下が使える hexのオプション 内容 x/s 文字列 x/i 逆アセンブル what whatis 変数の型を表示 whe where 現在実行している箇所へ到達するまでの関数の呼び出しを示すbt(backtrace)やi sと同じ i info 情報表示 infoのオプション 内容 i b ブレークポイント・ウォッチポイント・キャッチポイントの表示 i s 関数スタックの表示 i th スレッドの表示 j jump 指定した関数・アドレス・行数へ飛んで実行継続 l list リスト表示 デフォルトで直近、関数・行番号・ファイル指定もできる cond condition ブレークポイントに停止条件を設定cond 2 iCnt==0 ←ブレークポイント2はiCnt=0のときだけ停止cont 2 iCnt=0 ←ブレークポイント2で停止するとiCntに0が代入される(誤用?) wat watch 指定した式が変更されるときに停止w iCnt==0 ←iCnt=0のとき停止 awat awatch 指定した対象が読み書きアクセスされるときに停止 rwat watch 指定した対象が読まれたときに停止 cat catch 指定されたイベントが発生した時に停止 catchのオプション 内容 cat throw C++例外の発生 cat catch C++例外のキャッチ cat exec execの呼び出し(HP-UNIXのみ) cat fork forkの呼び出し(HP-UNIXのみ) cat vfork vforkの呼び出し(HP-UNIXのみ) tc tcatch 1回だけ停止させるキャッチポイント thr thread 指定スレッドへ移動 at プロセス番号 attach 実行中のプロセスにアタッチする det detach デタッチする 小技/TIPSなど 同じような動作確認などを何度も行う場合 あらかじめブレークポイント設定のコマンドをファイルに書いておき -xで読み込む 動作中のプロセスをデバッグするには gdbを立ち上げブレークポイントを設定しておく psコマンドでプロセス番号を調べattachする quitする前にdetachすること デッドロックや無限ループなどが起きている場合 上記の動作中のプロセスのデバッグ方法で解析するか 場合によってはkillコマンドでわざとにコアを吐かせて解析する コアファイルの解析 gdbの引数で実行ファイルとコアファイルを指定する where/btコマンドで落ちた箇所を調べる トップページ
https://w.atwiki.jp/unix-net/pages/2.html
メニュー UNIXについて UNIX迷言集 UNIX画像付き迷言集 リンク unixお絵かきチャット unixお絵かき掲示板 UNIX@mixi Nankaku_labs 下手だった奴が上手くなるためにした練習 UNIX@Twitter UNIX迷言集@Twitter メモ代り 他のサービス 無料ホームページ作成 無料ブログ作成 無料掲示板レンタル 2ch型掲示板レンタル お絵かきレンタル [PR] 薬剤師 求人 ここを編集
https://w.atwiki.jp/unix-net/
UNIXまとめ 1月9日 UNIXさん現在ボイトレちゅうー 7月17日 ついに、我らのunixまとめページがGoogle検索でヒットするようになりました。 このページはオープンソースのUNIXやBSDとは何ら関係ありませんので、 間違えて踏んでしまった方は回れ右してください。。。 彼がうにっくすと呼ばれるコトとなったエピソードをお伝えしましょう。 それは2年前のある日。 彼曰く、 UNIX=プログラミング言語。 堂々と提唱されてしまい、我々の常識をぶち壊してくれた事に始まるのです。 地球外生命体の彼の迷言は尽きることがありません。
https://w.atwiki.jp/gizumo1020/pages/18.html
UNIX/LINUX備忘録 このページはUNIX/LINUX関連の備忘録です。 ■コマンド
https://w.atwiki.jp/naobe/pages/97.html
Unix/Linuxへ戻る ストリーム通信 サーバ socketシステムコールを使ってソケット用のファイルデスクリプタ(sockfd)を作成 fd = socket(AF_INET, SOCK_STREAM, 0) socketオプションを設定して、TIMEWAIT状態でのbindを可能にする。 setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, on, sizeof(on)) sockfdにサーバのIPアドレス、ポート、プロトコルタイプ(internet/unixドメイン)を関連付けする。:bind(fd, (struct sockaddr *) servaddr, sizeof(servaddr) sockfdの受信キューを設定しクライアントから接続可能を宣言:listen(fd, listenq) クライアントからの接続を待つ:newfd = accept(fd, (struct sockaddr *) cliaddr, i) newfd 通信に使うファイルデスクリプタ、cliaddr:接続したクライアントのアドレス/ポート、i cliaddrのサイズ 子プロセスをforkして処理は子プロセスに任せる。親は次の接続を待機する if ( (pid = fork()) 0) err_sys("fork error"); if (pid 0) { close(newfd);/* parent closes connected socket */ WAIT_CHILD();/* wait for child to output to terminal */ continue;/* and back to for(;;) for another accept() */ } else { close(fd);/* child closes listening socket */ } 子プロセスは、newfdを使ってread(受信),write(送信)してクライアントと通信する。 クライアント socket socketの作成 オプション 以下のAPIでoptnameに設定する int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen); 【引数】 引数 説明 s ソケットを識別する記述子。 level optionの層。SOL_SOCKET ソケット層オプション optname オプション名 optval オプションの値 optlen オプションの長さ level optname 説明 SOL_SOCKET SO_REUSEADDR 設定するときは値に 1を設定する。設定解除には 0を設定する。TCP通信で、サーバ側が先に通信を終了したとき接続していたポートはTIMEWAIT状態になる。TIMEWAIT状態になるとbind不可になり接続を再開できない。これは他のプロセスがポートを使うことを制限するためで、使用していたプロセスが再開するには邪魔になる動き。SO_REUSEADDRを指定することで当該のプロセスがbindすることを許可する。(注1) SOL_SOCKET SO_KEEPALIVE 設定するときは値に 1を設定する。設定解除には 0を設定する。デフォルトでは、無通信状態からキープアライブパケットを送信するまで2時間。送信間隔は75秒。リトライ回数は9回。リトライ回数を超えると切断する。(注2) SOL_SOCKET SO_SNDBUF 設定するときは値に 1を設定する。設定解除には 0を設定する。 SO_RCVBUF 設定するときは値に 1を設定する。設定解除には 0を設定する。 SO_LINGER 値は、linger構造体をセットする。 IPPROTO_TCP TCP_NODELAY 値に 1を設定するとNO_DELAYが有効になる。Nagle アルゴリズムを無効にする(複数のパケットをまとめない。)。遅れのないリクエストが必要なHTTPに有効。(注3) 注1) http //www.geekpage.jp/programming/winsock/so_reuseaddr.php 参照 注2) http //d.hatena.ne.jp/iww/20081030/setsockopt 参照 注3) http //www.ibm.com/developerworks/jp/linux/library/l-hisock/ 参照 select 複数のファイルデスクリプタの入出力を管理する。複数のポート、UNIXドメイン、端末を1つのプログラムで管理できる。大規模なネットワークの高性能サーバに使う。 システムコール int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); 【引数】 引数 説明 nfds 登録したファイルディスクリプタの最大値+1 readfds readを開始するディスクリプタセット writefds writeを監視するディスクリプタセット exceptfds 帯域外データ受信を監視するディスクリプタセット timeout タイムアウト時間。NULLを指定すると監視対象の状態が変化するまで待つ 【戻り値】 状態が変化したディスクリプタの数。-1はエラー。 プログラム CentOSのmanページのサンプルプログラム。あるポートの接続を待って、別のポートに転送するサーバ。 #include stdlib.h #include stdio.h #include unistd.h #include sys/time.h #include sys/types.h #include string.h #include signal.h #include sys/socket.h #include netinet/in.h #include arpa/inet.h #include errno.h static int forward_port; #undef max #define max(x,y) ((x) (y) ? (x) (y)) /** * ポートを指定してソケット作成、listen * * @param listen_port ポート番号 * */ static int listen_socket(int listen_port) { struct sockaddr_in a; int s; int yes; if ((s = socket(AF_INET, SOCK_STREAM, 0)) 0) {//ソケット作成 perror("socket"); return -1; } yes = 1; //ソケットオプションを指定 if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *) yes, sizeof(yes)) 0) { perror("setsockopt"); close(s); return -1; } memset( a, 0, sizeof(a)); a.sin_port = htons(listen_port);//ポート番号をネットワークバイトオーダに変換 a.sin_family = AF_INET;//インターネットを指定 if (bind(s, (struct sockaddr *) a, sizeof(a)) 0) { perror("bind"); close(s); return -1; } printf("accepting connections on port %d\n", (int) listen_port); listen(s, 10);// 受信キューの個数を10にしてlisten return s; } /* * 転送先へ接続する * * @param connect_port 接続ポート * @param address 転送先アドレス * @return ソケットファイルディスクリプタ */ static int connect_socket(int connect_port, char *address) { struct sockaddr_in a; int s; if ((s = socket(AF_INET, SOCK_STREAM, 0)) 0) { perror("socket"); close(s); return -1; } memset( a, 0, sizeof(a)); a.sin_port = htons(connect_port); a.sin_family = AF_INET; if (!inet_aton(address, (struct in_addr *) a.sin_addr.s_addr)) { perror("bad IP address format"); close(s); return -1; } if (connect(s, (struct sockaddr *) a, sizeof(a)) 0) { perror("connect()"); shutdown(s, SHUT_RDWR); close(s); return -1; } return s; } #define SHUT_FD1 { \ if (fd1 = 0) { \ shutdown (fd1, SHUT_RDWR); \ close (fd1); \ fd1 = -1; \ } \ } #define SHUT_FD2 { \ if (fd2 = 0) { \ shutdown (fd2, SHUT_RDWR); \ close (fd2); \ fd2 = -1; \ } \ } #define BUF_SIZE 1024 /*** * selectを使った転送処理 * * 引数1 リッスンポート * 引数2 転送ポート * 引数3 転送先アドレス */ int main(int argc, char **argv) { int h; int fd1 = -1, fd2 = -1; // fd1 受信ディスクリプタ、fd2 送信ディスクリプタ char buf1[BUF_SIZE], buf2[BUF_SIZE]; int buf1_avail, buf1_written; int buf2_avail, buf2_written; if (argc != 4) { fprintf( stderr, "Usage\n\tfwd listen-port \ forward-to-port forward-to-ip-address \n"); exit(1); } signal(SIGPIPE, SIG_IGN); forward_port = atoi(argv[2]); h = listen_socket(atoi(argv[1])); if (h 0) exit(1); for (;;) { int r, nfds = 0; fd_set rd, wr, er; FD_ZERO( rd); FD_ZERO( wr); FD_ZERO( er); FD_SET(h, rd);//リッスンポートを読み込みfdとして登録 nfds = max (nfds, h); if (fd1 0 buf1_avail BUF_SIZE) { FD_SET(fd1, rd); nfds = max (nfds, fd1); } if (fd2 0 buf2_avail BUF_SIZE) { FD_SET(fd2, rd); nfds = max (nfds, fd2); } if (fd1 0 buf2_avail - buf2_written 0) { FD_SET(fd1, wr); nfds = max (nfds, fd1); } if (fd2 0 buf1_avail - buf1_written 0) { FD_SET(fd2, wr); nfds = max (nfds, fd2); } if (fd1 0) { FD_SET(fd1, er); nfds = max (nfds, fd1); } if (fd2 0) { FD_SET(fd2, er); nfds = max (nfds, fd2); } //リッスンポートの接続を待つ r = select(nfds + 1, rd, wr, er, NULL); // if (r == -1 errno == EINTR) continue; if (r 0) { perror("select()"); exit(1); } /* * 受信ポートが接続されたらacceptして新しいファイルディスクリプタ作成。 * 転送先へ接続する * */ if (FD_ISSET(h, rd)) { unsigned int l; struct sockaddr_in client_address; memset( client_address, 0, l = sizeof(client_address)); r = accept(h, (struct sockaddr *) client_address, l); if (r 0) { perror("accept()"); } else { SHUT_FD1; SHUT_FD2; buf1_avail = buf1_written = 0; buf2_avail = buf2_written = 0; fd1 = r; fd2 = connect_socket(forward_port, argv[3]); if (fd2 0) { SHUT_FD1; } else printf("connect from %s\n", inet_ntoa(client_address.sin_addr)); } } /* NB read oob data before normal reads */ if (fd1 0) // 帯域外データ(バッファリングを許されないイベント)が到着したら // 帯域外データとして転送先に転送する if (FD_ISSET(fd1, er)) { char c; errno = 0; r = recv(fd1, c, 1, MSG_OOB); //エラーが発生したら受信ポートを閉設 if (r 1) { SHUT_FD1; } else send(fd2, c, 1, MSG_OOB); } if (fd2 0) if (FD_ISSET(fd2, er)) { char c; errno = 0; r = recv(fd2, c, 1, MSG_OOB); if (r 1) { SHUT_FD1; } else send(fd1, c, 1, MSG_OOB); } /* * 端点1から要求があれば、最大、バッファの残りまで読み込む */ if (fd1 0) if (FD_ISSET(fd1, rd)) { r = read(fd1, buf1 + buf1_avail, BUF_SIZE - buf1_avail); if (r 1) { SHUT_FD1; } else buf1_avail += r; } /* * 端点2から要求があれば、最大、バッファの残りまで読み込む */ if (fd2 0) if (FD_ISSET(fd2, rd)) { r = read(fd2, buf2 + buf2_avail, BUF_SIZE - buf2_avail); if (r 1) { SHUT_FD2; } else buf2_avail += r; } /* * 端点1が受信準備できていれば、書きこみの残りを送信する */ if (fd1 0) if (FD_ISSET(fd1, wr)) { r = write(fd1, buf2 + buf2_written, buf2_avail - buf2_written); if (r 1) { SHUT_FD1; } else buf2_written += r; } /* * 端点2が受信準備できていれば、書きこみの残りを送信する */ if (fd2 0) if (FD_ISSET(fd2, wr)) { r = write(fd2, buf1 + buf1_written, buf1_avail - buf1_written); if (r 1) { SHUT_FD2; } else buf1_written += r; } //受信量と送信量が一致したら、バッファ位置を初期化する if (buf1_written == buf1_avail) buf1_written = buf1_avail = 0; if (buf2_written == buf2_avail) buf2_written = buf2_avail = 0; /* one side has closed the connection, keep writing to the other side until empty */ if (fd1 0 buf1_avail - buf1_written == 0) { SHUT_FD2; } if (fd2 0 buf2_avail - buf2_written == 0) { SHUT_FD1; } } return 0; } FD_SET ファイルディスクリプタセットに監視するファイルディスクリプタをセットする。 インタフェース void FD_SET(int fd, fd_set *set); 項目 IN/OUT 説明 fd IN 監視するファイルディスクリプタ set IN 監視するファイルディスクリプタの集合 注意 追加するファイルディスクリプタの数は、FD_SETSIZE(CentOS 5.5の場合は、1024)未満でなければならない。 FD_ISSET ファイルディスクリプタセットにセットしたファイルデスクリプタが使用可能か確認する。 インタフェース int FD_ISSET(int fd, fd_set *set); 項目 IN/OUT 説明 fd IN ファイルディスクリプタ set IN ファイルディスクリプタセット 戻り値 OUT 1 使用可能、0 準備中 poll ファイルディスクリプタセットに登録したファイルディスクリプタが使用可能になるまで待つ。selectの改良版。 インタフェース int poll(struct pollfd *fds, nfds_t nfds, int timeout); struct pollfd { int fd; /* file descriptor */ short events; /* requested events */ short revents; /* returned events */ }; 項目 IN/OUT 説明 fds IN ファイルディスクリプタセットの配列。 nfds IN 配列の個数 events IN 監視するイベントのビットマスク revents OUT 実際に起こったイベントのビットマスク timeout IN pollがブロックする時間の上限(msec)。負の数を設定すると無限に待つ。 戻り値 OUT 正の数:成功。reventsの数。、0:タイムアウト、-1 エラー イベントは、poll.hで定義される。 イベント 説明 POLLIN 読み出し可能なデータがある。 POLLPRI 読み出し可能な緊急データ (urgent data) がある POLLOUT 書き込みが停止 (block) しない状態である。書き込み可能である。 POLLRDHUP Linux 2.6.17 以降。ス トリームソケットの他端が、コネクションを close したか 、コネクションの書き込み側を shutdown した。 POLLERR エラー状態 (出力の場合のみ)。 POLLHUP ハングアップした (出力の場合のみ)。 POLLNVAL 不正な要求 fd がオープンされていない (出力の場合のみ)。 epoll http //alpha.mixi.co.jp/2007/10631/ 参照 pollの一種。非同期なポールが可能? int epoll_create(int size) epollディスクリプタを作成する。 項目 IN/OUT 説明 size IN ディスクリプタの大きさ 戻り値 OUT epollディスクリプタ int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event) epollディスクリプタを操作(追加、削除)する 項目 IN/OUT 説明 epfd IN epollディスクリプタ op IN 操作。 fd IN 対象となるファイルディスクリプタ event int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout); epollディスクリプタのI/Oイベントを待つ 項目 IN/OUT 説明 epfd IN epollディスクリプタ events OUT 呼出側が利用可能なイベント maxevents IN イベントの最大数 timeout IN タイムアウト(msec) 戻り値 OUT 準備ができているファイルディスクリプタの数。0 タイムアウト。-1 エラー getaddrinfo ノードの名前、IPアドレス、サービスからアドレス情報を取得する int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res); 項目 IN/OUT 説明 node IN ノードの名前、IPアドレス service IN hints IN res OUT 名前つきパイプ(Named pipe) プロセス間の通信を行うためのファイル。mkfifoコマンドを用いて作成する。作成した名前つきパイプに対し て、write, readすることによってプロセス間通信を行う。4096バイトを超えるwriteを行うとread開始される まで待たされる。 参照 http //www.ncad.co.jp/~komata/c-kouza12.htm fcntl インタフェース int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock); 項目 IN/OUT 説明 fd IN ファイルディスクリプタ cmd IN 操作 arg IN 引数 lock ロック cmd 説明 F_SETFD ファイルディスクリプタフラグにargで指定した値を設定する F_GETFD ファイルディスクリプタフラグを読み出す。戻り値が読み出したファイルディスクリプタフラグ。 F_SETFL ファイル状態フラグにargで指定した値を設定する F_GETFL ファイル状態フラグを読み出す。戻り値が読み出したファイル状態フラグ。 F_SETFD/F_GETFDで使えるフラグは、FD_CLOEXEC のみ。FD_CLOEXECは、execveしたときに親プロセスが開いたファイルディスクリプタを閉じる。