私はUbuntuのC言語で共有メモリの概念を実装していました。私は2つのファイルserver.cとclient.cを作成しました。まずserver.cをコンパイルしてからclient.cをコンパイルして実行しました。しかし、それは誤りを示した。 "No such file or directory" 要求された共有メモリセグメントが見つからないため、このエラーはclient.cファイルにあります。どうすればこの問題を解決できますか?ここでshmgetにそのようなファイルやディレクトリのエラーがありません
は私のコード
server.c
#include<sys/types.h>
#include<sys/shm.h>
#include<sys/ipc.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<errno.h>
#define SHMSIZE 100
int main()
{
int shmid;
key_t key;
char *shm, *s;
key=9876;
shmid=shmget(key,SHMSIZE,IPC_CREAT|0666);
if(shmid<0)
{
printf("%s",strerror(errno));
perror("Error in Shared Memory get statement");
exit(1);
}
shm=shmat(shmid,NULL,0);
if(shm== (char *) -1)
{
perror("Error in Shared Memory attachment");
exit(1);
}
memcpy(shm,"Hello World",11);
s=shm;
s+=11;
while(*shm!='*')
{
sleep(1);
}
return 0;
}
いるclient.c
#include<sys/types.h>
#include<sys/shm.h>
#include<sys/ipc.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<errno.h>
#define SHMSIZE 100
int main()
{
int shmid;
key_t key;
char *shm, *s;
key=9876;
shmid=shmget(key,SHMSIZE,0666);
if(shmid<0)
{
printf("%s",strerror(errno));
perror("Error in Shared Memory get statement");
exit(1);
}
shm=shmat(shmid,NULL,0);
if(shm== (char *) -1)
{
printf("%s",strerror(errno));
perror("Error in Shared Memory attachment");
exit(1);
}
for(s=shm; *s!=0;s++)
{
printf("%c",*s);
}
printf("\n");
*shm='*';
return 0;
}
クライアントを実行する前にサーバーを実行しましたか?そして、サーバーを稼働させたままにしますか私はそれを試して、コードは私のために正常に働いた。 – kaylum
はい。私は最初にコンパイルされたクライアントを実行してから、実行コマンドを与えました。私のコードが初めて実行されましたが、今ではこのエラーが発生しています – user7222892
shmget()が "No such file or directory"で失敗するという事実は、そのキーを持つセグメントを見つけられていないことを意味します私たちは通常、shmget()によって返される値を参照します。後で使用されます) - shmidが同じであることを確認しましたか? あなたのコードは私のシステムで正常に動作します。 –