PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Wednesday, November 2, 2022

[FIXED] Why filestream.close not available

 November 02, 2022     fclose, file, filestream, fopen, vala     No comments   

Issue

I see following code example on this Vala documentation page:

public static int main (string[] args) {
    // Opens "foo.txt" for reading ("r")
    FileStream stream = FileStream.open ("foo.txt", "r");
    assert (stream != null);

    // buffered:
    char buf[100];
    while (stream.gets (buf) != null) {
        print ((string) buf);
    }

    return 0;
}

However, I cannot find a close() function. I want to open file once for reading and later again for writing. Is it safe to do so without a close in between?

(I do not want to use a+ etc mode which permit both reading and writing as both may not be needed while running the application.)


Solution

There are two key items at play:

  1. The FileStream class is a binding to standard C library functions (e.g. open for fopen, read for fread, etc.). (See: this Stack Overflow answer for a good overview of various file APIs)
  2. Vala does automatic reference counting and will free objects for you (See: Vala's Memory Management Explained).

Now if we look at the definition for the FileStream Vala binding, we see:

[ CCode ( cname = "FILE" , free_function = "fclose" ) ]
public class FileStream

Notice the free_function = "fclose" part. This means that when it comes time for Vala to free a FileStream object, it will implicitly call fclose. So no need to attempt this manually. (Also see: Writing VAPI files under the Defining Classes section for details on free_function)

What this means for you is that once your stream object goes out of scope, reference count hits 0, etc. it will get cleaned up for you as you would expect with any other object. You can safely open the file for reading again later by using FileStream.open and getting a new FileStream object.



Answered By - avojak
Answer Checked By - Dawn Plyler (PHPFixing Volunteer)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing