2016-08-03 6 views
-2

は愚かな質問かもしれませんが、とにかく試してみます:Cのソースコード/スクリプト/プログラムはシバンのようなコマンドを使用していますか?

シェルスクリプトを実行可能ファイルにすると、実行時にshebangを使ってどのインタープリタを使うのかがわかります。 Cコード/スクリプト/プログラムは何か似ていますか?

実行可能なCプログラムの冒頭にマジックナンバーはありますか?

+0

ほとんどの場合、 '.c'拡張子で保存されたプレーンテキストファイルです。 –

+0

@MohitJain私はcスクリプトではなく、実行可能ファイルについて話しています(またはcスクリプトに隠れた行がありますか?) –

+0

これはスクリプトではありません。 ABIの詳細については、[ABI](https://en.wikipedia.org/wiki/Application_binary_interface)と[ELF](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format) –

答えて

1

はい。

Cのプログラム実行ファイル(およびすべてのコンパイルされた言語)は、「マジック」文字で始まります。0x7fELF。 Linuxカーネルは、shebangスクリプトを認識するのと同じ方法でこれを認識しますが、スクリプトインタプリタではなくELFローダをトリガする点を除いて、シバンスクリプトを認識します。

実際にはシバンですが、類似しています。

0

一部のGoogle-INGの後、私は(私は100%確実ではないですが)次のことを理解して考える:

なbashのやPython、PHPと他の言語のようないくつかのプログラミング言語がインタプリタを使用しています - ので、シバンを必要とする可能性があります。インタプリタは、コンパイラとは異なり、呼び出されるたびにプログラムコードを機械語に変換します。

Cはインタプリタを使用せず、コードを実行可能ファイル/オブジェクトファイルに一度だけ変換するコンパイラのみを使用します。

答えは - いいえ - cコードはシバンを必要としません。

0

「マジックナンバー」という用語は、実際にはスクリプトよりもコンパイルされたプログラムのほうが優れています。シバンが発明される前に、実行可能ファイルを特定するためのマジックナンバーはすでにありました。

マジックナンバーは、プログラムがファイルのフォーマットをすばやく決定できるようにする固定オフセット(通常はファイルの先頭)の任意の短いバイトシーケンスです。ELFマジックナンバー、PNGマジックナンバー、gzipマジックナンバー...

シーブンは、マジックナンバーの模倣品です。

また、ELFでは、です。ELFインタプリタと呼ばれるものです。これはカーネルが認識しなければならないもので、スクリプトインタプリタに似ています。 ELF実行ファイルにインタプリタがある場合、カーネルはメイン実行可能プログラムのエントリポイントの代わりにインタプリタのエントリポイントでプログラムを開始します。動的にリンクされたすべてのプログラムは、この機能を使用します。動的リンカーはELFインタプリタです。

1

シェバングは、スクリプトは、パラメータとして与えられるに予め起動する実行可能なプログラムを必要とするスクリプトを、認識するシェル*で使用されます。

など。 "myscript"という名前のスクリプト。PL」を有する実行可能なアクセス権

#!/usr/bin/perl 
# perl script 

シェルは#!を見て、このようなプロセスを開始:

/usr/bin/perl myscript.pl 

コンパイルされたCプログラムが直接実行されているが、その 『マジックナンバーは』 ないですつまり、Cプログラムであったとします。マジックナンバーは、OSに合った特定の実行可能ファイルであり、実行可能なマシンコード(特定のアドレスから始まる)は/ aプロセッサによって直接実行されます。

*歴史的に、シェルはシバンの検出を担当していました。現在、カーネルは直接それを行います(下記のコメントを参照)。

+1

を参照してください。シバンラインのポイントカーネルがそれを認識しているということです。シェルはそれ自体を解析する必要はありません –

+0

歴史的にはシェルです(https://en.wikipedia.org/wiki/Shebang_(Unix)#History)が、現在はカーネルです。 –

+0

2つの良い答えは、実際にはお互いを完了します。私は1つを選択しなければならなかった... :-)多くのありがとう! –

関連する問題