68user's page 掲示板

Prev< No. 2414〜2432> Next  [最新発言に戻る] [過去ログ一覧]
No. 2414 # ぶちお 2002/01/16 (水) 00:22:40
たびたびすいません!!今学校でパソコン同士のデータのやり取りを、Cプログラムでなんとかやろうとしているのですがわからんのですー!先生はfopenとか使えばできるだろー!!というのですが本を見てもかいてないようなかんじで(_m_!)なにしろ未熟者でわからんのですー!よろしければおしえてもらえますか?

No. 2415 # 68user 2002/01/16 (水) 03:52:02
>>2414 ぶちお
> 今学校でパソコン同士のデータのやり取りを、Cプログラムで
> なんとかやろうとしているのですがわからんのですー!
さて困ったものですね。あまりにもひどい質問の仕方です。
    http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse
は読んでいただけましたか?

パソコンって何ですか? UNIX ですか? Windows ですか?
それ以外ですか? 具体的な OS 名とそのバージョンは?

データのやり取りって具体的に何をしようとしていますか?
フロッピーからデータを読み込むことですか? LAN 経由で
ファイルを読むことですか? RS-232C 経由でデータを
やりとりすることですか?

今後、こういう調子の質問を続けるつもりでしたら、僕は
お相手を致しかねますのでよろしく。

No. 2416 # ぶぶ 2002/01/16 (水) 13:47:46
ふくしさん、お返事ありがとうございます。

PPM.pmの1586行目付近は、下のようになっていました。

1577:unless ($PPDfile && $$PPDfile) {
1578: foreach (keys %repositories) {
1579: my $location = $repositories{$_}{'LOCATION'};
1580: if ($location =~ /[^\/]$/) { $location .= "/"; }
1581: $$PPDfile = $location . $package . ".ppd";
1582: return %PPD if (%PPD = getPPDfile('package' => $$PPDfile,
1583: 'parsertype' => $parsertype, 'PPDfile' => \$$PPDfile));
1584: undef $$PPDfile;
1585: }
1586: return unless $$PPDfile;
1587:}

ちょっと違うみたいですよね。こちらの方が行が短いのでしょうか。

ちなみにDOS窓に入力したのは、

C:\>ppm

これだけです。
PPM のシェルでパッケージのinstallをしようと思っているのですが、
とりあえずPPMを起動するため、入力しているのはppmという文字だけ
です。そして、ppmとだけ入力すると、例のエラーが出るのです。
少ない情報ですが、何か分かりますでしょうか?
やはりActivePerlを入れ直してみた方が良いのでしょうか?

よろしくお願いします。

No. 2417 # 68user 2002/01/16 (水) 14:25:46
>>2416 ぶぶ
先ほど、Windows2000 に ActivePerl を入れる必要が
あったので試してみたのですが、ppm とだけ
打つと
    PPM interactive shell ...
と出てエラーは出ませんでした。

インストールしたのは最新の build 631 (perl-5.6.1) です。
再インストールは悪くない選択肢ではないかと思います。

No. 2418 # ふくし 2002/01/16 (水) 14:35:51
>>2416 ぶぶ
さん:

いま会社で ActivePerl の環境がないのでテストできませんが、
>return unless $$PPDfile;
ここで
>>Can't use an undefined value as a SCALAR reference
(スカラーの参照として、未定義値は使えません)
ですよね。

$$PPDFile というのは、
$PPDFile というスカラー変数に
スカラーへの参照(別のモノを指し示すもの)が入っていると考えて、
そのスカラーの値を返そうとしているわけですが、
そのとき $$PPDFile に undef が入っているのでくだんのエラーが
出ています。

たぶん $PPDFile という変数にもっと上の方でスカラーへの参照を
セットすることを期待して動いていたのですが、
その期待が裏切られているようです。

(その上でいろいろしているのも、$$PPDFiles つまり
    $PPDFiles が指し示すスカラーメモリに対してで、
    $PPDFiles にどのような論理で何が入っているかは
    下のコードからは不明です)

・・・という風にさかのぼって研究しても勉強になると思いますが、
(意外ともうちょっとでパキッとわかったりして)
いずれにせよこんなアンフレンドリーなメッセージが出て中断するのは
作者の意図と違う動作なので、再インストールでもいいと思います。

No. 2419 # ぶぶ 2002/01/16 (水) 15:10:06
ふくしさん、68userさん、お返事ありがとうございます。

build631をインストールしてみましたら、何の問題もなくPPMの
シェルが起動しました。

インストールしてから、PPM.pmを覗いてみると、1586付近は、
ふくしさんが書かれたものと同じになっていました。

前に入れていたものがおかしかったのでしょうか。入っている
pmファイルがおかしいとは夢にも思わなかったので再インスト
ールを試さずに質問してしまってごめんなさい。

これでやっとパッケージのinstallができます。ありがとうご
ざいました。

PS.
ふくしさん、エラーに関する説明ありがとうございます。
エラーの出る仕組みがよく分かりました。

