| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
編集の要約なし
==[[C 低水準ファイルアクセス]]== | [[Programming C]]|
====file descriptor====
*失敗すると、-1をかえし、global変数のerrnoに値を設定
*返された file descriptor は、read や write で利用できる。
*Openするfileまたは、device Openするfileまたは、de[[vi]]ce は、'path' parameterに指定する。
*Parameter 'oflags'には、file を open するときの動作を指定する。
!説明
|-
|O_RDONLYO_[[R]]DONLY
|読み取り専用
|-
|O_WRONLYO_W[[R]]ONLY
|書き込み専用
|-
|O_RDWRO_[[R]]DW[[R]]
|読み書き用
|-
|file の最後に追加
|-
|O_TRUNCO_T[[R]]UNC
|file の長さを 0 に切り詰め、既存の内容を破棄
|-
|O_CREATO_C[[R]]EAT
|必要に応じて、mode で指定された permission で file を作成
|-
|O_EXCL
|O_CRETとともに指定された場合、既にfileが存在していればopenは失敗。O_C[[R]]ETとともに指定された場合、既にfileが存在していればopenは失敗。
|-
|}
=====初期permission=====
open に O_CREAT O_C[[R]]EAT flag を指定して file を作成する場合には、parameterを3つ指令する必要がある。3つ目の parameter の mode には、sys/stat.h header file で定義されている flag(以下参照) の bit 単位の論理和を指定。
{|class="wikitable"
!内容
|-
|S_IRUSRS_I[[R]]US[[R]]
|owner の読み取り permission
|-
|S_IWUSRS_IWUS[[R]]
|owner の書き込み permission
|-
|S_IXUSRS_IXUS[[R]]
|owner の実行 permission
|-
|S_IRGRPS_I[[R]]G[[R]]P
|group の読み取り permission
|-
|S_IWGRPS_IWG[[R]]P
|group の書き込み permission
|-
|S_IXGRPS_IXG[[R]]P
|group の実行 permission
|-
|S_IROTH
|[[その他 ]] user の読み取り permission
|-
|S_IWOTH
|[[その他 ]] user の書き込み permission
|-
|S_IXOTH
|[[その他 ]] user の実行 permission
|-
|}
int main() {
int out;
out = open("file.out", O_CREATO_C[[R]]EAT, S_IRUSRS_I[[R]]US[[R]]|S_IWUSRS_IWUS[[R]]|S_IROTHS_I[[R]]OTH);
}
#include <unistd.h>
int ioctl(int filedes, int cmd, ...);
ioctlは何でも屋的な関数で、device ioctlは何でも屋的な関数で、de[[vi]]ce と その descriptor の振る舞いを制御したり、device の振る舞いを制御したり、de[[vi]]ce が提供する service ser[[vi]]ce を設定するための interface を提供する。*さまざまなdeviceでそれぞれ独自の呼び出しが定義されている。さまざまなde[[vi]]ceでそれぞれ独自の呼び出しが定義されている。
===file 操作のためのその他の 操作のための[[その他]]の system call===
====lseek====
#include <unistd.h>
*parameter offset には位置を指定し、whenceには offsetの以下の意味を指定
**SEEK_SET offset は絶対位置
**SEEK_CUR SEEK_CU[[R]] offset は現在位置から相対
**SEEK_END offset はfileの末尾から相対
int in, out;
in = open("file.in", O_RDONLYO_[[R]]DONLY);
while(read(in, &c, 1) ==1) {
write(1, &c, 1);
lseek(in, 1, SEEK_CURSEEK_CU[[R]]);
}
exit(0);
|-
|st_dev
|fileが存在するdevicefileが存在するde[[vi]]ce
|-
|st_uid

案内メニュー