nc_get_att_ type の一族の関数は、変数IDと名前を与えるとNetCDF属性の値を 返す。
int nc_get_att_text (int ncid, int varid, const char *name,
int nc_get_att_uchar (int ncid, int varid, const char *name,
int nc_get_att_schar (int ncid, int varid, const char *name,
int nc_get_att_short (int ncid, int varid, const char *name,
int nc_get_att_int (int ncid, int varid, const char *name,
int nc_get_att_long (int ncid, int varid, const char *name,
int nc_get_att_float (int ncid, int varid, const char *name,
int nc_get_att_double (int ncid, int varid, const char *name,
エラーが発生していなければ、 nc_get_att_ type は NC_NOERR の値を返します。 それ以外の場合には、返された状態がエラーを示します。エラーの原因として次のようなものが考えられます。
この例では nc_get_att_double を使って、既存の foo.nc というNetCDFファイルにおいて 、 rh という名前のNetCDF変数の属性 valid_range の属性値と、 title という名前のグローバル属性の値を調べます。この例では、幾つの値が返されるかは不明だが、属性の型は既知であることを前提としています。従って、返された値を格納するスペースを十分に取るために、ます始めに属性の長さについて問い合わせます。.
#include <netcdf.h>
...
int status; /* エラーステータス */
int ncid; /* NetCDF ID */
int rh_id; /* 変数 ID */
int vr_len, t_len; /* 属性長 */
double *vr_val; /* 属性値へptr */
char *title; /* 属性値へptr */
extern char *malloc(); /* メモリ配置 */
...
status = nc_open("foo.nc", NC_NOWRITE, &ncid);
if (status != NC_NOERR) handle_error(status);
...
status = nc_inq_varid (ncid, "rh", &rh_id);
if (status != NC_NOERR) handle_error(status);
...
/* 属性値に必要なスペース調べる */
status = nc_inq_attlen (ncid, rh_id, "valid_range", &vr_len);
if (status != NC_NOERR) handle_error(status);
status = nc_inq_attlen (ncid, NC_GLOBAL, "title", &t_len);
if (status != NC_NOERR) handle_error(status);
/* 値を取得する前に必要なスペースを配置 */
vr_val = (double *) malloc(vr_len * sizeof(double));
title = (char *) malloc(t_len + 1); /* + 1 trailing null用 */
/* 属性値を取得 */
status = nc_get_att_double(ncid, rh_id, "valid_range", vr_val);
if (status != NC_NOERR) handle_error(status);
status = nc_get_att_text(ncid, NC_GLOBAL, "title", title);
if (status != NC_NOERR) handle_error(status);
title[t_len] = '\0'; /* null terminate */
...