みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

popen・pcloseについて

popen・pcloseについて

以下のようにpopenを使ってdirコマンドを打った時と同じようなプログラムを
Microsoft Visual C++ 2008上で作ったのですが

#include <stdio.h>

int main(void)
{
FILE *fp;
char buff[64];

fp=popen("dir","r");

while(fgets(buff,sizeof(buff),fp)!=NULL){
printf("%s",buff);
}

pclose(fp);

return 0;

}

これをビルドした所、以下のようなエラーが出てしまいました。
c:\users\yamaomoto\documents\visual studio 2008\projects\popen\popen\popen.c(8) : warning C4013: 関数 'popen' は定義されていません。int 型の値を返す外部関数と見なします。
c:\users\yamaomoto\documents\visual studio 2008\projects\popen\popen\popen.c(8) : warning C4047: '=' : 間接参照のレベルが 'FILE *' と 'int' で異なっています。
c:\users\yamaomoto\documents\visual studio 2008\projects\popen\popen\popen.c(14) : warning C4013: 関数 'pclose' は定義されていません。int 型の値を返す外部関数と見なします。

popen.obj : error LNK2019: 未解決の外部シンボル _pclose が関数 _main で参照されました。
popen.obj : error LNK2019: 未解決の外部シンボル _popen が関数 _main で参照されました。
C:\Users\Yamaomoto\Documents\Visual Studio 2008\Projects\popen\Debug\popen.exe : fatal error LNK1120: 外部参照 2 が未解決です。

色々と試してみたのですが解決に至りませんでしたのでよろしければ、
教えて頂けませんでしょうか?

投稿日時 - 2010-05-27 11:49:09

QNo.5925330

すぐに回答ほしいです

質問者が選んだベストアンサー

VC++の場合は関数名を
 _popen
 _pclose
というように前に「_」を付ければ使えます。

投稿日時 - 2010-05-27 12:01:37

補足

ありがとうございました。ビルド出来ました。

投稿日時 - 2010-05-27 13:19:41

このQ&Aは役に立ちましたか?

7人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

popenとかは本来UNIX系OS専用関数ですが、それは大丈夫ですか?
Windowsでやる場合には関数の前に_を付ける必要があります。

#include <stdio.h>

int main(void)
{
FILE *fp;
char buff[64];

fp=_popen("dir","r");

while(fgets(buff,sizeof(buff),fp)!=NULL){
printf("%s",buff);
}

_pclose(fp);

return 0;

}

多分コレで通るかと。

投稿日時 - 2010-05-27 12:09:26

補足

>>popenとかは本来UNIX系OS専用関数ですが、それは大丈夫ですか?
全く大丈夫じゃありませんでした。

関数名は完全にUNIXでもVC++でも同じだと思っていました…
まだ、VC++始めて浅くてその辺りの理解が足りてませんでした。

そのあたり、UNIXとVC++で関数名の違いが載っているサイトとかご存知でしょうか?

投稿日時 - 2010-05-27 13:24:05

あなたにオススメの質問