5

FILE*使用するタイプが欲しいのですがfprintf。を返す代わりにfdopenを取得するために使用する必要があります。しかし、とで同じことができますか?(私は使用したことがありません)FILE*openintfdopenopenfdopen

私は同じことをしたいですfdopen

open("my_file", 0_CREAT | O_RDWR | O_TRUNC, 0644);
4

3 に答える 3

9

fdopen以前にによって返される可能性のあるファイル記述子を取得するopenため、問題はありません。

ファイルopenが記述子を取得し、次にfdopenその記述子を取得します。

fdopenreadおよびwrite操作をサポートするあらゆる種類の記述子を使用して、ユーザースペースでバッファリングされたストリームを作成するだけです。

于 2013-02-27T11:16:31.277 に答える
8

fdopen()ファイル記述子を使用してポインタをファイルします。

このfdopen()関数は、ストリームをファイル記述子に関連付けます。ファイル記述子は、、、、、またはから取得さopen()れます。これらはファイルを開きますがdup()、構造ストリームへのポインタを返しません。ストリームは、ほとんどすべてのstdioライブラリルーチンに必要な入力です。creat()pipe()FILE

FILE* fp = fdopen(fd, "w");

このサンプルコードは、使用したいときにさらに役立つ場合がありますfprintf()

int main(){
 int fd;
 FILE *fp;
 fd = open("my_file",O_WRONLY | O_CREAT | O_TRUNC);
  if(fd<0){
    printf("open call fail");
    return -1;
 }
 fp=fdopen(fd,"w");
 fprintf(fp,"we got file pointer fp bu using File descriptor fd");
 fclose(fp);
 return 0;
}

知らせ:

于 2013-02-27T11:15:33.683 に答える
1

以前にファイルのファイル記述子を取得していない場合は、を使用してくださいfopen

FILE* file = fopen("pathtoyourfile", "w+");

fopenシステムコール(オープン)ではなく、stand-library-callsを使用していると考えてください。したがって、それほど多くのオプションはありません(access-control-valuesの指定など)。

マニュアルページを参照してください。

于 2013-02-27T11:18:48.263 に答える