タグ付けされた質問 「c」

Cは、オペレーティングシステム、ゲーム、その他の高性能作業に使用される汎用のコンピュータープログラミング言語であり、C ++とは明らかに異なります。1972年に、Unixオペレーティングシステムで使用するためにDennis Ritchieによって開発されました。

4
FreeBSDがGCCを廃止してClang / LLVMを支持するのはなぜですか?
それで、私はネットサーフィンしていて、この記事につまずきました。基本的に、バージョン10以降のFreeBSDでは、Clang / LLVMを優先してGCCを廃止する予定です。 私がこれまでネットで見てきたことから、Clang / LLVMはかなり野心的なプロジェクトですが、信頼性の観点からはGCCに匹敵するものではありません。 FreeBSDがコンパイラインフラストラクチャとしてLLVMを選択している技術的な理由はありますか、それとも全体の問題は永遠のGNU / GPL対BSDライセンスに要約されていますか? この質問には(何らかの形で)FreeBSDでのGCCの使用に関する関連情報が含まれています
241 freebsd  compiling  gcc  c  llvm 

10
argvにプログラム名が含まれるのはなぜですか?
典型的なUnix / Linuxプログラムは、引数カウント(int argc)および引数ベクトル(char *argv[])としてコマンドライン入力を受け入れます。の最初の要素argvはプログラム名で、その後に実際の引数が続きます。 プログラム名が引数として実行可能ファイルに渡されるのはなぜですか?独自の名前を使用したプログラムの例はありますか(何らかのexec状況)。

7
スレッドはLinuxのプロセスとして実装されていますか?
私は通過つもりだこの本マーク・ミッチェル、ジェフリー・オールダム、そしてアレックス・サミュエルことにより、高度なLinuxのプログラミング。2001年からですので、少し古いです。しかし、とにかくかなり良いと思います。 しかし、シェル出力でLinuxが生成するものとは異なる点に到達しました。92ページ(ビューアでは116ページ)の4.5 GNU / Linuxスレッド実装の章は、次の文を含む段落から始まります。 GNU / LinuxでのPOSIXスレッドの実装は、他の多くのUNIX系システムでのスレッド実装とは重要な点で異なります。GNU/ Linuxでは、スレッドはプロセスとして実装されます。 これは重要なポイントのようで、後でCコードで説明します。本の出力は次のとおりです。 main thread pid is 14608 child thread pid is 14610 そして、私のUbuntu 16.04では: main thread pid is 3615 child thread pid is 3615 ps 出力はこれをサポートします。 2001年から現在までに何かが変わったに違いないと思います。 次のページの次のサブセクション4.5.1シグナル処理は、前のステートメントに基づいています。 シグナルとスレッド間の相互作用の動作は、UNIXに似たシステムごとに異なります。GNU / Linuxでは、スレッドはプロセスとして実装されるという事実によって動作が決定されます。 そして、これはこの本の後半でさらに重要になるようです。誰かがここで何が起こっているのか説明できますか? 私はこれを見ましたLinuxカーネルスレッドは本当にカーネルプロセスですか?、しかしそれはあまり役に立ちません。よくわかりません。 これはCコードです: #include <pthread.h> #include <stdio.h> #include <unistd.h> void* thread_function …

4
fork()を使用したプログラムが出力を複数回印刷することがあるのはなぜですか?
プログラム1では1 Hello world回だけ印刷されますが、削除 \nして実行すると(プログラム2)、出力が8回印刷されます。誰かが私に\nここの重要性とそれがどのように影響するかを説明してもらえますかfork()? プログラム1 #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main() { printf("hello world...\n"); fork(); fork(); fork(); } 出力1: hello world... プログラム2 #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main() { printf("hello world..."); fork(); fork(); fork(); } 出力2: hello world... hello world...hello world...hello world...hello …
50 c  fork 

6
システムで使用しているCライブラリのバージョンは何ですか?
システムが使用しているユーザーランドCライブラリを確認するにはどうすればよいですか?この情報を必要とする考えられる理由は次のとおりです。 ダウンロードを検討している巨大なソースパッケージがあり、適切なチェックを行い、最小ライブラリバージョンをリストしますが、動作するかどうかを最初にチェックすることで、面倒な作業を省くことができます。 システムのパッケージ管理システムの外部で試してインストールしたいサードパーティのバイナリとABIの互換性が心配です。 私のシステムのライブラリの最小バージョンの必要性について言及しているドキュメントのソースパッケージがありますが、ビルドプロセスはチェックを実行しません。 特定のシステムをターゲットとするクロスコンパイラを構築していますが、前方互換性の問題を危険にさらしたくないです。

5
UIDを使用してすべてのユーザーのプロセスを強制終了するにはどうすればよいですか
Linuxシステムのシェルスクリプトまたはネイティブコードのいずれかから、特定のユーザーの実行中のすべてのプロセスを強制終了します。 / procディレクトリを読んでこれらを探す必要がありますか? 何か案は?LinuxのUIDの下にpidの動的マッピングはありますか?これはprocにありませんか? そうでない場合、このリストはどこで維持されますか?私はそれから読むべきですか?また、システム内のすべてのUIDの静的リストはどこにあるので、このユーザーが存在することを検証してから、その下で実行されているすべてのプロセスを強制終了できますか?
41 c  linux  proc 

