[英]Read data from memory mmap
這是我的問題。 我正在嘗試制作一個簡單的共享內存程序。 基本上是這樣的,就是在一部分代碼(Program1)需要打開文件的情況下讀取數據(如果有的話是因為第一次打開文件就必須刪除),然后擦除數據並向其中寫入新的向量它,另一部分(程序2)需要讀取數據以擦除數據並寫入新數據。
現在首先我做這個例子。 (程序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語言編寫的,我將在Android Developers工具中使用JNI返回一條消息。
sscanf()
用法不正確。
const char *p = mcompartida;
for(i=0; i<10; i++) {
//strcat((char *)array_rx,mcompartida);
//sscanf(array_rx,"%d",i);
int offset; // Offset where scanning stopped.
if (1 != sscanf(p, "%d%n", &array_rx[i], &offset)) {
break; // handle format error
}
p += offset;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.