lseek() in C/C++ to read the alternate nth byte and write it in another file

From a given file (e.g. input.txt) read the alternate nth byte and write it on another file with the help of “lseek”.
lseek (C System Call): lseek is a system call that is used to change the location of the read/write pointer of a file descriptor. The location can be set either in absolute or relative terms.
Function Definition

off_t lseek(int fildes, off_t offset, int whence);

Field Description
int fildes : The file descriptor of the pointer that is going to be moved
off_t offset : The offset of the pointer (measured in bytes).
int whence : The method in which the offset is to be interpreted
(rela, absolute, etc.). Legal value r this variable are provided at the end.
return value : Returns the offset of the pointer (in bytes) from the
beginning of the file. If the return value is -1,
then there was an error moving the pointer.

For example, say our Input file is as follows:
Screenshot from 2017-03-29 22-24-46

// C program to read nth byte of a file and
// copy it to another file using lseek
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
void func(char arr[], int n)
    // Open the file for READ only.
    int f_write = open("start.txt", O_RDONLY);
    // Open the file for WRITE and READ only.
    int f_read = open("end.txt", O_WRONLY);
    int count = 0;
    while (read(f_write, arr, 1))
        // to write the 1st byte of the input file in
        // the output file
        if (count < n)
            // SEEK_CUR specifies that
            // the offset provided is relative to the
            // current file position
            lseek (f_write, n, SEEK_CUR);
            write (f_read, arr, 1);
            count = n;
        // After the nth byte (now taking the alternate
        // nth byte)
            count = (2*n);
            lseek(f_write, count, SEEK_CUR);
            write(f_read, arr, 1);
// Driver code
int main()
    char arr[100];
    int n;
    n = 5;
    // Calling for the function
    func(arr, n);
    return 0;

Output file (end.txt)
Screenshot from 2017-03-29 22-24-35

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

This article is attributed to GeeksforGeeks.org

leave a comment



load comments

Subscribe to Our Newsletter