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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


  Mostrar Mensajes
Páginas: [1] 2
1  Programación / Programación C/C++ / Lectura y escritura de ficheros con semáforos en: 18 Noviembre 2018, 22:57 pm
Hola,

Tengo que hacer un ejercicio para poner en práctica procesos y semáforos en el que hay que hacer lo siguiente:
- un thread se encargará de leer el contenido de un fichero con funciones de lectura por bloques (binario) y tanto el nombre del fichero como el bloque como parámetros.
- el segundo, recibirá los datos del primer thread y lo enviará a un fichero de salida, que también hay que añadirlo como parámetro de la función que gestiona el thread.
- Es posible que haya que leer y escribir varias veces en los ficheros (debido al bloque de medida marcada como parámetro).


Cómo leer y escribir fichero binarios, pero utilizar threads y semáforos... y como estructurar el programa, aun menos...


Tengo que hacer lo mismo pero solo utilizando threads y por lo que he leído también MUTEX.

¿alguna ayuda?

Gracias!!
2  Programación / Programación C/C++ / Re: referencia a 'pthread_create' sin definir en: 18 Noviembre 2018, 22:32 pm
cierto!! con -pthread funciona

gracias
3  Programación / Programación C/C++ / referencia a 'pthread_create' sin definir en: 18 Noviembre 2018, 20:33 pm
Hola,

Estoy intentando compilar un programa que utiliza threads y obtengo los siguientes errores:
thread2.c:(.text+0x87): referencia a `pthread_create' sin definir
thread2.c:(.text+0xa6): referencia a `pthread_create' sin definir
thread2.c:(.text+0xb7): referencia a `pthread_join' sin definir
thread2.c:(.text+0xc8): referencia a `pthread_join' sin definir
collect2: error: ld returned 1 exit status

Tengo puesta la librería #include <pthread.h> que creo que es la única que se necesita.

He leído otro mensaje del foro que preguntaban lo mismo:
https://foro.elhacker.net/programacion_cc/consulta_referencia_a_pthreadcreate_sin_definir-t389918.0.html

Y como respuesta ponía:
En efecto, tienes que linkar la librería.
Vete a Project->Build options->Linker settings.  En el panel de la izquierda pon pthread.


El problema es que no sé dónde puede estar esta opción, ya que estoy utilizando una máquina virtual (VirtualBox) con Ubuntu 18.04 instalado y únicamente podemos utilizar el editor de textos.

Gracias!!
4  Programación / Programación C/C++ / Ejercicio PIPES en: 15 Octubre 2018, 16:08 pm
Hola,

Tengo que hacer 2 programas que copien el contenido de un fichero a otro utilizando pipes, en el primero solo pipes y en el segundo named pipes.

He estado leyendo sobre pipes y file descriptors, pero ciertamente no sé ni por dónde empezar.

Alguna idea?

Gracias
5  Programación / Programación C/C++ / Re: Problema para continuar un programa con ficheros en: 5 Octubre 2018, 14:04 pm
Hola Mafus

He copiado tal cual tu programa y cuando lo ejecuto sale el menú de opciones, ninguna de las 3 opciones funciona correctamente, viendo el archivo copia.tx:

Opción 1
12345
abcde

Opción 2
54321
edcba

Opción 3
edcba
4321

Así que casi lo hace pero se come una línea (ya que mi fichero de entrada tiene 3 filas) y en todos los casos también se come caracteres, ya que las letras van hasta la J

Saludos
6  Programación / Programación C/C++ / Re: Copiar contenido de un fichero a otro a)invirtiendo líneas b) invirtiendo todo. en: 30 Septiembre 2018, 16:11 pm
He mejorado un poquito más el código para que me invierta las líneas, el problema es que no me lo crea bien, se come el primer carácter y tengo un salto de línea de más

Código:
El principio es igual, solo cambia "copiar"

int copiar(char* f_in,char* f_out)
{
FILE *fp_in,*fp_out;
char c, linea[MAX_CHARS];
int i, j;
 
if(!(fp_in=fopen(f_in,"r")) || !(fp_out=fopen(f_out,"w")))
{   
perror("Error en la apertura de ficheros, input2_2.txt no pudo copiarse");
exit(EXIT_FAILURE);
}
 
while((c=fgetc(fp_in))!=EOF && !ferror(fp_in) && !ferror(fp_out))
{
for (i = 0 ; i < 50; i++)
{
while (fgets(linea, MAX_CHARS, fp_in) != NULL)
{
for (j = 0; linea[j] != '\0' && linea[j] != '\n'; j++)
if (linea[j] == '\n')
linea[j] = '\0';
fprintf(fp_out,"%s", invertir(linea));
            }
          }
}

if(ferror(fp_in) || ferror(fp_out))
return 1;
 
fclose(fp_in);
fclose(fp_out);
return 0;
}
7  Programación / Programación C/C++ / Re: Copiar contenido de un fichero a otro a)invirtiendo líneas b) invirtiendo todo. en: 30 Septiembre 2018, 15:54 pm
He mejorado un poco el código para que me invierta las líneas, el problema es que solo consigo sacarlo por pantalla, cuando lo hago en un fichero, o hago bucles infinitos o no muestra lo que necesito
Además, me gustaría que el for del i fuera desde 0 hasta cualquier número y no hasta 50 (valor que he puesto por poner) ¿es esto posible?

Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_CHARS  4096

