/ dev / tcp লিনাক্সে উপস্থিত নেই


9

আমি ইউনিক্স থেকে লিনাক্সে সি / প্রো * সি কোড পোর্ট করছি। কোডটি হ'ল:

#define __NFDBIT       (8 * sizeof(unsigned long))
#define __FD_SETSIZ    1024
#define __FDSET_LONG   (__FD_SETSIZ/__NFDBIT)
typedef struct {
    unsigned long fds_bits [__FDSET_LONG];
} __ernel_fd_set;

typedef __ernel_fd_set           fd_set_1;
int main()
{
    fd_set_1 listen_set;
    int listen_sd;
    int socket_id;
    FD_ZERO(&listen_set);
    socket_id = t_open("/dev/tcp", O_RDWR|O_NONBLOCK, (struct t_info *) 0);
    if ( socket_id <0 )
    {
        exit(FAILURE);
    }
    return 0;
}

ইউনিক্সে সকেট_আইডির মান > 0লিনাক্সে -1। কারণ ইউনিক্সে রয়েছে, একটি আছে /dev/tcp। এটি লিনাক্সে উপস্থিত নেই। ইউনিক্সেও এই tcpফাইলটি চরিত্রের বিশেষ ফাইল যা সাধারণ ফাইল থেকে পৃথক।

ইউনিক্সের মতো লিনাক্সেও একই চরিত্রের বিশেষ ফাইল তৈরি করার কোনও উপায় আছে বা কীভাবে এটি আরও এগিয়ে নেওয়া যায়?


5
আপনি বার্কলে সকেট / পসিক্স সকেট ব্যবহার না করার কোনও কারণ আছে কি ?
জোফেল

হ্যাঁ জোফেল সেক্ষেত্রে আমার প্রচুর পরিমাণে বিদ্যমান কোডটি পরিবর্তন করতে হবে যা সম্ভবপর নয়। আমি লিনাক্সে / dev / tcp প্রতিস্থাপনের জন্য বা এটি ইউনিক্সের মতো কাজ করার জন্য লিনাক্সে কীভাবে তৈরি করা উচিত তা সন্ধান করছি। ইউনিক্সে / dev / tcp সম্পর্কিত তথ্য নীচে দেওয়া হয়েছে।
মিসিংসেমিকন

1
আপনি কিভাবে আপনার সফ্টওয়্যারটি সংকলন করবেন? লিনাক্স-এ এএফআইকে, এক্সটিআই / টিএলআই কেবলমাত্র ওপেনএসএস 7 থেকে লিনাক্স ফাস্ট স্ট্রিমের মতো বা আইবিসিএসের মতো এমুলেটরগুলির মতো কিছু অতিরিক্ত লাইব্রেরি দ্বারা সমর্থিত । লিনাক্সে সহজভাবে / dev / tcp তৈরি করার কোনও উপায় নেই। আপনি ব্যাশ থেকে / dev / tcp ব্যবহার করতে পারেন তবে এই ক্ষেত্রে এটি কেবল একটি প্রতিলিপি যা ব্যাশকে একটি টিসিপি সকেট খুলতে বলে। ডিভাইসটি আসলে উপস্থিত নেই।
জোফেল

cc tet.o -o test-L $ ORACLE_HOME / lib64 -lxnet বাইনারি ফাইল টেস্ট কার্যকর করা হয়েছে mknod tcp c <x> <y> কমান্ড ব্যবহার করে / dev এর অধীনে অক্ষর ফাইল tcp তৈরি করার একটি উপায় রয়েছে। ইউনিক্সে টিসিপি-র জন্য ডিভাইসের এন্ট্রিগুলি 42,2। এটি ফাইল কমান্ড (ফাইল / ডিভ / টিসিপি) "অক্ষর বিশেষ (42/2)" দেখায় যেখানে x = 42 এবং y = 2 2 তবে একই এন্ট্রিগুলির সাথে আমি লিনাক্সে এমকেএনড টিসিপি সি 42 হিসাবে তৈরি করেছি 2. 2.again সকেট_আইডি -1। এখানে সমস্যাটি হল লিনাক্স ব্যবহারের জন্য ডিভাইস এন্ট্রি।
মিসিংসেমিকলন

1
@ সিমিলভুফ নোড তৈরি করা যথেষ্ট নয়, কার্নেলের মধ্যে কারও অবশ্যই দায়বদ্ধ হতে হবে - এটি লিনাক্সের অধীনে নয়।
glglgl

উত্তর:


18

t_open()এবং এর সম্পর্কিত /dev/tcpএবং এগুলি টিএলআই / এক্সটিআই ইন্টারফেসের অংশ , যা বিএসডি সকেটে টিসিপি / আইপি এপিআইয়ের জন্য লড়াইটি হারিয়েছে।

