ここから質問投稿すると、最大10000ポイント当たる!!!! >>

インクルードファイルの<sys/ipc.h>や<sys/shm.h>を使ったプログラムを作っているのですが、通常のプログラミングソフトでは、<sys/ipc.h>や<sys/shm.h>のインクルードファイルが入っていないようです。探してはみましたが、見つけることができませんでした。
なんとかして手に入れたいのですが、どこか手に入れることができる場所をご存知の方いらっしゃいませんか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

gccというコンパイラーにはついています


Windowsならcygwinをインストールしたら使えます
    • good
    • 1

OS やコンパイラの情報をください.

この回答への補足

OSはwindowsXpでコンパイラはWebotsというソフト内蔵のものを使っていて、mingwだと思います。
詳細はなんと答えてよいのかわかりません。

補足日時:2008/07/22 14:02
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QLNK2019: 未解決の外部シンボルのエラーが出る

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自キャラのデータ
Point2D g_jikipos = {40, 400};//自キャラの座標

//画像ハンドル
int g_jikiimage[11];

//色々なファイルの読み込み
int LoadFiles(){
//画像ファイル読み込み
if(LoadDivGraph("media\\player01.bmp",
11,11,1,64,64,g_jikiimage) == -1) return -1;

return 1;
}


 mymain.h
//他から呼び出させるMyMainの関数
void MyMain();
int LoadFiles();


 myhelper.h(サンプルなので打ちミスはない)
#include "DxLib.h"
#include <limits.h>
#include <math.h>

//構造体宣言
//座標またはベクトルを記録する構造体
struct Vector{
float x,y;
};
typedef Vector Point2D;
//線を記録する構造体
struct Line2D{
Point2D startpos, endpos;
float katamuki;//傾きをラジアン値で記録
Vector speed;//移動している場合は速度をセット
};
//球体を記録する構造体
struct Ball2D{
Point2D position;
float hankei;//半径
};
//四角形を記録する構造体
struct Rect2D{
Point2D lefttop;
Point2D rightbottom;
float width;
float height;
};


//ライブラリ関数
Point2D PosInView(Point2D in);
int XInView(float inx);
int YInView(float iny);
void ScrollToLeft(float jikiposx);
void ScrollToRight(float jikiposx);
void ScrollToUp(float jikiposy);
void ScrollToDown(float jikiposy);
void DrawLineInView(float x1, float y1, float x2, float y2, int Color, int Thickness);
void DrawCircleInView(float x, float y, float r, int Color, int FillFlag);
void DrawAnimation(float x, float y, double ExtRate, double Angle,int TurnFlag,
int *imgarray, int allframe, float fps);
//ベクトル関数
Vector CreateVector(Vector in, float veclen);
Vector AddVector(Vector v1, Vector v2);
Vector SubVector(Vector v1, Vector v2);
Vector AddVectorInFrameTime(Vector pos, Vector speed);
Vector AddVectorInFrameTime2(Vector pos, Vector speed, Vector accel);
Vector Normalize(Vector in);
Vector RotateVector(Vector in, float radian);
float VectorLengthSquare(Vector in);
float DotProduct(Vector v1, Vector v2);
float CrossProduct(Vector v1, Vector v2);
void SetLine2DKatamuki(Line2D *in);
void DrawLine2D(Line2D in, int Color, int Thickness);
void DrawBall2D(Ball2D in, int Color, int Fill);
//当たり判定関数
bool HitTestLineAndBall(Line2D linein, Ball2D ballin);
bool IsPointAtLineFace(Line2D linein, Point2D ptin);
bool HitTestLineAndLine(Line2D line1, Line2D line2);
bool HitTestBallAndBall(Ball2D a, Ball2D b);
bool HitTestPointAndBox(Rect2D rect, Point2D pt);
//タイマー関数
void SetSimpleTimer(int idx, int time);
int GetPassedTime(int idx);


//グローバル変数
extern float g_frametime;
extern Rect2D g_framerect;//画面領域(当たり判定)
extern Point2D g_current_field_pos;//現在の左上座標
extern Rect2D g_stagesize;//ステージサイズ

