问题描述
我正在为Linux上的C语言中的一个项目编写一个客户端服务器应用程序,我想让客户端进行身份验证,以通过SYSV套接字向服务器提供一对凭据,即username:password。 为了管理凭据,然后登录,我创建了一个结构
typedef struct authentication {
char username[AUTHLEN];
char password[AUTHLEN];
int logged; /* 1 = Logged - 0 = Not logged */
} auth_user;
auth_user *user;
此结构存储在共享内存中(需要)并受信号量保护,因此,如果我与两个客户端连接,则第一个接收身份验证表单,而第二个则等待第一个客户端结束。 我的问题是,很明显,在第一个客户端进行身份验证之后,第二个客户端完成了相同的操作,如果我想知道第一个客户端的用户名,就不能,因为第二个客户端已经覆盖了变量,现在它的用户名了存储在变量中。 因此,我想在共享内存中分配一些结构数组,但我也想动态地做到这一点,并且对于共享内存,我不能使用malloc系列函数。 与我的教授交谈时,他说要在共享内存中分配大量内存,并使用偏移量在此偏移量位置将新部分附加到新生成的进程(客户端)(其中偏移量是已使用内存的结尾)记忆的上一部分),但我不知道该怎么做。 我还尝试过使用静态数组struct,但是没有任何积极结果。
我以这种方式分配共享内存:
if((shmid=shmget(SHMKEY,SIZE,perms)) < 0) /* perms can be 0600 | IPC_CREAT */
DieWithError("shmget() failed\n");
并附上
if((user=shmat(shmid,NULL,0)) < 0)
DieWithError("shmat() failed\n");
我用于分配的方法有点基本,但是我对共享内存有点陌生,所以我可能缺少明显的东西,欢迎任何建议。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)