- ベストアンサー
fstatでファイルがリンクかどうか分かるか
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
open()にシンボリックリンクを引数として与えると普通はリンク先のファイルを開きます。なので、シンボリックリンクの判定をするならopen()→fstat()ではなくlstat()にすべきでした。
その他の回答 (1)
- salsberry
- ベストアンサー率69% (495/711)
リンクというのは、シンボリックリンク、ハードリンク、それ以外のどれでしょうか? シンボリックリンクなら、fstat()の結果のstruct statのst_modeに対してS_ISLNK()マクロを使えば判定できます。 ハードリンクはstruct statのst_nlinkを見ればリンク数が分かります。 fstatのマニュアルページを参照のこと (man fstat)。
補足
回答有り難うございます. 説明不足ですみません.シンボリックリンクです. シンボリックリンクに対して, S_ISLNKを使ったのですが,結果は偽でした. また,S_ISREGだと,結果は真でした. 以下のようにしたのですが,どこか間違ってるでしょうか? 引数にシンボリックリンクの名前を与えプログラムを実行. ↓ 与えられた引数から,ファイル名を取得. ↓ openでファイル記述子を得る. ↓ fstatに先のファイル記述子とstruct statのアドレスを渡す. ↓ S_ISLNK()マクロをstruct statのst_modeに使う. また,疑問なのですが, openシステムコールを使用したときに,自動的にリンク先のファイルを 開いてしまうようなことはないのですか?
関連するQ&A
- ファイル or ディレクトリの判別
C言語を勉強中です。 stat()を使用してファイルかディレクトリかの判別を行います。 ヘルプを見ると、構造体のst_modeを調べればいいという所まではわかりました。 この構造体のメンバをどう使用すれば、判別出来ますか?
- ベストアンサー
- C・C++・C#
- c言語の実行が分かりません
C言語のプログラムを実行させる方法が分かりません。 unixでC言語を以下の手順で学習しています。 1 emacs上でファイル名.cというソースファイルを作成。 2 xterm上で gcc ファイル名.c と入力 その後xterm上で後一つコマンドを入力すればいいのですが、そのコマンドを忘れてしまいました。教えていただければ、ありがたいです。
- 締切済み
- C・C++・C#
- シンボリックリンクとネットワークファイルシステムの違い
こんばんは。 UNIXの勉強をしている初心者です。 シンボリックリンクとネットワークファイルシステムの違いが分かりません。 他のPCのディレクトリを自分のパソコンから操作するためにそこをマウントしている。これがNFSだと覚えました。 ディレクトリを開くと、全く別の他のディレクトリにリンクされている。これがシンボリックリンクと習いました。 リンクとマウントという言葉は違うものの、やっていることは一緒では無いでしょうか? 表現がお粗末で申し訳ありませんが、どうちがうのでしょうか? 教えてください。
- ベストアンサー
- Solaris系OS
- 引数で指定されたファイルを実行する
実行する時に、引数としてファイル名を指定すると、そのファイルに書かれたスクリプトを実行してプログラムを終了する。 上記のようなCのプログラムを作りたいのですが、まったく見当がつかずに困っています。どうすればよいかご教授ください。
- 締切済み
- C・C++・C#
- シェルからCで作った実行ファイルを動かすには?
当方、完全に初心者です。 bashのファイルからC言語の実行ファイルを動かすことは可能でしょうか? いくつかのCの実行ファイルを、引数を指定して実行させたのですが、 どのようにすれば一番効果的でしょうか。引数を変えて何度も実行させたいので、スクリプトを書くと便利かなと考えたのですが。 どのように書けばいいのかがわかりません。 どうぞご教授ください。よろしくお願いします。
- 締切済み
- その他(プログラミング・開発)
- C言語で書き込んだファイルの重複行の削除と行の並び変えるプログラミング
C言語で書き込んだファイルの重複行の削除と行の並び変えるプログラミング ファイル名が 0.txt というC言語で書き込んだテキストファイルがあり その中身は以下のようなものとします。 111 000 222 555 000 444 222 000 これらを行ごとに見て重複行を削除し 更に値の小さな順に並び変えたい、つまりファイル内を 000 111 222 444 555 となるようなプログラミングを考えているのですが 調べても分からず悩んでいます。 c言語のプログラム内に UNIXコマンドを扱う方法を考えているのですが c言語内でUNIXコマンドを併用するためのsystem()関数 や 重複行を削除する uniq というUNIXコマンドを どのようにプログラム内に挿入すればいいのでしょうか? ご回答、よろしくお願いいたします。 ちなみに以下のプログラムは system関数が理解できない私の作成失敗したものです。 #include <stdio.h> #include <stdlib.h> int main(void) { system("uniq 0.txt"); }
- ベストアンサー
- C・C++・C#
- ヘッダファイル? malloc.hとかは自分で足したり作ったりできるのでしょうか
CmachineでC言語を勉強していて、メモリの確保までたどり着きました。 でも、プログラムを実行できないんです。調べたところ、malloc.hやmemory.hがCmachineのincludeフォルダに入っていませんでした。 char *b; b = (char *)malloc(sizeof(char)*200); とか書いても実行できませんよね・・・。Cmachineは勉強するのに便利だし、ヘッダファイルを追加できないのでしょうか。includeフォルダにテキストファイルで書いて入れればできそうなのですが。 ちなみに、Visual C++ Express Editionでも同じプログラムを実行したのですが、できませんでした。あれもヘッダファイルが無いとかの問題なのでしょうか。あれは操作が複雑で難しくてよくわかりません。 アドバイスやいい方法をご存知の方、教えてください!!
- ベストアンサー
- C・C++・C#
- linuxからC言語のコンパイラー使えますか?
仕事でunixからC言語のコンパイラーをつかっています。 WindowsXPからC言語となるとすぐVISUALC++を想像してしまい 単純なunixでつかっているようなものが見当たりません。 linuxはつかったことないのですが、unixと似ているとききました。 unixと同じく標準でcコンパイラーは付属しているのでしょうか? ちなみにC言語を使いテキストファイルを編集(並び替えやあるワードの抜き出しやあるワードの置換)するプログラムを組み実行しています。
- ベストアンサー
- Linux系OS
- 閉じてないファイルについて
Visual C++ 2010 Expressで、開いたら閉じなければいけないファイルやハンドルを閉じないでプログラムを終了した場合に、閉じていないファイル名やハンドル名を確認するにはどうすればいいですか? --- 実行環境 --- Microsoft Visual C++ 2010 Express WIN32 ユニコードビルド C言語
- ベストアンサー
- C・C++・C#
- 日本語ファイル名のファイルへのリンクを作るには
日本語ファイル名のファイルへのリンクを作るにはどうすればよいでしょうか? あるディレクトリ(フォルダ)に「日本語ファイル名のファイル」が大量にあります。それらのファイルへのリンクのリストを作りたいのです。 Adobe の PageMill だと、「日本語ファイル名」のファイルへのリンクがうまくいきます。 例えば: 「はじめに.pdf」 は、HTMLのソースで 「1%82%CD%82%B6%82%DF%82%C9.pdf」 のように、「%」から始まる記号に日本語が置き換えられて、ページリンクをマウスでクリックしてもOKです。ですから、できることは確かです。 ただし、100を超えるファイルへのリンクをPageMill で一つ一つ作るのは大変です。 私の環境は、unix の shell、Windows、Windowsのcygwin が使える環境です。
- 締切済み
- HTML
お礼
有り難うございました. 解決しました.