Nios® Vプロセッサー・ソフトウェア開発者ハンドブック

ID 743810
日付 10/31/2022
Public

このドキュメントの新しいバージョンが利用できます。お客様は次のことを行ってください。 こちらをクリック 最新バージョンに移行する。

ドキュメント目次

7.7.1.1.1. グローバル・エラー・ステータスのerrnoの変更

これらの関数はいずれも、グローバル・ エラー・ステータスのerrnoを直接変更しません。代わりに、戻り値は、errno.hで提供される適切なエラー コードの否定です。

たとえば、ioctl()関数は、要求を処理できない場合、errnoENOTTY に直接設定するのではなく、-ENOTTY を返します。 これらの関数を呼び出す HAL システムルーチンにより、errnoがそれに応じて設定されるようになります。

これらの関数の関数プロトタイプは、それぞれintではなくalt_fd* 型の入力ファイル・ディスクリプター引数を取るという点で、アプリケーション・レベルの関数プロトタイプとは異なります。

新しい alt_fd構造体は、open()の呼び出し時に作成されます。 この構造体インスタンスは、関連するファイル・ディスクリプターに対して行われるすべての関数呼び出しに入力引数として渡されます。

次のコードは、 alt_fd 構造を定義します。

typedef struct
{ 
alt_dev* dev;
void* priv;
int fd_flags;
} alt_fd;

ここでは、

  • devは使用中のデバイスのデバイス構造体へのポインタです。
  • fd_flagsは、open()に渡されるflagsの値です。
  • privは、ドライバーによって定義される予約済みの実装依存の引数です。 ドライバーがファイルまたはストリームごとに特別な非 HAL 定義値を維持する必要がある場合、それらをデータ構造に格納し、privを使用して構造へのポインターを維持できます。 HAL はprivを無視します。

    open() 関数でデータ構造用のストレージを割り当てます (alt_dev構造体によって指定されます)。 close()関数でストレージを解放します。

注: メモリーリークを回避するには、ファイルまたはストリームが必要なくなったときに close()関数を呼び出すようにしてください。