Sei sulla pagina 1di 11

SISTEMAS OPERATIVOS

Fernando Durán

Tema: Programas

Programa para copiar archivos

#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h>

#define TAMANYO_ALM 1024 !

main (int argc,char* argv[])

28 Jun 2010

{

 

int ! fd_ent, fd_sal; ! !

 

char ! almacen[TAMANYO_ALM];!

int ! n_read; !

/* Abrir el archivo de entrada */

fd_ent = open (argv[1], O_RDONLY);

if (fd_ent < 0)

{

perror ("Error al abrir"); !

exit (-1);

}

/* Crear el archivo de salida. Modo de protección: rw-r--r--*/

fd_sal = creat (argv[2], 0644);

if (fd_sal < 0)

{

perror ("Error al crear");

exit (-1);

}

/* Se lee y escribe */

while ((n_read = read (fd_ent, almacen, TAMANYO_ALM)) >0 )

{

/* Se escribe el almacen al archivo de salida */

if (write (fd_sal, almacen, n_read) < n_read)

! ! { !! ! !! ! !! ! !! ! perror ("Error de escritura");
!
!
{
!!
!
!!
!
!!
!
!!
!
perror ("Error de escritura");
close (fd_ent);
close (fd_sal);
exit (-1);
! !
}

! }

if (n_read < 0)

!

 

{

perror ("Error de lectura");

close (fd_ent);

close (fd_sal);

exit (-1);

}

/* Se cierran los archivos */

close (fd_ent);

close (fd_sal);

exit (0);

}

exit (- 1 ); } /* Se cierran los archivos */ close (fd_ent); close (fd_sal); exit

Este es el archivo original:

Este es el archivo original:

Este es el archivo resultante de la copia.

Este es el archivo resultante de la copia.

Programa para mostrar las ultimas lineas

#include<stdio.h> #include<errno.h> #include<fcntl.h> #include <stdlib.h> #include <string.h>

main(int argc,char* argv[])

