C言語で複数スレッドからファイルアクセスする場合、ロックする関数についてご教示ください。 下記のようなプログラムを作成しています。 ・スレッド(1)は、ファイルに対してライトします。 ・スレッド(2)は、スレッド(1)によってライトされたファイルに対してリードします。 ・必ずしもスレッド(1)(2)は同じファイルにアクセスするわけではなく、スレッドごとにfopen()します。 ・タイミングによってスレッド(1)(2)は同じファイルにアクセスします。 ・(不測の自体でロックをとったままスレッドが落ちてしまった場合、他方のスレッド側ロックを強制解除して処理は継続させたいです(別途エラーメッセージはログに出力します)。 flock(fd,LOCK_EX)をつかってロックを取る方針で検討していたのですが、 「flock()はファイル記述子ごとにロックするので、 fopen()を別々に行っていては正
Linux kernel coding style¶ This is a short document describing the preferred coding style for the linux kernel. Coding style is very personal, and I won’t force my views on anybody, but this is what goes for anything that I have to be able to maintain, and I’d prefer it for most other things too. Please at least consider the points made here. First off, I’d suggest printing out a copy of the GNU c
Linux の共有ライブラリを作るとき PIC でコンパイルするのはなぜか 通常、Linux の共有ライブラリを作るときは各 .c ファイルを PIC (Position Independent Code) となるようコンパイルします。しかし、実は PIC でコンパイルしなくても共有ライブラリは作れます。それでは PIC にする意味はあるのでしょうか。 さっそく実験してみます。 int func () { printf(""); printf(""); printf(""); } PIC でコンパイルするには gcc に -fpic または -fPIC を渡します。-fpic の方が小さく高速なコードを生成する可能性がありますが、プロセッサによっては -fpic で生成できる GOT (Global Offset Table) のサイズに制限があります。一方、-fPIC はどのプロセッサで
Section: C Library Functions (3) Updated: LinuxThreads Index JM Home Page roff page 名前 pthread_mutex_init, pthread_mutex_lock, pthread_mutex_trylock, pthread_mutex_unlock, pthread_mutex_destroy - mutex の操作 書式 #include <pthread.h> pthread_mutex_t fastmutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t recmutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; pthread_mutex_t errchkmutex = PTHREAD_ERRORCHECK
systemd stopで実行されるコマンド [サービス名].serviceファイルのExecStopパラメータに指定されたコマンドが実行される。 ExecStopが設定されていない場合は、KillSignalパラメータで指定されているシグナルをサービスのプロセスに送信する。 KillModeの設定に従って、サービスのグループに属するプロセスにも終了シグナルを送信する。 KillSignalのデフォルトはSIGTERMです。 KillModeのデフォルトはcontrol-groupで、サービスに属する子プロセスが終了されます。 [systemd.service] (https://www.freedesktop.org/software/systemd/man/systemd.service.html)より ExecStop= ExecStart=によって開始されたサービスを停止するために
SystemdユニットでExecStopを書いたのが初めてだったのだけれど、どうしてもExecStopを書くとTypeによらずstopされてしまう。 Typeがoneshotであるならばこれは正しい。 Type=oneshotである場合、.serviceユニット起動時にExecStartを実行し、この終了を待つ。 ExecStartプロセスの実行中はactiveとなり、実行が終了するとサービスそのものが終了したとみなし、inactiveになる。 Systemdユニットに詳しい人は割と少ないのでサービスタイプについて改めて解説しておこう。 oneshotは単純にその時に実行するだけのサービスである。 起動は実行終了を待ち、終了したらサービス自体を終了する。 simpleはデフォルトのサービスタイプである。 このサービスタイプはプロセスを実行していることで機能するサービスである。 フォアグラウ
Section: Linux Programmer's Manual (2) Updated: 2020-06-09 Index JM Home Page roff page 名前 socket - 通信のための端点 (endpoint) を作成する 書式 #include <sys/types.h> /* 「注意」参照 */ #include <sys/socket.h> int socket(int domain, int type, int protocol); 説明 socket() creates an endpoint for communication and returns a file descriptor that refers to that endpoint. The file descriptor returned by a successful call wil
ここでは、Linuxを使ったネットワークプログラミングの説明を行いたいと思います。 ここで対象としている読者は、ネットワークプログラミング初心者(もしくは入門者)かつLinux環境でプログラミングを行いたい人です。 開発環境としては、C言語+gccを想定しています。 説明内容は主にソケットプログラミングになります。 なお、C言語そのものが初めての方は「C言語入門」も参考にどうぞ。Windows専用には書いてませんが主にC言語で共通の部分を解説しています。 コードを書く前の準備 まず、gccを使える状態にしないといけません。 ディストリビューションにもよりますが、Linuxを普通にインストールしただけでは開発環境は入りません。 開発環境を用意するためには、gccやglibcなどのrpmを必要に応じてインストールしてください。 次に、エディタが必要になります。 mule、emacs、xemac
プログラムが終了するときはOSがFINとか送ってくれるけど、途中でLANケーブル抜けたときとかはどうにもならないので 自分で切断を検知する必要がある。キープアライブを使って切断を検知する。 int option = 1; setsockopt( sd, SOL_SOCKET, SO_KEEPALIVE, (void*)&option, sizeof(option) ); デフォルトでは切断検知まで 2時間11分15秒。 2時間とか待ってると日が暮れるので、これをせめて3分とかにする int option = 1; setsockopt( sd, SOL_SOCKET, SO_KEEPALIVE, (void*)&option, sizeof(option) ); option = 60; setsockopt( sd, IPPROTO_TCP, TCP_KEEPIDLE, (void*)&
systemdで作ったserviceのログ(標準出力)をファイルに出力したい!みたいな奴の、少し新しめなやり方。 (タイトルちょっと変わった、以前のタイトル: systemd 236からはStandardOutput=fileでログをファイルに出力できる) 先に結論 僕は長話が好きなので、急ぎの人のために先に結論を。 systemdのバージョン236以上からはStandardInput、StandardOutput、StandardErrorにfileを指定可能。 StanderdOutput=file:/absolute/pathみたいに指定する。 しかしこれはファイルが追記されない。追記させるにはsystemd 240から追加されたappendが必要。 systemdのログをファイルに出力したい みたいな要求、ありますよね?僕はあります。 もちろんsystemctl statusとかj
中村 実 @nminoru_jp @kosaki55tea どうなんでしょう。close()がEINTRで返ってきた場合にリトライをかけないとリークが発生することがあります。FUSEでできた変なネットワークファイルシステムを使っている場合なんて特に。 2013-10-30 11:26:30 鯉江 @koie @nminoru_jp closeがエラーになったら異常系に飛ばしてました。EINTRリトライは考えてなかったっす。異常系処理でcloseするときもEINTRリトライはしないといけないなぁ。やばいなぁ。 2013-10-30 11:29:17 Tanaka Akira @tanaka_akr @nminoru_jp @kosaki55tea close(fd) が失敗した時に fd が生きていることがあるのですか。以前 NFS の quota でテストして close が失敗したときに
印刷する メールで送る テキスト HTML 電子書籍 PDF ダウンロード テキスト 電子書籍 PDF クリップした記事をMyページから読むことができます あなたは毎週、いくつくらいのLinuxコマンドを実行しているだろうか。Linuxのシステム管理者なら、その数は少なくないだろう。また、実行したコマンドの中で、あなたがすぐに思い出せるものはどれくらいあるだろうか。おそらく、その数はわずかだろう。筆者と同じように、記憶力が昔より衰えた人であればなおさらだ。 筆者は毎週、さまざまなLinuxマシンで非常にたくさんのコマンドを実行している。そのため、実行したコマンドをいつも正確に思い出せるとは限らない。そこ筆者が頼りにしているのが、「fish」と呼ばれる小さなbashユーティリティだ。 fishは、Linux、UNIX、macOSで使える高性能のコマンドラインシェルで、以下の機能を持っている。
All trademarks and copyrights are owned by their owners, unless specifically noted otherwise. Use of a term in this document should not be regarded as affecting the validity of any trademark or service mark. Permission is granted to make and distribute verbatim copies of this standard provided the copyright and this permission notice are preserved on all copies. Permission is granted to copy and d
今回は、「/var/run」ディレクトリについて。 「/var/run」ディレクトリは、システムを起動した後の情報が格納されるディレクトリです。このディレクトリには、主に実行中のプロセスに関する情報が格納された「pidファイル」が存在します。/var/runディレクトリは一般ユーザでも参照できますので、lsコマンドで参照してみてください。 -- $ ls /var/run autofs.pid crond.pid messagebus.pid -- 「.pid」で終わっているファイルがpidファイルです。このファイルには、該当するプロセスのプロセスIDなどの情報が記述されています。たとえば、/var/run/crond.pidファイルには、crondのプロセスIDが記述されています。 このファイルは、スクリプトやほかのプロセスで利用されます。プロセスIDが記述されているので、このファイルは
Section: Linux Programmer's Manual (2) Updated: 2015-01-22 Index JM Home Page roff page 名前 select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO - 同期 I/O の多重化 書式 /* POSIX.1-2001 に従う場合 */ #include <sys/select.h> /* 以前の規格に従う場合 */ #include <sys/time.h> #include <sys/types.h> #include <unistd.h> int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); void FD_C
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く