//定数宣言
const float ZEROVALUE = 1e-10f;
const float PIE = 3.1415926f;
const int SCROLL_LIMIT = 200;
----------------------------------------------------------------
 エラー内容
1>myhelper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MyMain(void)" (?MyMain@@YAXXZ) が関数 _WinMain@16 で参照されました
1>C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\my\Debug\my.exe : fatal error LNK1120: 外部参照 1 が未解決です
1>my - エラー 2、警告 0
ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ
----------------------------------------------------------------
画像を貼り付けときます
(見えにくい場合→http://www.dotup.org/uploda/www.dotup.org154142.jpg.html)
初心者なのでわかりやすくお願いします

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自...続きを読む

Aベストアンサー

ファイル構成から推測するに
mymain.cpp というファイルに
void MyMain(void) {
// ここに処理を書く
}
という関数が必要なようです。

Qセマフォとmutexの違いは?

排他制御としてセマフォとmutexがありますが、
この二つの違いがよくわかりません。
自分で調べてみたところ、
・セマフォ…プロセス間排他制御。複数ロックがかけられる。
・mutex…スレッド間排他制御。ロックは一つだけ。

と言うような違いがあるようなのですが、これだけの差なんでしょうか?
(これだけの差、と言ってる時点で筋違いだったら申し訳ありません)
また、セマフォをスレッド間排他制御に用いたり、
mutexをプロセス間排他制御に用いることは可能なのでしょうか?
可能だとしたら、これらが2種類存在する理由も教えていただきたいです。

Aベストアンサー

> >一般論としては、Mutexは「カウントを1に限定した」特殊化したSemaphoreです。
> とのことですが、これはWin32以外の環境だと
> これ以上の違いはないと言うことでしょうか?

「一般論」と書いた意味を取り落とされているのではないかと思います。

「一般論としては〇〇」なのですから、「Win32以外の環境」も含めて「各論」では「必ずしも〇〇とは限らない」とご理解ください。

なお、ご指摘のとおり、あるリソースを排他的に利用するだけであればMutexを使用するかわりにカウントが1のSemaphoreを使用することができます。(特定の環境での、MutexとSemaphoreの環境依存の動作を除けば、ですが。)

ではなぜ2種類が用意されている(用意されている環境が存在する)のかといえば、リソースの排他的利用は非常によくあることなので、これに特化した機能を用意すればより良いであろう、というシステムデザイナの判断によるものと考えられます。

ここで言う「より良い」は、あるデザイナにとっては「便利性」、また別のデザイナにとっては「消費リソースが少ない」と、これまた考え方はいろいろでしょう。

> >一般論としては、Mutexは「カウントを1に限定した」特殊化したSemaphoreです。
> とのことですが、これはWin32以外の環境だと
> これ以上の違いはないと言うことでしょうか?

「一般論」と書いた意味を取り落とされているのではないかと思います。

「一般論としては〇〇」なのですから、「Win32以外の環境」も含めて「各論」では「必ずしも〇〇とは限らない」とご理解ください。

なお、ご指摘のとおり、あるリソースを排他的に利用するだけであればMutexを使用するかわりにカウントが1のSemaphore...続きを読む

Q共有メモリについて

shmget関数のサイズ指定について質問があります。

共有メモリ上にキー番号「1234」で作られている状態で、
以下の関数(サイズ指定ありなし)を呼び出した際の違
いは何なのでしょうか?
単純にキー1234にアタッチしたいだけなら、サイズ0指定を
使用するのでしょうか?

shmget(1234,0,IPC_ALLOC)
shmget(1234,sizeof(int),IPC_ALLOC)

Aベストアンサー

IPC_ALLOC は、どうやら、単に 0 と定義されているマクロではなさそうですね。

http://www-igm.univ-mlv.fr/~dr/HEVEA/

なので、mode_t mode = SHM_R | SHM_R >> 3 | SHM_R >> 6; (適当に決めたアクセスモード)として、

 shmget(1234, 0, mode);

と、

 shmget(1234, sizeof(int), IPC_ALLOC | mode);

の意味は違うかもしれませんね^^ 上の方は単に存在すればよく、下の方は存在してかつ size をチェックし size が同じ(あるいはそれ以上)という意味になるのかもしれません。移植性を考慮するなら、IPC_ALLOC は使わないほうがいいと思いますけれど…^^

レスがあまりないので、表示通りに「困って」る風には思えないので、まあいいんでしょうけど(笑)参考までに^^

Qmsgget()で指定するkey値について

solaris9上でメッセージキューを使用したCプログラム
を作成するのですがmsgget関数で不明点があります。
尚、コンパイラはSUNのForte Cです。

int msgget(key_t key, int msgflg);

第一引数のkeyに指定する値ですが、サーバ内の開発
プログラム全体で重複しないようにするのは当然かと
思いますが、OSで予約されている番号とかあるので
しょうか?

例えば
 0~999:OSで使用
 1000番以降:ユーザアプリで利用可

OSでもメッセージキューとか使用していると思うので
適当な番号を取ったらダメだろうなと思って色々調べた
のですが解決する事ができませんでした。

すみませんがご教授の程よろしくお願い致します。

Aベストアンサー

通常、keyを生成する場合は、以下の手順をとります。
1.ftok関数でkey値を取得する。
key値=ftok(p1,p2);
p1は、ある基準となるファイルの絶対パス名(以下基準ファイルと略記)
p2は1~255の任意の数値
上記により、同一の基準ファイルに同一のP2を与えた場合は、本システム内でかち合わないユニークなキー値
を発生させることをOSが保証します。
2.従って、以下のようにします。
P1へ基準ファイルの絶対パス名をセット
key1=ftok(p1,1);・・・メッセージキュー1用
key2=ftok(p1,2);・・・メッセージキュー2用(以下同様、但しMAX255迄)
但し、key1,key2が-1の場合は、ftokのエラーのため、使用不可(このチェックを入れて下さい)
また、この基準ファイルは、絶対に更新しないで下さい。(タイムスタンプが変わると同一のキー値が得られません)又、このファイルを毎回かならず使用して下さ
い。
3.あとはこのkey1,key2・・を使ってmsggetを行って下さい。

QをVisualStudioでつかえるようにする

<unistd.h>をVisualStudioでつかえるようにしたいのですが、問題なくコンパイルできるようにするにはどうしたらいいでしょうか?

CygwinというやつをインストールしてやってみたのですがやはりVisualStudioだけでコンパイルしてやりたいのですが。。。。

Aベストアンサー

おそらく<unistd.h>をフルスペックで利用したいわけではないと思います。その中の一部の関数を使いたいだけなら<io.h>などで代用できるはずですから、ヘルプで調べてみることをお勧めします。

ソースを修正せずに、コンパイル&実行ができるようにすることは諦めた方がよいと思います。

移植のことを考えるなら、<unistd.h>とか<windows.h>のような環境に特化したヘッダや、そこで宣言される型や関数などを直接使うのではなく、適切にラッピングしてから使う方が後々楽です。今回は仕方ないでしょうが、今後はそうしましょう。

Qwindows.hがincludeされない

http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/を見ながら何度も試したのですがどうしてもwindows.hがインクルードされません。上記のページに書いてあること以外に必要な作業があるのでしょうか?

Aベストアンサー

回答見る限り、パスが設定されてないっぽいですね。

具体的には
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
の手順3です。

VC++ 2005のメニューから、
ツール → オプション → プロジェクトおよびソリューション → VC++ ディレクトリ
で、
ディレクトリを表示するプロジェクト→
・実行可能ファイル
・インクルードファイル
・ライブラリファイル
の3つの場所にそれぞれ手順3に書かれたパスを追加します。

インクルードファイルの項に追加したパスが、windows.hのある場所なので、これで大丈夫だと思います。
自分もここでつまずいたので…

Qsleep()関数について

"数秒おきに警報をn回鳴らすプログラム"をC言語で作成しようと
考えています。

プログラム実行環境はWindowsですが、
sleep()関数は使用できないのでしょうか??

仮に使用できない場合、この関数に代わる関数や代替方法が
あれば教えて頂けませんでしょうか? 宜しくお願いします。

Aベストアンサー

正確な動作でも構わなければ
windows.hをインクルードして
Sleep()関数を使いましょう.
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200207/02070061.txt

しかし,正確に数秒おきに動作を行いたい場合はマルチメディアタイマ等を使いましょう.
マルチメディアタイマはミリ秒間隔でコールバック関数を呼び出すことができます.
timeSetEventを用いてコールバック関数の登録を行うことができます.
timeKillEventでコールバック関数の解除を行うことができます.

多分他にも方法があると思うのですが…私はこれぐらいしか知りません^^;

参考URL:http://www.katto.comm.waseda.ac.jp/~katto/Class/GazoTokuron/code/time.html

Q共有メモリの同時アクセスについて教えてください。

2つのプロセスが同時に同じ共有メモリにアクセスすることは可能ですか?

ミューテックスや、セマフォなどの排他制御を外せばできたりしませんか?
片方のプロセスで共有メモリから、データの一部をHDDに保存しつつ、それと同時に、もう片方のプロセスで共有メモリからデータの中身を表示させたいのですが・・・。

Aベストアンサー

読み込み同士なら排他制御しなくてもいいですけど。
けど、誰かその共有メモリに書き込むプロセスやスレッドがいるはずなので、
共有ロックは必要なのでは。

Qセグメンテーション違反

C言語を使用しています。

構造体に値をいれようとしたら、コンパイルは出来るのですが、実行時に
「セグメンテーション違反です (core dumped)」
となってしまい、それ以上行えません。

構造体と代入したい変数との型は、合っています。

いろいろ本などで見ましたが、何が原因かわからず困っています。
教えてください。
宜しくお願いします。

Aベストアンサー

OSは何でしょうか。コンパイラは何を使用していますか?
通常、デバッグオプションをつけて実行すると、異常の発生したソースの箇所で止まりますので、それが手がかりになります。またNo1の方が言われてますように、ソースが公開できるのであれば、ソースを提示するのが良いかと思います。

Qsys/types.hの必要性について

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
int main (int argc,char *argv[])
{
struct stat buf[2],*p;
    if(argc!=3)
{
fprintf(stderr,"Usage:newer file1 file2\n");
exit(EXIT_FAILURE);
}
p=buf;
if(stat(argv[1],p)<0)
{
perror("stat");
exit(EXIT_FAILURE);
}
p++;
if(stat(argv[2],p)<0)
{
perror("stat");
exit(EXIT_FAILURE);
}
if(buf[0].st_mtime>buf[1].st_mtime)
{
printf("%s\n",argv[1]);
}
else
{
printf("%s\n",argv[2]);
}
return EXIT_SUCCESS;
}
上記のプログラムでは<sys/types.h>を使っていますが、
どこの部分で必要になるのでしょうか?
プログラム貼り付けて非常に見づらくてすいません

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
int main (int argc,char *argv[])
{
struct stat buf[2],*p;
    if(argc!=3)
{
fprintf(stderr,"Usage:newer file1 file2\n");
exit(EXIT_FAILURE);
}
p=buf;
if(stat(argv[1],p)<0)
{
perror("stat");
exit(EXIT_FAILURE);
}
p++;
if(stat(argv[2],p)<0)
{
perror("stat");
exit(EXIT_FAILURE);
}
if(buf[0].st_mtime>buf[1].st_mtime)
{
printf("%s\n",argv[1]);
}
el...続きを読む

Aベストアンサー

statに必要です。
仮に、<sys/types.h>をインクルードせずにコンパイルでき、動作に問題がないとしても移植性に問題が出ます。
仕様で<sys/types.h>のインクルードが要求されているのであれば、「たまたま」コンパイル・実行できることに期待せず、要求に従いましょう。


人気Q&Aランキング