No. 2420 # 初心者 2002/01/20 (日) 14:29:35
ボーランドC++コンパイラーでC言語のCGIを作ろうと思っているのですがどうしたら良いのでしょうか?
bcc32 -o CGI名 ソース名 でいけるのでしょうか?
よろしくお願いします

No. 2421 # 68user 2002/01/20 (日) 19:06:19
>>2420 初心者
> …でいけるのでしょうか?
試してみた結果どうなりましたか?

No. 2422 # 橋本 [E-mail] 2002/01/21 (月) 15:31:41
メール受信時に"newaliases"コマンドを実行したいのですが、上手くいきません。

方法としては、特定のアドレスにメールが届いた時点でシェルスクリプトを実行するようエイリアスファイルにて設定しており、シェルスクリプトにはsudoで"newaliases"を実行するよう書いています。
また、sudoersにて"newaliases"コマンドをroot権限で実行できるようにも
設定しています。

"newaliases"コマンドではなく、他のコピーコマンド(cp)などは動作するのですが、"newaliases"コマンドは動作しません。

同じような方法を取られている方がいらっしゃいましたら
設定方法を教えていただけませんでしょうか。
宜しくお願いいたします。

No. 2423 # 橋本 [E-mail] 2002/01/21 (月) 16:41:43
申し訳ありません。環境を全く書いていませんでした。
RedHat Linux7.1.J、Sendmail8.11.5
です。

宜しくお願いします。
本文↓
メール受信時に"newaliases"コマンドを実行したいのですが、上手くいきません。

方法としては、特定のアドレスにメールが届いた時点でシェルスクリプトを実行するようエイリアスファイルにて設定しており、シェルスクリプトにはsudoで"newaliases"を実行するよう書いています。
また、sudoersにて"newaliases"コマンドをroot権限で実行できるようにも
設定しています。

"newaliases"コマンドではなく、他のコピーコマンド(cp)などは動作するのですが、"newaliases"コマンドは動作しません。

No. 2424 # 68user 2002/01/21 (月) 16:58:44
>>2423 橋本
どのユーザが「newaliases を root 権限で実行できる」ような
設定になっていますか?

また、sudo のログには何と記録されていますか?

No. 2425 # 68user 2002/01/21 (月) 17:18:01
>>2424 68user
だけでは情報が不十分かな…。

sudoers に書いた内容と、「特定のメールアドレスにメールが
届いたらコマンドを実行する」というのをどうやって実現して
いるか (/etc/aliases とか /home/foo/.forward とか) も
書いてください。

No. 2426 # 橋本 [E-mail] 2002/01/21 (月) 19:10:37
>>2424 68user
newaliasesをroot権限で実行できるユーザは"deamon"に設定しています。
理由は、メール受信時に実行されるシェルスクリプトが一体どのユーザで
実行されるか分からなかったため、シェルスクリプト内にメールを送信
するコマンドも記述したところ、"deamon"という送信者名でメールを送信
したため、deamonでシェルスクリプトは実行されると思い設定しました。

ですが、実際はdeamonが実行しているようではないようです。
>>2423 にてcpコマンドなど他のコマンドは動作する。
と記述しましたが、私の勘違いで動作していませんでした。
申し訳ありません。

また全てのユーザに"newaliases"、"cp"コマンドをroot権限で
実行できるよう設定したところ、正常に動作しました。
ですが、全てのユーザに許可してしまうわけにはいかないので、
どうにかして特定のユーザにのみ許可して動作するようにしたいのですが
・・・。

以下設定ログ・設定内容です。
●メール受信時のログ↓
Jan 21 18:20:16 test sudo(pam_unix)[19079]: authentication failure; logname= uid=0 euid=0 tty= ruse
r= rhost= user=daemon
Jan 21 18:20:23 test sudo(pam_unix)[19079]: 2 more authentication failures; logname= uid=0 euid=0 t
ty= ruser= rhost= user=daemon
Jan 21 18:20:23 test sudo[19079]: daemon : 3 incorrect password attempts ; TTY=unknown ; PWD=/ ;
USER=root ; COMMAND=/usr/bin/newaliases

●sudoersに追加↓
deamon ALL= NOPASSWD: /usr/bin/newaliases
deamon ALL= NOPASSWD: /bin/cp

●メール受信時に動作するシェルスクリプト↓
#!/bin/sh
sudo cp /etc/mail/123.txt /etc/mail/456.txt
sudo newaliases
mail -s test mailuser@****.co.jp < /etc/mail/456.txt
exit

長文で申し訳ありませんが宜しくお願いします。

No. 2427 # 橋本 [E-mail] 2002/01/21 (月) 19:21:39
>>2425 68user
「特定のメールアドレスにメールが届いたらコマンドを実行する」は、
(/etc/mail/aliases)に mailuser :"|/etc/mail/mail-program"
と記述しています。

よろしくお願いします。

No. 2428 # 68user 2002/01/21 (月) 19:48:29
>>2427 橋本
> ●メール受信時に動作するシェルスクリプト
で /usr/bin/id > /tmp/id.result などとすれば、どの権限で
動いているのかがわかります。

一般的には、/etc/mail/aliases に
    mailuser :"|/etc/mail/mail-program"
