如何解决使用SYSV IPC在共享内存中动态分配结构
我正在为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 举报,一经查实,本站将立刻删除。