LINUXでC言語

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
KURO

LINUXでC言語

#1

投稿記事 by KURO » 18年前

またまたまたよろしくお願いします。
仕事でLINUX環境で使うC言語(C++)プログラムを作っているんですが、
LINUXで「system」コマンドは使えるんでしょうか?

またはLINUXで使える「system」コマンドのような関数はありますか?

キーワードを「LINUX C言語」でググッても、それっぽいサイトは引っかからないんで、
問題ないのかなぁと思うのですが、確信が無いので教えていただきたいです。

よろしくお願いします。


cus

Re:LINUXでC言語

#3

投稿記事 by cus » 18年前

>仕事でLINUX環境で使うC言語(C++)プログラムを作っているんですが、
>LINUXで「system」コマンドは使えるんでしょうか?

C言語の開発環境が入っているなら、別にOSに依存せずにC言語の関数は使用できます。

windowsだからこれが使用出来るとか、Linuxだからこれは使用できないということは、ありません。

>キーワードを「LINUX C言語」でググッても、それっぽいサイトは引っかからないんで、
>問題ないのかなぁと思うのですが、確信が無いので教えていただきたいです。

調べるとしたら、[C言語標準関数一覧]などで、調べるといいでしょう。

cus

Re:LINUXでC言語

#4

投稿記事 by cus » 18年前

すんません。よくみたらC++になっていましたね・・・。

C++はC言語の関数をすべてサポートしているので、大丈夫です。

でも、非推奨な関数もありますので、調べながら関数を使用していってくださいね。

余計な投稿が増えてしまって申し訳ありません。

管理人

Re:LINUXでC言語

#5

投稿記事 by 管理人 » 18年前

コンパイラによる違いは多くあるのではないでしょうか。

例えばLONGLONG型はwindows環境ではないと使えないと思いますし、

gccで

printf("%d %d ", rand()%2, rand()%2)
printf("%d %d ", rand()%2, rand()%2)
printf("%d %d ", rand()%2, rand()%2)

を実行すると酷いことになりますし。

Linuxはmanコマンドで関数の使い方が確認出来ますよ。

http://www.linux.or.jp/JM/html/man/man1/man.1.html

googleでも「関数名 Manpage」で検索するとたいてい希望するページが見れます。

tk-xleader

Re:LINUXでC言語

#6

投稿記事 by tk-xleader » 18年前

system関数を使うことはできますが、コマンド自体はOSに依存するはずです。

通りすがり

Re:LINUXでC言語

#7

投稿記事 by 通りすがり » 18年前

>windowsだからこれが使用出来るとか、Linuxだからこれは使用できないということは、ありません。

何を根拠に言っているのかわかりませんが、
OSによって出来る事出来ない事がでてくることは山のようにありますね。

cus

Re:LINUXでC言語

#8

投稿記事 by cus » 18年前

管理人さん
いつも楽しく拝見させていただいています。

>コンパイラによる違いは多くあるのではないでしょうか。
>例えばLONGLONG型はwindows環境ではないと使えないと思います

確かにコンパイラの違いで、型などの違いはありました。intが2バイトだったり4バイトだったり。
軽率な回答をしてしまって申し訳ありません。

>gccで

>printf("%d %d ", rand()%2, rand()%2)
>printf("%d %d ", rand()%2, rand()%2)
>printf("%d %d ", rand()%2, rand()%2)

上記はgccでコンパイルした所、思った通りの結果になりましたが、
ひどい結果とはどのような感じになるのでしょうか??

【tkmakwins15】さん

>system関数を使うことはできますが、コマンド自体はOSに依存するはずです

system関数はANSI C標準の関数なのですが、それでもOSに依存するのでしょうか?
若輩者ですから、間違っていたら指摘をいただきたいです。

【通りすがり】さん

>何を根拠に言っているのかわかりませんが、
>OSによって出来る事出来ない事がでてくることは山のようにありますね。

このKUROさんが質問している事は、C関数の話ですよね?
シェル上、DOS上の話ではないですよね??

例えば、windows上でgccを使用してC標準のプログラムを作成したとした時と、
    linux上でgccを使用してC標準のプログラムを作成した時に、【通りすがり】さんのおっしゃっている
出来ること、出来ないことはあるのでしょうか??
ご教授いただきたいです。

長くなってしまいました。申し訳ありません。

たかぎ

Re:LINUXでC言語

#9

投稿記事 by たかぎ » 18年前

> 管理人さん

>例えばLONGLONG型はwindows環境ではないと使えないと思います

