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

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

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

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

JNI

JNI(Java Native Interface)は、Javaプラットフォームにおいて、Javaで記述されたプログラムと、他の言語で書かれたネイティブコードを連携するためのインタフェース仕様である

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

Q&A

解決済

2回答

1715閲覧

FILE構造体を使ってファイルが読み込めない

yukkuri

総合スコア624

C

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

JNI

JNI(Java Native Interface)は、Javaプラットフォームにおいて、Javaで記述されたプログラムと、他の言語で書かれたネイティブコードを連携するためのインタフェース仕様である

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

0グッド

0クリップ

投稿2019/01/24 10:17

前提・実現したいこと

現在、C言語でFILE構造体を用いてバイナリでファイルを読み込む、というのを行っていました。

発生している問題・エラーメッセージ

freadの戻り値が 0 になる

該当のソースコード

C

1#include <stdio.h> 2 3#include "jni.h" 4 5#include "JylBinaryFile.h" 6 7// ファイルを示す構造体を用意 8FILE* fp; 9 10JNIEXPORT void JNICALL Java_org_jyl_base_io_JylBinaryFile_nopen( JNIEnv *env, jobject obj, jstring path ) 11{ 12 // 文字列を用意 13 const char* fpath = (*env)->GetStringUTFChars( env, path, 0 ); 14 15 // ファイルを開く 16 fp = fopen( fpath, "rb" ); 17 18 if( NULL == fp ){ 19 // IOException のクラスを取得 20 jclass thcls = (*env)->FindClass( env, "java/io/IOException" ); 21 // 例外をスロー 22 (*env)->ThrowNew( env, thcls, "" ); 23 } 24 25 // 文字列を開放 26 (*env)->ReleaseStringUTFChars( env, path, fpath ); 27} 28 29JNIEXPORT jbyte JNICALL Java_org_jyl_base_io_JylBinaryFile_nread__( JNIEnv *env, jobject obj ) 30{ 31 // 読み込み後データを入れるバイト 32 char readdata; 33 34 // バイトを読み込めなかった場合 35 if( fread( (void*)&readdata, sizeof( char ), 1, fp ) < 1 ){ 36 // エラー発生なのでファイルを閉じる 37 fclose( fp ); 38 // IOException のクラスを取得 39 jclass thcls = (*env)->FindClass( env, "java/io/IOException" ); 40 // 例外をスロー 41 (*env)->ThrowNew( env, thcls, "" ); 42 } 43 44// fread( &readdata, sizeof( char ), 1, fp ); 45 46 jbyte jdata = readdata; 47 48 return jdata; 49} 50
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class org_jyl_base_io_JylBinaryFile */ #ifndef _Included_org_jyl_base_io_JylBinaryFile #define _Included_org_jyl_base_io_JylBinaryFile #ifdef __cplusplus extern "C" { #endif /* * Class: org_jyl_base_io_JylBinaryFile * Method: nopen * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_org_jyl_base_io_JylBinaryFile_nopen (JNIEnv *, jobject, jstring); /* * Class: org_jyl_base_io_JylBinaryFile * Method: nread * Signature: ()B */ JNIEXPORT jbyte JNICALL Java_org_jyl_base_io_JylBinaryFile_nread__ (JNIEnv *, jobject); /* * Class: org_jyl_base_io_JylBinaryFile * Method: nread * Signature: (II)B */ JNIEXPORT jbyte JNICALL Java_org_jyl_base_io_JylBinaryFile_nread__II (JNIEnv *, jobject, jint, jint); #ifdef __cplusplus } #endif #endif

試したこと

ファイルが開けていることをnopen実行時例外が出なかったことにより確認

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

linux( Raspberry pi )を使用しています。
gcc のバージョンは 6.3.0 です。

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

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

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

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

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

guest

回答2

0

freadは読み込んだ要素数を返しますので、0が返るのはエラーではありません。
通常は、ファイルの終わりを意味します。

投稿2019/01/24 12:04

otn

総合スコア84423

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

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

yukkuri

2019/01/24 12:10

すみません、解決しました。私のミスだったようです。
guest

0

自己解決

なぜか、読み込んだ画像ファイルが0バイトになっていました。それが原因なようです。
ご迷惑をおかけしました。

投稿2019/01/24 12:09

yukkuri

総合スコア624

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問