lseek() en C/C++ para leer el enésimo byte alternativo y escribirlo en otro archivo

Desde un archivo dado (por ejemplo, input.txt), lea el enésimo byte alternativo y escríbalo en otro archivo con la ayuda de «lseek».
lseek (llamada al sistema C) : lseek es una llamada al sistema que se utiliza para cambiar la ubicación del puntero de lectura/escritura de un descriptor de archivo. La ubicación se puede establecer en términos absolutos o relativos.
Definición de función

off_t lseek(int fildes, off_t offset, int de dónde);

Campo Descripción
int fildes: el descriptor de archivo del puntero que se va a mover
fuera_t offset: el desplazamiento del puntero (medido en bytes).
int wherece : el método en el que se interpretará el desplazamiento
(rela, absoluto, etc.). Valor legal r esta variable se proporcionan al final.
valor de retorno: Devuelve el desplazamiento del puntero (en bytes) desde el
principio del archivo. Si el valor devuelto es -1,
entonces hubo un error al mover el puntero.

Por ejemplo, digamos que nuestro archivo de entrada es el siguiente:
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)
        else
        {
            count = (2*n);
            lseek(f_write, count, SEEK_CUR);
            write(f_read, arr, 1);
        }
    }
    close(f_write);
    close(f_read);
}
  
// Driver code
int main()
{
    char arr[100];
    int n;
    n = 5;
  
    // Calling for the function
    func(arr, n);
    return 0;
}

Archivo de salida (end.txt)
Screenshot from 2017-03-29 22-24-35

Este artículo es una contribución de Kishlay Verma . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *