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 Application Stack / User Interface Bash / Shell Scripts Commands and Packages Compilation Content Management System - CMS Core Kernel C Programs Development & Build Development Environment Setup Errors & Failures Flutter git Go Language Programs Hardware Platforms HTML JAVA Programs Kernel & Device Drivers Linux, OS Concepts and Networking Linux Device Drivers Linux Host, Ubuntu, SysAdmin Linux Kernel Linux Networking Middleware Libraries, HAL Monetization / Google AdSense Multimedia - Audio, Video, Images NDK / Middleware / HAL OS Concepts PHP Programming Languages RaspberryPi Scripting and Automation Search Engine Optimisation ( SEO ) Social Media Socurce Code Management ( SCM ) System Administration, Security Testing and Debugging Uncategorized User Interface Web design and development Wordpress Yocto / Bitbake / Openembedded

Leave a Reply / Ask Question