elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / Como utilizar Struct stat en: 6 Mayo 2018, 12:19 pm
Hola tengo este programa y quiero que cuando acabe devuelva información sobre el archivo, y para ello he usado struct stat pero me da error segmentación fault: 11.
Alguien podría decirme como solucionarlo?

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

#define BUFFER_TAMAINA 512

int main(int argc, const char * argv[])
{
   int a;
   int f,k;
   char buff[BUFFER_TAMAINA];
   FILE *f1;

   struct stat *stat1;

   if (argc==3)
    {

       if (strcmp(argv[2],"0")!=0 && atoi(argv[2])==0)
       {
         write(1, "Arazoa, posizioa ez da zenbaki bat\n", 36);
         exit(1);
      }

      f1=fopen(argv[1], "r+");

      if(errno==ENOENT)
      {
         write(1, "Fitxategia ez da exititzen\n", 28);
         exit(1);
      }
      while(fgetc(f1)!=EOF){k++;}
      fclose(f1);

      if((atoi(argv[2]))>k)
      {
         write(1,"Posizio altuegia ezarri da\n",28);
         exit(1);
      }
   
      if(atoi(argv[2])<0){
         write(1, "Arazoa, posizioa negatiboa da\n", 31);
         exit(1);
      }


      f = open(argv[1], O_WRONLY,00777);

      if(errno==ENOENT){
         write(1, "Fitxategia ez da exititzen\n", 28);
         exit(1);
      }

      lseek(f, atoi(argv[2]), SEEK_SET);

      while ((a=read(0,buff,BUFFER_TAMAINA))>0)
      {   
         if(stat(argv[1],&*stat1) != NULL)
         { 
            write(f,buff,a);
            printf("Información:\n",argv[1]);
                                printf("---------------------------\n");
                                printf("Tamaño: \t \t %d bytes\n", stat1->st_size);
                                printf("Links: \t%d\n", stat1->st_nlink);
                                printf("inode: \t \t %d\n", stat1->st_ino);
                        
                    }
      
      }

      close(f);
   }
    else
    {
           write(1,"Erabilera: ./idatzi_fitx [fitxategia] [posizioa]\n",50);
    }
}
2  Programación / Programación C/C++ / Forma canonica en: 23 Abril 2018, 21:40 pm
Buenas, estoy haciendo un programa que dandole una posición y un fichero, escribe lo que pongas en la terminal y lo escribe en la posición introducida.

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

#define BUFFER_TAMAINA 512

main(int argc, const char * argv[])
{
   int a;
   int f,k;
   char buff[BUFFER_TAMAINA];
   FILE *f1;

   if (argc==3)
    {
       if (strcmp(argv[2],"0")!=0 && atoi(argv[2])==0)
       {
         write(1, "error, la posicion no es un numero\n", 36);
         exit(1);
      }

      f1=fopen(argv[1], "r+");

      if(errno==ENOENT)
      {
         write(1, "el fichero no existe\n", 28);
         exit(1);
      }
      while(fgetc(f1)!=EOF){k++;}
      fclose(f1);

      if((atoi(argv[2]))>k)
      {
         write(1,"la position es demasiado alta\n",28);
         exit(1);
      }
   
      if(atoi(argv[2])<0){
         write(1, "la position es negativa\n", 31);
         exit(1);
      }

      f = open(argv[1], O_WRONLY,00777);

      if(errno==ENOENT){
         write(1, "el fichero no existe\n", 28);
         exit(1);
      }

      lseek(f, atoi(argv[2]), SEEK_SET);

      while ((a=read(0,buff,BUFFER_TAMAINA))>0)
      {   
         write(f,buff,a);
      
      }

      close(f);
   }
    else
    {
           write(1,"Erabilera: ./idatzi_fitx [fichero] [posicion]\n",50);
    }
}

El problema es que en la terminal hay que darle al enter para que lo escriba, es decir esta hecho de manera canónica, y coge tambien el intro como todo lo que queremos escribir. Como podría hacer para que no tuviera en cuenta el enter?

Y como podría hacerlo de forma no canónica? Es decir, que todo lo que vaya escribiendo en la terminal se vaya escribiendo sin necesidad de darle al enter.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines