Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: jomoza en 19 Diciembre 2014, 00:02 am



Título: Problemas pasando por referencia un char...
Publicado por: jomoza en 19 Diciembre 2014, 00:02 am
Código:
#include <stdlib.h>
#include <stdio.h>
#include <err.h>
#include <pthread.h>

#define NUM_THREADS 10


typedef struct
{
char* tcomanda;
int tcores;
int tmemory;
int tnumero;

}sthread;


void Inicializar(char file,sthread t[])
{

printf("%c\n", file);
//FILE *File = fopen(file, "r"); //Abrir archivo que se le pasa por referencia

int tata=sizeof(file);
printf("%d\n", tata);


char *line;
size_t len;
int i=-1;//Le damos valor -1 para que la primera linea de COMANDO sea en i=0
int numcomands;

char comanda; //Variables en las que se guardaran el resultado de leer el archivo
int coreses;
int rmdmen;

if(File == NULL)
{
err(1, "commands.txt");
}//File Error Control

while( i <= NUM_THREADS &&  getline(&line,&len,file) != -1)
{
if (i<0)
{
sscanf(line, "%d", &numcomands); //Tenemos en cuenta que la primera linea es el 10
++i;
}else{
sscanf(line, "%[^'·']·%02d·%d", comanda, &coreses, &rmdmen); //Sacamos de la linea obtenida la informacion
t[i].tcomanda=comanda;//Y la guardamos en la estructura
t[i].tcores=coreses;
t[i].tmemory=comanda;
++i;

printf("%s\n", );
}
}
}


// argv[0]~= ./Prac3 ||argv[1]~= commands.txt ||argv[2]~= nCores || argv[3]~= nMemoria
int main(int argc, char *argv[])
{
if(argc!=4){ //Un control de error para los argumentos pasados por la consola

printf("ERROR_ENTER:\n./file.c Filename nCores RAM\n");
return 0;
}

sthread t[NUM_THREADS]; //array de NUM_THREADS elementos de tipo structhreads
//pthread_attr_t attr;
//pthread_attr_init(&attr);
//pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); //incluye la creación del proceso como DEPENDIENTE (JOINABLE)
int i;

int T_cores = atoi(argv[2]);
int T_memory = atoi(argv[3]);
char *file = argv[1];

printf("\n ##############-!MAIN!-##############");
printf("\n RECURSO_CORE:%d\n", T_cores);
printf("\n RECURSO_MEMORIA:%d\n", T_memory);
printf("\n ARCHIVO_COMANDOS:%s\n", T_file);
printf("\n ##############-!MAIN!-##############\n");
//CONDICION MUTEX DE ESPERA
Inicializar(file,t[NUM_THREADS]); // el nombre de un array es un puntero a la primera posición de memoria de un array
//CONDICION SIGNAL

int tata=sizeof(T_file);
printf("%d\n", tata);
return 0;
}//FREE TPB!!

Buenas People!!

Os comento, es el principio de un ejercicio de threads donde hayq ue pasarle el nombre de un archivo para lohabra lo lea sace unos comandos en bash que hay dentro y los ejecute....

El FILE se le pasa por el argv[1] el que lo pasamos a una variable char y lo enviamos a la funcion inicializa(...)

Pero no funciona, de hecho con el printf() en la funcion por consola salen caracteres raros (conclusion.. no lee el char)

¿QUE OPINAN?
Paz.


Título: Re: Problemas pasando por referencia un char...
Publicado por: ivancea96 en 20 Diciembre 2014, 22:47 pm
Será char*, no char, en el argumento 'file' de Inicializar.