Discussion:
_sopenに対するWindowsXPと98の違いについての質問です
(too old to reply)
unknown
2010-04-05 14:44:01 UTC
Permalink
WindowsXP pack3がインストールされた
パソコン1とパソコン2があり、互いにLAN回線でつながっています。
それぞれのパソコンにプログラムAとプログラムBがインストールされています。
それぞれのパソコンにフルアクセスの共有フォルダ(hps_data)が設けられ、その下にフォルダ
d_dataとpoboxが設けています。
今パソコン2のプログラムBを起動するとパソコン1のpobox内に書込みができますが
プログラムAを起動するとパソコン1のd_data内に書込みが失敗します。
しかし、Windows98、95で同じテストをするとどちらも成功します。
下記はプログラムのピックアップです
プログアムA
contact_sw = network_conect(excpuname14,"");
if(contact_sw == 0){ exonline_sw = 1;
sprintf(filename,"%s",CUSTIDXF);
set_lanfilename(excpuname14,filename,lanfilename); // コンピュータ名を付加した名前に
excustidx_mashd = _sopen( lanfilename, _O_BINARY | _O_RDWR,_SH_DENYNO );
   // 顧客インデックス
if(excustidx_mashd == -1){ excustidx_mashd = 0; err_sw++; }
  // この行で失敗することは確認済みXP   98、95は成功
プログラムB
contact_sw =
network_conect2(extest_ipadress,extest_username,extest_pasword,0);
// テストデータ送信
cls_str(filename,41); cls_str(lanfilename,81);
sprintf(filename,"%s",TESTLANF2);
set_lanfilename(extest_ipadress,filename,lanfilename); test_hd = 0;
test_hd= _sopen( lanfilename, _O_BINARY | _O_WRONLY | _O_CREAT,_SH_DENYNO,
_S_IWRITE );
// この行は成功する 
if( test_hd == -1){ test_hd = 0; } // 書込失敗

どちらもcontact_swは0でコンタクトは成功しており、唯一の違いは
プログラムAでは書込モードであり、プログラムBでは読書モードでオープンしているだけが
違います。何故XPではこのような違いが出るのか判りません。ご意見を頂ければ幸いです.
UETA, Shin-ichi
2010-04-06 02:42:02 UTC
Permalink
こんにちは、植田です。
Post by unknown
今パソコン2のプログラムBを起動するとパソコン1のpobox内に書込みができますが
プログラムAを起動するとパソコン1のd_data内に書込みが失敗します。
しかし、Windows98、95で同じテストをするとどちらも成功します。
とりあえず、errnoの値を確認してみては?
Post by unknown
どちらもcontact_swは0でコンタクトは成功しており、唯一の違いは
プログラムAでは書込モードであり、プログラムBでは読書モードでオープンしているだけが
違います。
もうひとつ、_O_CREAT の有無にも違いがありますね。

Win9x環境ではたまたま当該ファイルがあったから成功していたとか...?
--
植田システム設計事務所
Ueta System Design Studio
http://www.usdesign.jp/
植田真一
mailto:***@usdesign.jp
unknown
2010-04-06 10:26:01 UTC
Permalink
上田です。返信ありがとうございます。
取りあえず、エラーを探ってみます。
ただ、現在機械は客先で使用中であり、弊社からも1時間離れた距離に
あるため、ある程度準備をした上で行いたいと思います。
 さて、前回の質問が長かったのでヒントになる現象を割愛しましたので
それをお話しします。
パソコン2でパソコン1のデータの内容をLANの下にぶら下がっている
共有フォルダをクリックし、d_dataフォルダー内にあるファイルの内
本体ファイルをメモ帳でオープンしました。(顧客コードが知りたかった
ので)そうした後でプログラムAを起動させたところ、問題なくアクセス
しました。そこで何度かプログラムAを終了させ、再起動させても
問題なくアクセスできました。
 そこで、一旦プログラムAを終了させた上でシャットダウンさせたところ
再びアクセスできなくなりました。
 前回問題個所と指摘した_sopenの所は試しにパソコン1の共有ファルダを
一時的に共有しないと変更して、プログラムAを駆動させたところ、
まったく同じような動きをしたことと、デバックでトレースしたところで
_sopenのところで-1となった事から推定したものです。
これらのヒントから何かわからないでしょうか。
UETA, Shin-ichi
2010-04-06 18:27:27 UTC
Permalink
どうも、植田です。
Post by unknown
 そこで、一旦プログラムAを終了させた上でシャットダウンさせたところ
再びアクセスできなくなりました。
_sopen() よりも network_conect() の方に何か問題があるような...?

network_conect() では共有フォルダにアクセスするための条件が
整っておらず、エクスプローラで共有フォルダを開いたことによって、
その時点でようやく条件が整った可能性も考えられますけど...。

「プログラムB」では network_conect2() という異なる(?)関数で
接続しているようですから、それぞれの処理内容を比べてみては?
「プログラムA」の network_conect() では何かしら接続の条件が
違っているために、十分なアクセス権が与えられていないのかも
しれませんよ。
--
植田システム設計事務所
Ueta System Design Studio
http://www.usdesign.jp/
植田真一
mailto:***@usdesign.jp
unknown
2010-04-07 03:31:02 UTC
Permalink
上田です。

ありがとうございます。
Post by UETA, Shin-ichi
_sopen() よりも network_conect() の方に何か問題があるような...?
そうですね。もう一度見直して見ます。灯台下暗しと言うことも
ありますから。
unknown
2010-04-08 15:08:02 UTC
Permalink
植田さん、ありがとうございました。
上田です。

本日、客先に無理を言って営業終了後現場に残してもらって持ち込んだ
ノートパソコンを使い、プログラムをトレースしながら、原因を追究する時間を
得ました。
Post by UETA, Shin-ichi
_sopen() よりも network_conect() の方に何か問題があるような...?
network_conect() では共有フォルダにアクセスするための条件が
整っておらず、エクスプローラで共有フォルダを開いたことによって、
その時点でようやく条件が整った可能性も考えられますけど...。
その結果、やはり植田さんの言ったnetconectのプログラムに
修正を加えて正常にファイルの読み込みができるようになりました。
ありがとうございました。
network_conect(excpuname14,"ohsaka");

原因はXPのインストールの違いにありました。
納入した機械は3台あり、共XPのPack3であることは同じですが
問題のパソコンと後2台のパソコンの納入時期が連れたため、
管理者としてのユーザー名が異なってしまったことに遠因がありました。
最初の名前が例えばohsakaとすると2台目以降の機械はAdministratorと
なっていたためです。XPは単なるOSとしたか使用しませんので
電源スイッチONでプログラムが自動立ち上げになり、
終わると電源が自動的に落ちることが前提となっています。
 この状態で、短いファイルの書込みは相互に可能で問題なかったし、時々は
読み込みも成功していたのでまさかユーザー名が引っ掛かるとは
思いもしませんでした。この結果から考えると、Administratorのままなら
機械が自動的にユーザー名を送付しなくてもAdministratorと推定して
うまく取り扱いしてくれたと想像します。これが何故だかohsakaになって
いたためにユーザー名がないので、ohsakaとはしてくれなかったのでは
ないかと思います。それにしても、書込モードがOKで読書がだめだなんて
ちょっと考えられません。というのも、Windows系では書込モードだけを
指定しても読み込みも含まれることだったはず。こうした振る舞いに
振り回されることになったからです。

/***********************
堺市南区原山台
上田 恭平
E_Mail ***@sannet.ne.jp
************************/
unknown
2010-04-12 02:16:01 UTC
Permalink
植田さん。

上田です。
先にユーザー名がadministratorならユーザー名は要らないと
書きましたが間違いでした。確認した所3台共別のユーザー名
を設定していました。すみません、早とちりでした。
早とちりのついでですが、M社のONLINEにはユーザー名を
訂正するにはレジストリーを書き換えなければ出来ないような
記述がありましたが、Pack3では簡単に出来るようです。これを
利用してユーザー名の変更ができました。
その条件でテストしたところ、アクセスはPack2のパソコンから
ですが、同じPack3のパソコンでもユーザー名があると
逆にアクセスに問題が起こりました。何れも読書モードでオープン
すると問題が起こるのですが、書込オンリーのモードでオープン
するとアクセスできます。それでいよいよ訳が判らなくなりました。
多分、アクセス問題があった時にPCメーカーの指示であちこち
変更したことに原因あるのかも知れません。それしか思い付きません。
一応3台共同じ変更したと考えていますが、その違いは不明です。
Loading...