লিনাক্সে, বিভিন্ন /dev/tcpধরণের রয়েছে। এটি আসল ফাইল বা কার্নেল ডিভাইস নয়। এটি বাশ দ্বারা বিশেষত সরবরাহ করা কিছু এবং এটি কেবল পুনঃনির্দেশের জন্যই বিদ্যমান। এর অর্থ হ'ল যদি কেউ কার্নেল-ইন-কার্নেল /dev/tcpসুবিধা তৈরি করতে থাকে তবে এটি শেল দ্বারা 99% [*] ইন্টারেক্টিভ ব্যবহারে মুখোশযুক্ত হবে।

সর্বোত্তম সমাধানটি হ'ল বিএসডি সকেটে স্যুইচ করা। দুঃখিত।

আপনি strxnet এক্সটিআই এমুলেশন স্তরটি কাজ করতে সক্ষম হতে পারেন তবে আপনি এক্সটিআই থেকে বেরিয়ে আসার পক্ষে নিজের সময়কে আরও ভাল করবেন। এটি একটি মৃত API, কেবল লিনাক্স নয়, ওএস এক্স সহ বিএসডিগুলিতেও অসমর্থিত

(যাইহোক, স্ট্রক্সনেট লাইব্রেরি এমনকি বিএসডিগুলিতে তৈরি করবে না, কারণ এটি লিনাক্স কার্নেলের একটি উপাদান লিএসের উপর নির্ভর করে । এটি configureস্টক বিএসডি বা ওএস এক্স সিস্টেমের উপর নির্ভর করবে না , সম্ভবত এটি কারণ এটিও নির্ভর করে জিএনইউ সেড।)

[*] আমি এই বুনো অনুমানকে এই ভিত্তিতে ভিত্তি করেছিলাম যে আমার ব্যবহৃত সমস্ত লিনাক্স ডিস্ট্রোজে নন-রুট ব্যবহারকারীদের জন্য ব্যাশই ডিফল্ট শেল। বাশ ব্যতীত অন্য কিছু পাওয়ার জন্য আপনাকে বিধি হিসাবে লিনাক্সের বাইরে যেতে হবে।


ওয়ারেন আপনার ইনপুট জন্য ধন্যবাদ। দুঃখিত আমি এই সকেট প্রোগ্রামিং এবং এপিআই ধারণাগুলিতে খুব নতুন new আমার প্রশ্নগুলির সাথে খালি দয়া করে। "আরআরএক্সএনটি এক্সটিআই এমুলেশন ল্যাটিয়ার" বলতে কী বোঝায় আমরা সম্প্রতি কিছু ওপেনএস libra লাইব্রেরি / হেডফায়াইলস পাওয়ার জন্য strxnet (strxnet-0.9.2.10.tar) এর একটি প্যাকেজ ইনস্টল করেছি that এর সাথে আরও কী করতে পারি?
12'টি

আমি নিজে এটি কখনও ব্যবহার করি নি, তবে টার্বলটির তাত্ক্ষণিক পরীক্ষা থেকে দেখে মনে হচ্ছে এটি একবার ইনস্টল হয়ে গেলে এটি একটি এক্সটিআই এমুলেশন স্তর সরবরাহ করে। আপনি শুধু সঙ্গে এটি আপনার কম্পাইলার বাতলান করতে সক্ষম হওয়া উচিত -Iএবং -Lপতাকা এবং কাজ করার জন্য এটি আশা। তবে যদি তা না হয় তবে আমি এটিতে প্রচুর সময় নিক্ষেপ করব না।
ওয়ারেন ইয়ং

আমি -I এবং -L সম্পর্কে জানি যা যথাক্রমে শিরোনাম / গ্রন্থাগার অন্তর্ভুক্ত করা হয়। তবে এখানে -I / -L দিয়ে আমাকে ঠিক কী করতে হবে? আমার প্রশ্নটি যদি ভুল হয় তবে আবার দুঃখিত
মিসিংসেমিকন

1
প্যাকেজটি ফাইলগুলি কোথায় ইনস্টল করেছে তার উপর এটি নির্ভর করে। লাইব্রেরির ফাইলটি সন্ধান করুন libstrxnet.so.*:: ডিরেক্টরিটি আপনি যা পাস করেন তা -L। সন্ধান করুন xti.h: ডিরেক্টরিটি পাস করুন -I-lstrxnetআপনারও ন্যূনতম প্রয়োজন হবে । নীচের লাইন: strxnet ডক্স দেখুন।
ওয়ারেন ইয়ং

ওয়ারেন, সংকলনের সময় আমি এটাই করেছি। পূর্ববর্তী আদেশে আমি যে পদক্ষেপগুলি দিয়েছি তা দয়া করে দেখুন। এই লাইব্রেরিতে t_open () ফাংশন রয়েছে। তবে সমস্যাটি এই ফাংশনটির সাথে নয়। সমস্যাটি / dev / tcp এর সাথে রয়েছে যা টি_পেন খোলার চেষ্টা করছে।
মিসিংসেমিকলন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.