【发布时间】:2019-01-17 08:42:21
【问题描述】:
我的程序使用 fork 启动子进程以询问父进程有关 UNIX 时间的信息。我制作了一个带有共享内存的函数,用于将 Ticks(UNIX-Time)和 Client-Number 写入具有 MAXENTRIES 索引的结构数组中。
我不明白为什么传递给函数f_timeLog(int, int) 的值没有显示在数组中。
如果我用
打印printf("From: %d\tTICKS: %d\n", logSM[*counter]->vonWem, logSM[*counter]->ticks);
价值观总是:0。 如果我调试程序,它会正确写入第一个值 logSM[0],但不会。
感谢您的帮助!
typedef struct
{
int vonWem;
int ticks;
}timeLog [MAXENTRIES];
void f_timeLog(int who, int ticks)
{
int *counter;
timeLog *logSM;
logSM = (timeLog*) shmat(TimeLog, NULL, (SHM_R|SHM_W));
counter = (int*) shmat(IDCounter, NULL, (SHM_R|SHM_W));
P(SemWriteLog);
logSM[*counter]->vonWem = who;
logSM[*counter]->ticks = ticks;
*counter= *counter+1;
if(*counter >= MAXENTRIES) *counter= *counter - MAXENTRIES;
V(SemWriteLog);
}
输出为logSM[0] vonWem = X, ticks = xxxxxxxx
和logSM[1] and further: vonWem = 0, ticks = 0;
【问题讨论】:
-
所以 logSM 指向 timeLog[MAXENTRIES] 的数组,但我仍然不知道如何将整数变量写入这个数组。
标签: c linux memory semaphore shared