質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

Q&A

解決済

1回答

954閲覧

MHCにおけるディレクトリ操作関数のそれぞれの役目と違いについて

teratail2020

総合スコア9

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

0グッド

0クリップ

投稿2021/11/22 02:01

前提・実現したいこと

MHC(MPLAB Harmony Core)のディレクトリ操作関数のうち下記2関数につきまして質問がございます。
・SYS_FS_HANDLE SYS_FS_DirOpen(const char* path);
・SYS_FS_RESULT SYS_FS_DirectoryChange(const char* path);
SYS_FS_DirOpenは指定されたディレクトリを開く関数、SYS_FS_DirectoryChangeは指定されたディレクトリに移動する関数との記載がMPLAB Harmony Core Helpに有りました。
どちらもディレクトリ移動という同じ動作を実行しているように思えますが、これらの動作の違いは何でしょうか?
ご存じの方はご教授よろしくおねがいいたします。

補足情報(FW/ツールのバージョンなど)

参考ページ
https://microchip-mplab-harmony.github.io/core/frames.html?frmname=topic&frmfile=00926.html

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

私は MHC というものに詳しいわけではないということは事前にお断りしておきますが、ドキュメントから読み取れる限りでは SYS_FS_DirOpen を移動と考えるべきではないです。 ファイルハンドルを開くのと同じ感覚でディレクトリのハンドルを開いているわけで、ディレクトリに対応付いているハンドルが返却値として返されます。 状態に変化を及ぼしてはいません。 何も移動していません。

SYS_FS_DirectoryChange はカレントディレクトリを変更するもので、返却値は成功か失敗かを返すだけです。 ただ、ドキュメント内では表現が current working directory だったり present directory だったりして言葉の揺らぎがあるようです。 (ひょっとすると厳密には使い分けていたりするのかも?)

投稿2021/11/22 05:16

SaitoAtsushi

総合スコア5444

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teratail2020

2021/11/22 06:56

回答ありがとうございます。SYS_FS_DirOpenで得られたハンドルは、ディレクトリ内のファイル毎のプロパティ取得関数SYS_FS_DirRead、指定されたファイルの有無を確認する関数SYS_FS_DirSearch、および前述2つの関数の動作起点初期化関数SYS_FS_DirRewindに用いられると認識していますが、これらの作業を行っている対象ディレクトリがカレントディレクトリなのでは無いでしょうか?ならばSYS_FS_DirectoryChangeやSYS_FS_CurrentWorkingDirectoryGetの引数にもディレクトリハンドルが必要な気がします…。それが無いということはディレクトリハンドルに関連付けられた作業ディレクトリとカレントディレクトリは別物になるのではと考えています。その場合カレントディレクトリは何なのかがわからない状態です。
SaitoAtsushi

2021/11/22 07:37

> これらの作業を行っている対象ディレクトリがカレントディレクトリなのでは無いでしょうか? カレントディレクトリはグローバルな (といっても普通はプロセス毎に) 状態として保持されます。 前提を確認するのですが、 Windows や Linux でいうところのカレントディレクトリという概念についてはご存じですか?
jimbe

2021/11/22 07:49

私も MHC は知りませんのでドキュメントと想像からです。 > ディレクトリ内のファイル毎のプロパティ取得関数SYS_FS_DirRead、 ~ 、これらの作業を行っている対象ディレクトリがカレントディレクトリなのでは無いでしょうか? SYS_FS_DirOpen でオープン時にパスを指定して得たハンドルを用いて動作するようですので、それらの関数の対象は「カレントディレクトリ」では無いものとと思います。 「カレントディレクトリ」とは、パスを指定する場合に相対パスを指定した時の起点となるディレクトリでしょう。 その「カレントディレクトリ」を変更するのが、 SYS_FS_DirectoryChange ではないでしょうか。
teratail2020

2021/11/22 08:07

>jimbe つまりSYS_FS_DirOpenの引数とする相対パスの起点をSYS_FS_CurrentWorkingDirectoryGet によって得たり、SYS_FS_DirectoryChangeによって適切なディレクトリに変更する関数であるとの認識でよろしいでしょうか?
jimbe

2021/11/22 08:16

SYS_FS_CurrentWorkingDirectoryGet 関数が「"カレントディレクトリ"の文字列表現を返す(buff にセットする)モノ」のでしたら、試してみるのが一番かと思います。 SaitoAtsushi さんが回答で"言葉の揺らぎ"と言われていますように、「カレントディレクトリ」と「CurrentWorkingDirectory」が同じものかはドキュメントの一部分を呼んだだけでは分かりかねます。
SaitoAtsushi

2021/11/22 16:02

ドキュメント上で SYS_FS_CurrentWorkingDirectoryGet の使用例 (example) として書かれているものを見ると SYS_FS_DirectoryChange で変更したものが SYS_FS_CurrentWorkingDirectoryGet で得られるということについては疑う余地はないでしょう。 関数の使い方はそれでよいとして、用語の使い方というのは同じものが状況というか考え方によって別の名前で呼ばれるのはごく普通にあることなので、全体の構造を理解しないと正確なことが言えません。 たとえばプログラム言語の解釈において字句レイヤで識別子と呼ばれているものが構文レイヤではクラス名だったり変数名だったりするわけです。 同じものが視点によって名前が変わります。 違う用語を使っているというのが違う意味付けを持っているのか単に雑なのかは部分的に見てもよくわからないんです。 個人的には単に用語法を整理せずに書いている印象を受けてはいますが……。
teratail2020

2021/11/24 08:04 編集

各位 回答ありがとうございます。正確性を確保するためにはjimbe様のご指摘通りに実機試験を行うのが確実です。 しかしながら基板が未作成状態であるため、現在実機試験ができません。以上を踏まえましても「「カレントディレクトリ」とは、パスを指定する場合に相対パスを指定した時の起点となるディレクトリでしょう。」の回答通りに捉えますとすべての関数の役割と説明の内容が腑に落ちます。ご教授下さりありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問