C code for safe read and write from a file

Below functions make sure we are safely and completely reading and writing from a file pointer fd, opened on a specific file.


int safe_read( int fd, void *buf, size_t len )
{
        int n;
        size_t sum = 0;
        char  *off = (char *) buf;

        while( sum < len )
        {
                if( ! ( n = read( fd, (void *) off, len - sum ) ) )
                {
                        return( 0 );
                }
                if( n < 0 && errno == EINTR ) continue;
                if( n < 0 ) return( n );

                sum += n;
                off += n;
        }
        return( sum );
}


int safe_write( int fd, void *buf, size_t len )
{
        int n; 
        size_t sum = 0;
        char  *off = (char *) buf;

        while( sum < len )
        {
                if( ( n = write( fd, (void *) off, len - sum ) ) < 0 )
                {
                        if( errno == EINTR ) continue;
                        return( n );
                }

                sum += n;
                off += n;
        }

        return( sum );
}

Android Android Commands Android Java Applications Application Libraries Bash / Shell Scripts Bluetooth driver Build Frameworks Commands and Packages Core Kernel C Programs Development Environment Setup Documents / Books Errors & Failures File Systems Framebuffer / Display Driver git Go Language Programs Hardware Platforms Home Kernel & Device Drivers Kernel Booting and Porting Linux, OS Concepts and Networking Linux Device Drivers Linux Host, Ubuntu, SysAdmin Linux Kernel Linux Networking Middleware Libraries, HAL NDK / Middleware / HAL Network Driver OS Concepts PHP Procfs Filesystem Programming Languages RaspberryPi Scripting and Automation Search Engine Optimisation ( SEO ) Social Media Socurce Code Management ( SCM ) System Administration, Security Testing and Debugging Uncategorized Userspace Utilities Web design and development Wordpress Yocto / Bitbake / Openembedded

Leave a Reply