вот мой вопрос. Я пытаюсь сделать простую программу общей памяти. В основном дело в том, что в одной части кода (Program1) необходимо открыть файл, считывающий данные (если есть, потому что есть первый случай открытия файла), стереть данные и записать новый вектор в ему, в другой части (Программа 2) необходимо прочитать данные, стереть данные и записать новые данные.Прочитать данные из памяти mmap
Теперь сначала я сделал этот пример. (Программа 1)
int i, result;
int archivo,creaarchivo;
char array[10];
srand(time(NULL));
//caddr_t mcompartida;
void *mcompartida;
//archivo=open(RUTA,O_CREAT|O_EXCL|O_RDWR,(mode_t)0777);
archivo=open(RUTA,O_RDWR,(mode_t)0777);
if (archivo<0)
{
return (*env)->NewStringUTF(env, "Error al leer ");
exit(EXIT_FAILURE);
}
result = lseek(archivo, SIZE-1, SEEK_SET);
if (result == -1)
{
close(archivo);
return (*env)->NewStringUTF(env, "Error al invocar lseek() memoria");
exit(EXIT_FAILURE);
}
result = write(archivo, "",1);
if (result != 1)
{
close(archivo);
return (*env)->NewStringUTF(env, "Error escribiendo los bytes en memoria");
exit(EXIT_FAILURE);
}
//mcompartida = mmap((caddr_t)0, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, archivo, 0);
mcompartida = mmap(0, SIZE, PROT_WRITE, MAP_SHARED, archivo, 0);
if (mcompartida == (caddr_t)-1)
{
close(archivo);
return (*env)->NewStringUTF(env, "Error mapeando el archivo");
exit(EXIT_FAILURE);
}
close(archivo);
// Se escribe en la memoria compartida
for(i=0; i<10; i++)
{
sprintf(array,"%d ",i);
strcat((char *)mcompartida,array);
}
// Se libera la memoria compartida con munmap
munmap (mcompartida, SIZE);
if (munmap(mcompartida, SIZE) == -1)
{
return (*env)->NewStringUTF(env, "Error liberando la memoria compartida");
}
return (*env)->NewStringUTF(env, "Memoria Compartida Creada =D!");
В первом примере я пытаюсь написать десять чисел как вектор, но я сделал это с strcat которым только объединяющим данных. (На данный момент я не стирать данные и считывания данных только запись)
Второй программы (Программа 2)
int i, result;
int archivo,creaarchivo;
char array_rx[10];
srand(time(NULL));
void *mcompartida;
archivo=open(RUTA,O_RDWR,(mode_t)0777);
if (archivo<0)
{
return (*env)->NewStringUTF(env, "Error al leer ");
exit(EXIT_FAILURE);
}
mcompartida = mmap(0, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, archivo, 0);
if (mcompartida == -1)
{
close(archivo);
return (*env)->NewStringUTF(env, "Error mapeando el archivo");
exit(EXIT_FAILURE);
}
close(archivo);
// Se lee de memoria compartida
for(i=0; i<10; i++)
{
strcat((char *)array_rx,mcompartida);
sscanf(array_rx,"%d",i);
}
// Se libera la memoria compartida con munmap
munmap (mcompartida, SIZE);
if (munmap(mcompartida, SIZE) == -1)
{
return (*env)->NewStringUTF(env, "Error liberando la memoria compartida");
}
return (*env)->NewStringUTF(env, "Memoria Compartida Leida =D");
Я пытаюсь читать данные, которые программируют 1 написали, но я не могу, любая помощь? Сначала я попытался сделать sscanf, но это не сработало, поэтому я подумал, что могу использовать strcat для копирования данных из разделяемой памяти в массив array_rx, но он не работал.
это в C, и я возвращаю сообщение с помощью JNI в Android-разработчике.