• ベストアンサー

access関数を説明できる方いますか?

punchan_jpの回答

回答No.3

stat() や access() 等のUNIXのシステムコール関数は、通常 man に必要十分な情報が載っています。 man 2 stat man 2 access 等、されてみたでしょうか?英語であったとしても、難しい文法は 使っていませんので、すぐに慣れると思います。OSによっては、日 本語のマニュアルが用意されている場合もありますが、かえってわ かりにくいこともあるので、原文を参照する習慣をつけるのがいい です。 例えば、FreeBSDの man によると、stat() の RETURN VALUES は、  Upon successful completion a value of 0 is returned. Otherwise, a value of -1 is returned and errno is set to indicate the error. ですので、「stat() が成功したとき(ファイルの属性が得られた とき)に 0 を返し、それ以外では -1 を返して errno に値がセッ トされる」という意味になります。どういうときに属性が得られな いことがあるかというと、ERRORS の項を見ると、パスの途中にディ レクトリでないものがあった、とか、名前が長すぎる、とか、ファ イルが存在しない、とか、途中のディレクトリにアクセス許可がな かった、とか、などなどです。 access() に関しても同様ですが、これの主な用途は、自分にとっ てそのファイルが本当に読み書きできるかを調べるものですので、 可能なら 0 を返し、そうでなければ -1 を返します。ERRORS に関 しては似たようなものですが、-1 を返すかどうかは、どういうモー ドでのアクセス可能性を問い合わせたかによって変化します。その 意味では、単にファイルのモード等を取り出すだけの stat() とは 異なります。また、access() では、ファイルシステムが readonly のときに、書き込みができないこともチェックできます。(EROFS がセットされる) MSDNというのがマイクロソフトのサービスのことだとすれば、UNIX に関する情報はあんまり期待できないのではないかと思いますが、 試したことがないのでわかりません。 errno を知りたければ、/usr/include/sys/errno.h を見るのはい かがですか?ただし、各システムコールで、異なるエラーを同じ errno で表現したりもしますから、結局 man を見て errno ごとの 意味を読み取るのが正確ですが。 manだけでは不安とか実例がいっぱい欲しいという場合には、書籍 もありますので、「UNIX システムコール プログラミング」などを キーワードにして、検索してみてください。

aaaaa
質問者

お礼

とてもためになるお話をありがとうございます。おかげさまで自由に使えるくらいの知識ができたと思います。 書籍の件でもUNIXと聞いて、はっとしました。そういう本を探したことがありませんでした。そういえば他の方で書籍についての質問をしていた方がいましたので、そこを見れば非常に興味深い回答がありました。 それにしてもある程度Cができるようになったらその先はまずUNIXを学ばねばならないのでしょうか? その辺に関わることをまた別の質問をしたいと思いますのでお暇がありましたらどうかよろしくお願いします。 では、回答をくださったおふた方様、ありがとうございました。

