アプリ版:「スタンプのみでお礼する」機能のリリースについて

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 が未解決です。

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

A 回答 (2件)

VC++の場合は関数名を


 _popen
 _pclose
というように前に「_」を付ければ使えます。

この回答への補足

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

補足日時:2010/05/27 13:19
    • good
    • 0

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;

}

多分コレで通るかと。

この回答への補足

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

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

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

補足日時:2010/05/27 13:24
    • good
    • 0

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