LONGLONG 型というのは、何か特別なライブラリを使わない限り、どんな環境でも使えません。
ちなみに、long long 型であれば、Turbo C++ でも Visual C++ 2005 でも MinGW でも Cygwin でも使えます。

> gccで
> (中略)
> を実行すると酷いことになりますし。

それは、gcc ではなく glibc などのライブラリの違いによるのでは?


> cusさん

> system関数はANSI C標準の関数なのですが、それでもOSに依存するのでしょうか?

system 関数の仕様をよく調べてみてください。ざっと書いてみると...

・引数に NULL を指定した場合、コマンドプロセッサが利用できる場合は非 0 を、そうでない場合は 0 を返す。
・引数に NULL 以外を指定した場合の動作と返却値は処理系定義。

といったところです。
コマンドプロセッサが使えない環境では、どんなコマンドも system 関数で実行することができません。
具体的には、(最近のものは知りませんが)昔の MacOS 用の CodeWarrior では、system(NULL) が 0 を返したように記憶しています。

tk-xleader

Re:LINUXでC言語

#10

投稿記事 by tk-xleader » 18年前

>system関数はANSI C標準の関数なのですが、それでもOSに依存するのでしょうか?

依存します。なぜならば、OSによって用意しているコマンドが違うからです。Windowsではファイルの削除は、ドラッグ&ドロップでできますが、UNIXやMS-DOSなどの文字ベースのOSでは、文字列によって操作します。その上で、例えば、UNIXが "kese ファイルパス" というコマンドで消すとします。また、MS-DOSでは、"kiero ファイルパス" だとします。すると、keseというコマンドは、UNIXで使えても、MS-DOSでは使えないことになりますよね。system関数は、このコマンドを実行する関数なので、OSに依存するということです。

※UNIXやMS-DOSの「ファイルを消す」という操作のコマンドは、たとえ話で、違うコマンドがあるはずです。

たかぎ

Re:LINUXでC言語

#11

投稿記事 by たかぎ » 18年前

ちなみに、「ファイルを消す」コマンドは、

Unix では rm
MS-DOS では del

です。

管理人

Re:LINUXでC言語

#12

投稿記事 by 管理人 » 18年前

>cusさん
なんか変な所につっこんでしまってすみません。
ただ今後の誤解を招くかなと思いましたので。
酷い事というのは、例えばゲームを作るときなど、
乱数を%2で使用すると0と1が交互に現れるので、使い物にならないという意味でした。
上位ビットを使えばいいわけですけどね。

>たかぎさん
LONGLONG型を使う時は私はいつもwindows.hをインクルードするので、一般的にlinuxでは使わないかなと思ったので、一般的な話として、windowsで使えてlinuxで使えない機能として言いました。
変なことにつっこんでしまってすみませんm(_ _)m

通りすがり

Re:LINUXでC言語

#13

投稿記事 by 通りすがり » 18年前

まず,別の“通りすがり”であることを断っておきます.


cusさんへ

>このKUROさんが質問している事は、C関数の話ですよね?
>シェル上、DOS上の話ではないですよね??
>
>例えば、windows上でgccを使用してC標準のプログラムを作成したとした時と、
>    linux上でgccを使用してC標準のプログラムを作成した時に、【通りすがり】さんのおっしゃっている
>出来ること、出来ないことはあるのでしょうか??

Cの標準関数そのものは,高い移植性を持っています.
しかし,例え標準関数だけを使って作成したプログラムであっても,
移植性の問題はどうしても出てきます.
どういったプログラムが移植性が高いのか,また低いのかについては,
http://www.google.co.jp/search?hl=ja&rl ... %B4%A2&lr=
を参考にして下さい.

また,Windows上で,CygwinとMinGWのどちらでgccを使用するかによっても違います.
Cygwinは,UNIX互換のためにPOSIX準拠のDLLを必要とします.
MinGWは,Cygwinプロジェクトから分離してPOSIX準拠を捨てたため,
CygwinでコンパイルできてもMinGWではコンパイルできないものもあります.

ただし,移植性うんぬんではなく,
純粋に「できること」「できないこと」だけを考えるなら,
確かに,どんな計算機やOSや言語処理系を使用しても大差はありませんね.


KUROさんへ

すみませんが,仕事でと聞いて心配になってしまいました.
思い込みや勘違いでやってしまうと,
チーム全員で何日も徹夜ということにもなりかねません.
ご自分で調べてどうしても分からないときは,
同僚や上司の方に確認するのが筋だと思います.

P.S. もちろん,pipeやfork関係の関数も使えますよ.

閉鎖

“C言語何でも質問掲示板” へ戻る