とあるなら、/etc/mail/mail-program というファイルの権限で動きます。

例えば
    % ls -l /etc/mail/mail-program
    -rw-r--r-- 1 hoge wheel 46632 Sep 19 02:30 /etc/mail/mail-program
ならば hoge 権限で動く、ということです。

No. 2429 # 橋本 [E-mail] 2002/01/21 (月) 21:31:13
>>2428 ですが、
mail-programの権限は以下のようになっています。↓
-rwxr-xr-x 1 root root 165 1・21 19:55 mail-program

また /usr/bin/id > /tmp/id.resutl の結果は以下になりました。↓
uid=2(daemon) gid=2(daemon) groups=2(daemon),1(bin),4(adm),7(lp)

やはり"deamon"で実行されているようです。sudoresにも正しく設定して
いるつもりなのですが、シェルスクリプトは動作しません。
deamonに関してはsudoが使えないのでしょうか。

何かよい方法ありましたら教えてください。
宜しくお願いします。

No. 2430 # 68user 2002/01/21 (月) 21:34:18
>>2429 橋本
…ふむ。

deamon でなく daemon です。sudoers を修正してみて下さい。

No. 2431 # 橋本 [E-mail] 2002/01/21 (月) 21:52:17
>>2429 橋本

どうもありがとうございます。
deamonではなく"daemon" に修正したところ上手くいきました!

とてもお恥ずかしいですが、すごくうれしかったです。
ありがとうございました。

No. 2432 # ふくし [E-mail] 2002/01/23 (水) 17:20:59
こんにちは。ヒサブリに質問です。

下のような CGI で euc、sjis の文字列をブラウザに表示します。

#! perl -w
# ~/public_html/cgi-bin/moji.cgi

use CGI;
use Jcode;

my $q = CGI->new;
print $q->header();
print $q->start_html();
print $q->start_form(-action=>'./answer.cgi');

$str_euc = 'こんにちは';
$str_sjis = $str_euc;
Jcode::convert(\$str_sjis, 'euc', 'sjis');

print "euc: $str_euc <br>";
print "sjis: $str_sjis <br>";
print "unpacked euc: ".unpack("H10", $str_euc)."<br>";
print "unpacked sjis: ".unpack("H10", $str_sjis)."<br>";
print "eq:".($str_euc eq $str_sjis)."<br>";

コード自体は EUC で書きました。
ブラウザの設定を EUC にすると、
当然のように、EUC 部分は正しく、sjis 部分は文字化けになります。
(本当は sjis 部分は半角カナになりました)

http://www/~fukushi/cgi-bin/moji.cgiの表示)
euc: こんにちは
sjis: 、ウ、・ヲヒ、チ、マ
unpacked euc: a4b3a4f3a4
unpacked sjis: 8ea48eb38e
eq:

これ、ブラウザの設定を sjis にすると、
euc も sjis も文字化けになります。
これはなぜでしょう?

http://www/~fukushi/cgi-bin/moji.cgiの表示)
euc: 、ウ、・ヲヒ、チ、マ
sjis: 痔宍痔・ヲ射痔蔀痔煮
unpacked euc: a4b3a4f3a4
unpacked sjis: 8ea48eb38e
eq:

で、下のように出力する文字列を URL から取得します。

#! perl -w
# ~/public_html/cgi-bin/moji.cgi

use CGI;
use Jcode;

my $q = CGI->new;
print $q->header();
print $q->start_html();
print $q->start_form(-action=>'./answer.cgi');

$str_euc = $q->url_param('greeting');
$str_sjis = $str_euc;
Jcode::convert(\$str_sjis, 'euc', 'sjis');

print "euc: $str_euc <br>";
print "sjis: $str_sjis <br>";
print "unpacked euc: ".unpack("H10", $str_euc)."<br>";
print "unpacked sjis: ".unpack("H10", $str_sjis)."<br>";
print "eq:".($str_euc eq $str_sjis)."<br>";

こうすると、ブラウザの設定を euc にすると、
なんと、euc も sjis も正しく表示されます。

http://www/~fukushi/cgi-bin/moji.cgi?greeting=こんにちは の表示)
euc: こんにちは
sjis: こんにちは
unpacked euc: a4b3a4f3a4
unpacked sjis: 8ea48eb38e
eq:

ブラウザの表示を sjis にすると、euc 部のみ正しく表示されます。

http://www/~fukushi/cgi-bin/moji.cgi?greeting=こんにちは の表示)
http://www/~fukushi/cgi-bin/moji.cgiの表示)
euc: こんにちは
sjis: 、ウ、・ヲヒ、チ、マ
unpacked euc: a4b3a4f3a4
unpacked sjis: 8ea48eb38e
eq:

これはなぜでしょう?
サーバーの OS は FreeBSD 2.2.8-RELEASE、
言語は jperl5.005_03-990612 EUC Version(Latin モードで使用)、
クライアントの OS は Windows 2000 server、
ブラウザーは Netscape Navigator 4.75 です。

Prev< No. 2414〜2432> Next  [最新発言に戻る] [過去ログ一覧]