6
バイナリファイルをC / C ++文字列リテラルとしてダンプする方法は?
Cソースコードに(一時的にテスト目的で)含めたいバイナリファイルがあるので、ファイルの内容を次のようなC文字列として取得したいと思います。 \x01\x02\x03\x04 これはおそらく、odまたはhexdumpユーティリティを使用して可能ですか?必須ではありませんが、文字列が16入力バイトごとに次の行に折り返され、各行の先頭と末尾に二重引用符を含めることができれば、さらに便利です。 文字列にnull(\x00)が埋め込まれることを認識しているため、これらのバイトが文字列を早期に終了させないように、コード内で文字列の長さを指定する必要があります。
39 c  hexdump  xxd 


2
pthreadのデフォルトのスタックサイズ
私が理解しているように、Linux上のpthreadのデフォルトのスタックサイズは16Kです。64ビットUbuntuのインストールで奇妙な結果が得られます。 $ ulimit -s 8192 また: pthread_attr_init(&attr); pthread_attr_getstacksize(&attr, &stacksize); printf("Thread stack size = %d bytes \n", stacksize); Prints Thread stack size = 8388608 bytes スタックサイズが「8388608」ではないと確信しています。何が間違っているのでしょうか?
24 c  multithreading 

3
fork()のコピーオンライトは複数のフォークをどのように処理しますか?
ウィキペディアによると(これは間違っている可能性があります) fork()システムコールが発行されると、親プロセスに対応するすべてのページのコピーが作成され、子プロセスのOSによって別のメモリ位置にロードされます。しかし、これは特定の場合には必要ありません。子がexecシステムコール(Cプログラム内から実行可能ファイルを実行するために使用されます)を実行するか、fork()。親プロセスのコマンドを実行するためだけに子が必要な場合、親プロセスのページをコピーする必要はありません。execこれは、子プロセスを呼び出したプロセスのアドレス空間を実行するコマンドで置き換えるためです。 このような場合、コピーオンライト(COW)と呼ばれる手法が使用されます。この手法では、分岐が発生したときに、親プロセスのページは子プロセス用にコピーされません。代わりに、ページは子プロセスと親プロセスの間で共有されます。プロセス(親または子)がページを変更するたびに、その特定のページのみの個別のコピーが、変更を実行したプロセス(親または子)に対して作成されます。このプロセスは、今後のすべての参照で共有ページではなく、新しくコピーされたページを使用します。他のプロセス(共有ページを変更しなかったプロセス)は、ページの元のコピー(共有されなくなった)を引き続き使用します。この手法は、何らかのプロセスがページを書き込むときにページがコピーされるため、コピーオンライトと呼ばれます。 いずれかのプロセスがページに書き込もうとすると、ページの新しいコピーが割り当てられ、ページフォールトを生成したプロセスに割り当てられるようです。元のページは、後で書き込み可能とマークされます。 私の質問はfork()、プロセスが共有ページへの書き込みを試みる前に複数回呼び出された場合はどうなりますか?
23 linux  c  fork 

2
POSIXは標準ユーティリティへのパスを保証しますか?
Cから、標準ユーティリティ(psなど)を実行する最も簡単な方法は何ですか? POSIXは、たとえば、標準psが存在することを保証していますか、/bin/psまたはPATH環境変数を取得した値にリセットしてから、PATH confstr(_CS_PATH, pathbuf, n);検索でユーティリティを実行する必要がありますか?
22 path  c  posix  exec 

4
ログファイルを作成する
LinuxのC言語のライブラリ関数またはシステムコールを使用して、/ var / log /にデータを保持するためのログファイルを作成する方法はありますか。また、ログを作成して処理するために従うべき標準についても知りたいです。ありがとう
22 linux  logs  c  syslog 

4
fork()の後、子はどこで実行を開始しますか?
UNIXプログラミングを学ぼうとしていますが、fork()に関する質問に遭遇しました。fork()は現在実行中のプロセスと同じプロセスを作成することを理解していますが、どこから開始するのですか?たとえば、コードがある場合 int main (int argc, char **argv) { int retval; printf ("This is most definitely the parent process\n"); fflush (stdout); retval = fork (); printf ("Which process printed this?\n"); return (EXIT_SUCCESS); } 出力は次のとおりです。 これは最も確実に親プロセスです どのプロセスがこれを印刷しましたか? どのプロセスがこれを印刷しましたか? 私はそれfork()が同じプロセスを作成すると思ったので、最初はそのプログラムでは、fork()呼び出しは永久に再帰的に呼び出されると考えました。から作成された新しいプロセスfork()は、fork()呼び出し後に開始すると思いますか? 次のコードを追加して、親プロセスと子プロセスを区別する場合、 if (child_pid = fork ()) printf ("This is the parent, child pid …
22 process  c  fork  api 



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.