関連するQ&A

  • C言語の関数を分かりやすく説明してください。

    C言語を学習しています。 C言語の入門書を読んでいて、どうしても関数のこと(引数とか戻り値とか自作関数についてのこと)が分かりませんでした。ネットで調べてみたりもしたのですが分かりませんでした。 かみ砕いて説明していただけるとありがたいです。

  • 関数ヘッダ?

    {コメントで関数の働きや、引数や戻り値(=関数の返す値)これらの関数を説明するコメント文を関数ヘッダと読んだりもします。} とネットでは書いてあったのですが実際にはどんな感じで書くのかよくわかりません。そしてこれをどこに書けばいのでしょうか? 例としてはこんな感じですか?(多分というか絶対間違ってると思いますが) 関数ヘッダの記述は自由でいいと聞きました。 :関数ヘッダ 関数名 : main   型  :型の動きを書く      引数  : 引数の動きを書く   戻り値 : 0   履歴 :名前  修正内容 日付

  • C言語によるガンマ関数の記述

    今、C言語を用いてガンマ関数を計算する方法を模索中でです。 理想的にはガンマ関数の引数に数値を入れたら戻り値を返すというのがいいのですがそうもうまくいかないと思います。 そこで以下のような形で整数の場合と非整数の場合で作ることを考えています。しかし、引数が整数のときはわかるのですが、非整数のときがわかりません。どうしたらよいでしょうか。 以下に関数の概要を掲載します。 ==========関数の概要=========== 関数名:Gamma(x) 戻り値:double 引数:x[double] 1)引数が0より大きい整数(1,2,3...)のとき   階乗の自己回帰文を使用して計算 2)引数が0より大きい非整数の場合 ==========▲ここまで==========

  • C言語の高階関数についてです。

    C言語の高階関数についてです。 double f ( (*g)(double) ){...} とすると「関数を引数にする関数」が作れますが、 「関数を引数にする関数」を引数にする関数って作れますか??? その場合は、引数のところどうやって書けばいいでしょうか??

  • C++で他のファイルの関数の引数を引きだす方法

    C++初心者です。 あるCプログラムに関数: testFunction(const char x[ ], int a, int b, int c)があり、 この関数はchar y[ ]を戻り値として返します。 次の段階で、別のC++を作成し、その中で、上記testFunctionを呼び出し、 使用している引数を引き出して以降のプログラムで使用する仕様のプログラムを組んでいます。 他のファイルに存在する関数を呼び出す方法は、 std::cout << testFunction(x[], a, b, c) << std::endl; ではないかと思っているのですが、ここから先が進まず困っている状況です。 戻り値だけではなく、引数も呼び出すことは可能でしょうか。 可能であれば、どのようにして呼び出すことができるのでしょうか。 アドバイスをお願いいたします。

  • 関数引数に対する制限値チェック方法

    引数に対する制限値チェック方法  プログラミング(組み込み系C言語)関数作成時にいつも私が迷ところなのですが、  関数の引数に対する制限値(範囲外)チェックどうするか、次の(1)、(2)で悩んでます。。   【1】関数内で制限値チェックで行い、制限値外であれば戻り値でエラーコードを返す。   【2】関数呼び出し時に、引数となる値(変数)をチェックし、制限値内であることを確認してから、関数を呼び出す。  上記の【1】、【2】の方法どちらがよいでしょうか?  状況にもよるとは思うのですが、その場合はどういった状況時に(1)||(2)がよいのか教えてください。  (【3】もあればお願いします。)  --【1】がお勧めの場合の質問  (1)本関数での"結果"を返したいときどうすればよいかアドバイスください。     戻り値("結果")と、エラーコードを兼用するのはなんかイヤです。。     エラーコード付き関数は、全て同じ戻り値(1:OK時、-1:NG時 みたいに)     としてまとめたいからです。  (2)極端にほとんどの関数の戻り値を、OK/NG とす。これってどうですか?、 ///////////////////////  【1】、【2】の利点、欠点を僕なりに考えてみました。  ##【1】の利点/欠点  利点:   ・本関数呼び出し時に、毎回制限チェックをしなくてよくなる。    (汎用的に様々な場面で、使用するのであればこれは良い利点だと思います。)  欠点:   ・戻り値のとして、エラーコードを返さなくてはならないため、本関数での結果を返したい場合、    以下方法をとらないといけない。      1、引数をポインタとして、その引数で値を返す。      2、戻り値として、エラーコードと兼用して返す。        (例:エラー時の戻り値 = 0、正常にの戻り値 = 1~ 255)  ##【2】の利点/欠点  利点:   ・エラーコードを返す必要がなくなるため、戻り値が有効利用できる。  欠点:   ・関す呼び出し毎に、制限チェックが発生し、制限チェック忘れが発生する。    (汎用的に使うにのであればなお・・・)

  • c言語の関数定義について

    次の関数定義を考える. int f(int x) {if (x > 0) {return x * f(x-1);} else {return 1;} } この関数f と働き(すなわち,引数と戻り値の関係)が同じで再帰呼出(recursive call) を使わない関数g をC で定義せよ.ただし,オーバーフロー(overflow) については考慮しなくてよい. ”この関数f と働き(すなわち,引数と戻り値の関係)が同じで再帰呼出(recursive call) を使わない関数g をC で定義せよ”って理解できません、どのように定義したいいか、ご教授お願いします。

  • XSUB.h、EXTERN.h、perl.h について

    ◆状況 C言語+Perlで作られている機能を、 Perlだけのソースに移行しようとしています。 ◆困っていること 今まで、知らない言語を読む際、 ネットや本にある、関数一覧などから、 「そのプログラムで何をしようとしているか?」 を読み取れていたのですが、 C言語+Perlにおける、下記の関数??と思われるものなどについて、 全然、資料/情報が見つからず、困っています。 具体的には、 dXSARGS Perl_croak SvPV_nolen XPUSHs PUTBACK などです。 (恐らくは、EXTERN.h、perl.h、XSUB.h というヘッダファイルに定義されているのかも知れませんが。) stdio.h などにあるような、fopen関数だったり、fscanf関数などのようなものは、 いくらでもネット上/本に載っているのですが、上述のものについて、全然見つかりません、、 /***********************************/ また、includeファイルに、定数、構造体の定義、関数のプロトタイプ、マクロの定義、が記述されると認識していますが、 しかしながら、 ソース上に出てくる「Perl_croak」という箇所は、おそらく、Perl_croakという関数のように思われました。 と、すると、 includeファイルに、引数&戻り値などのインターフェース仕様だけ書かれているのではなく、 Perl_croak関数が行う、「処理の実態」も、ヘッダファイルに記述されているということでしょうか?? また、 dXSARGS という箇所については、戻り値を受け入れるような記述もなく、 dXSARGS; と一行書かれているだけなのですが、関数ではなく、戻り値を必要としないサブルーチンということでしょうか? /***********************************/ どなたか、資料/情報や、もしくは調べ方などをご存知の方がいらっしゃれば、 ご教授お願いできませんでしょうか? 些細な情報でも構いませんので、宜しくお願い致します。。

  • 文字列の数字部分を取り出す関数・メソッド

    こんにちは。 ある文字列から、数値部分を取り出す関数やメソッドは存在するのでしょうか? たとえば、  引数:"abc123"→戻り値:123  引数:"a1b2c3"→戻り値:1 ※はじめに見つかった数値 という感じです。 無いのであれば、自作しようと考えているのですが…。

  • スプレッドシートのGASの関数で複数戻り値取得

    googleのスプレッドシートを使っています。 Google Apps Scriptでデータの取得を行っているのですが、 1つの関数から複数の戻り値を得るような方法はありますでしょうか? マイコンのC言語などをやった際に、ポインタ変数を関数の引数に設定して、その関数の引数に配列変数などをアドレス指定で設定することで複数の戻り値を得るような方法があったと思うのですが、GASでも同様の方法などはありますでしょうか? どうぞ、ご教示の程よろしくお願い致します。