{

 

char buffer[1024];

int lineas=0,i,movimiento=0,lineasTotales=1,lineasParaMostrar=0;

int bytesl;

//Se abre el archivo

int archivoa=open(argv[1],O_RDONLY);

if(archivoa==-1)

! {

! !

perror("Error al abrir archivo");

exit(1);

}

//Se lee el archivo

while(bytesl=read(archivoa,buffer,1024))

! {

! for(i=0;i<=1024;i++)

!

! ! { !! ! if(buffer[i]=='\n') !! ! { !! ! ! lineasTotales++; !! !
! !
{
!!
!
if(buffer[i]=='\n')
!!
!
{
!!
!
!
lineasTotales++;
!!
!
}
! !
}

! if(bytesl==-1)

!

! ! { !! ! break; ! ! } ! } ! lineasTotales=lineasTotales-1; ! close(archivoa);
!
!
{
!!
!
break;
!
!
}
!
}
!
lineasTotales=lineasTotales-1;
!
close(archivoa);
!
!
//Se muestra la cantidad de lineas y se pide cuantas se quiere
mostrar
!
printf("Lineas totales: %d\n",lineasTotales);
!
!
printf("Cuantas lineas ");
!
scanf("%d",&lineasParaMostrar);
!
!
archivoa=open(argv[1],O_RDONLY);
!
!
if(lineasParaMostrar>=lineasTotales)
!
{
!
!
lineasParaMostrar=0;
!
}
! ! else ! { ! ! //Se lee otra vez hasta saber hasta que
!
!
else
!
{
! !
//Se lee otra vez hasta saber hasta que posicion se debe
desplazar
! !
while(bytesl=read(archivoa,buffer,1024))
!
!
{
!!
!
for(i=0;i<=1024;i++)
!!
!
{
!!
!
!
if(buffer[i]!='\n')
!!
!
!
{
!!
!
!
!
movimiento++;
!!
!
!
}
!!
!
!
!!
!
!
else
!!
!
!
{
!!
!
!
!
movimiento++;
!!
!
!
!
lineas++;
!!
!
!
!!
!
!
}
/*Se acaba la lectura cunado ya se sabe
!
!
!
!
!!
!
!
!!
!
!
cuanto se debe desplazar en el archivo*/
if(lineas==lineasTotales-lineasParaMostrar)
{
!!
!
!
!
break;
!!
!
!
}
!!
!
}
!!
!
if(bytesl==-1)
!!
!
{
!!
!
!
break;
!!
!
}
! !
}
! !
! close(archivoa);
!
! }
!

! archivoa=open(argv[1],O_RDONLY);

! /*Se desplaza en el archivo para mostar solo la ultimas lineas deseadas*/

! lseek(archivoa,movimiento,SEEK_SET);

! ! while(bytesl=read(archivoa,buffer,1024)) ! { ! ! if(bytesl==-1) ! ! { !! ! break; !
!
! while(bytesl=read(archivoa,buffer,1024))
! {
! !
if(bytesl==-1)
!
!
{
!!
!
break;
!
!
}
!
!
!
!
write(0,buffer,bytesl);
!
}
!
printf("\n");
!
close(archivoa);
!
}

Este es el archivo sobre el que se va a ejecutar el programa

Este es el archivo sobre el que se va a ejecutar el programa
Este es el archivo sobre el que se va a ejecutar el programa

Programa que coloca cadenas al inicio, en la mitad y al final de un archivo.

#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h>

#define TAMANYO_ALM 2048 !

main (int argc,char* argv[])

{

 

int fd_ent,sz,mitad,n_read,i;

const char* cadena="cadena1";

const char* cadena2="cadena2";

char ! almacen[TAMANYO_ALM];

char ! almacen2[TAMANYO_ALM];

//Se abre el archivo deseado

fd_ent = open (argv[1], O_RDWR);

if(fd_ent==-1)

{

perror("Error al leer el archivo");

exit(1);

}

/*Se desplaza hasta al final para conocer el tamaño del archivo*/

lseek(fd_ent, 0L, SEEK_END);

sz = lseek(fd_ent, 0L, SEEK_CUR);

printf("\nsize:%d\n",sz);

mitad=sz/2+1;

/* Coloca el puntero en la posición 0 */

lseek(fd_ent,0,SEEK_SET);

//se va a mover los datos del rango[inicio, mitad]

n_read = read (fd_ent, almacen, mitad);

//Se guarda lo datos que estan desde la mitad hasta el final

n_read = read (fd_ent, almacen2, mitad);

//Se escribe la cadena al inicio y luego el contenido de la primera mitad

 

lseek(fd_ent,0L,SEEK_SET);

 

write(fd_ent, cadena, strlen(cadena));

write(fd_ent, almacen, mitad);

//Se escribe la cadena2 en la mitad y luego el contenido de la segunda mitad

 

write(fd_ent, cadena2, strlen(cadena2));

write(fd_ent, almacen, mitad);

 

//Se escribe las cadenas 1 y 2 al final del archivo

lseek(fd_ent,0L,SEEK_END);

write(fd_ent, cadena, strlen(cadena));

write(fd_ent, cadena2, strlen(cadena2));

close(fd_ent);

}

write(fd_ent, cadena, strlen(cadena)); write(fd_ent, cadena2, strlen(cadena2)); close(fd_ent); }
Bibliografía: - Sistemas Operativos Una visión Aplicada Autores: Jesús Carretero, Pedro De Miguel Anasagasti, Félix
Bibliografía: - Sistemas Operativos Una visión Aplicada Autores: Jesús Carretero, Pedro De Miguel Anasagasti, Félix

Bibliografía:

-Sistemas Operativos Una visión Aplicada Autores: Jesús Carretero, Pedro De Miguel Anasagasti, Félix García, Fernando Pérez.

- POSIX programmer's guide: writing portable UNIX programs with the POSIX Autor:

Donal Lewine