int copiar(char* f_in,char* f_out);
char *invertir(char linea[]);

int main()
{
FILE *infile; //para rw un fichero

if(!copiar("input2_2.txt","input2_2.txt.out"))
                printf("input2_2.txt se ha copiado con éxito\n");
else
printf("input2_2.txt no pudo copiarse\n");
  return 0;
}

char *invertir(char linea[])
{
   int i;
   int j;
   int longitud;
   char aux;
  
   longitud = strlen(linea);
   for (i = 0, j = longitud - 1; i < j; i++, j--){
      aux = linea[i];
      linea[i] = linea[j];
      linea[j] = aux;
   }
  
   return linea;
}

int copiar(char* f_in,char* f_out)
{
FILE *fp_in,*fp_out;
char c, linea[MAX_CHARS];
int i, j;
 
if(!(fp_in=fopen(f_in,"rt")) || !(fp_out=fopen(f_out,"wt")))
{  
perror("Error en la apertura de ficheros, input2_2.txt no pudo copiarse");
exit(EXIT_FAILURE);
}
 
while((c=fgetc(fp_in))!=EOF && !ferror(fp_in) && !ferror(fp_out)){//EOF=end of file
for (i = 1 ; i < 50; i++){
          while (fgets(linea, MAX_CHARS, fp_in) != NULL){
               /* Buscamos y descartamos el avance de linea */
               for (j = 0; linea[j] != '\0' && linea[j] != '\n'; j++)
                  ;
               if (linea[j] == '\n')
                  linea[j] = '\0';

               printf("%s\n", invertir(linea));
            }
         }
 }
if(ferror(fp_in) || ferror(fp_out))
return 1;
 
fclose(fp_in);
fclose(fp_out);
return 0;
}
8  Programación / Programación C/C++ / Problema para continuar un programa con ficheros en: 30 Septiembre 2018, 15:23 pm
Hola,

Tengo un ejercicio en el que me piden copiar el contenido de un fichero a otro con 3 opciones:

a) copiar a en b tal cual
b) copiar a en b pero invirtiendo línea a línea, ejemplo:
    fichero a: 12345
                   abcde
    fichero b: 54321
                   edcba
c) copiar a en b pero invirtiendo todo el orden:
    fichero b: edcba
                   54321

¿podría poner un for después del while que fuera al revés (desde el final del fichero al principio) y lo fuera escribiendo?
O habría que hacer una función entre el main y el copiar que sea "invertir"?

Gracias
9  Programación / Programación C/C++ / Re: Copiar contenido del fichero en otro en C (solucionado) en: 29 Septiembre 2018, 19:31 pm
Creo que sí, que es hacer la negación de lo que se está poniendo después, pero por qué no funciona:
(fp_in!=fopen(f_in,"rt"))
en vez de:
!(fp_in=fopen(f_in,"rt"))

Así que sólo me hace falta entender:
 
   while((c=fgetc(fp_in))!=EOF && !ferror(fp_in) && !ferror(fp_out))
      fputc(c,fp_out);

Que sé que es que se siga copiando mientras haya algo que copiar (o eso entiendo yo) pero no entiendo la construcción...
10  Programación / Programación C/C++ / Re: Copiar contenido del fichero en otro en C (solucionado) en: 29 Septiembre 2018, 19:04 pm
Hola,

Tengo que hacer este programa y he copiado el código de 4rkn63l, el problema es que me hace al revés el if/else del main. ¿puede que fuera un error?

De todas formas, tengo algunas dudas sobre el código, ya sé que esto es de hace tiempo... pero espero que lo veáis y podáis contestarme:

1. ¿qué significa "!copy_file"? quiero decir la admiración. Es como si fuera una negación y por eso lo está haciendo al revés...

2.- No entiendo nada de la función int copy_file(....) podéis explicarmelo paso a paso, por favor?

Saludos
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines