سؤال

أحتاج إلى الحصول على واصف الملف لاستخدامه في IOCTL () يدعو إلى منفذ Ethernet في Linux. غير متأكد من كيفية القيام بذلك.

هل كانت مفيدة؟

المحلول

ما عليك سوى استخدام واصف الملف الخاص بمقبس مفتوح ، باستخدام اسم الجهاز في ifreq تم تمرير الهيكل إلى ioctl(), ، على افتراض أن برنامجك لديه أذونات كافية للقيام بذلك.

من المستندات:

يدعم Linux بعض IOCTLs القياسية لتكوين أجهزة الشبكة. يمكن استخدامها على واصف ملف المقبس بغض النظر عن الأسرة أو النوع. يمرون بنية IFREQ:

لا يلزم أن يكون المقبس ملزماً بالجهاز المستهدف ، أو يكون من أي عائلة محددة. أي مقبس مفتوح سيفعله (مرة أخرى ، مع امتيازات مناسبة) ، فقط افتح واحدة لمهمتك المحددة ، انتظر ioctl() للعودة وإغلاقه.

نرى man 7 netdevice لمزيد من هنا إذا لم يكن لديك حزم الوثائق المناسبة المثبتة (تلميح ، يتم تسمية الحزمة عادة manpages-dev أو manpages-devel, ، اعتمادا على توزيعي)

يمكنك أيضًا إلقاء نظرة على المصدر إلى net-tools الحزمة ، والتي يمكن تسميتها بشكل مختلف اعتمادا على التوزيعات الخاصة بك. هذا هو المصدر ifconfig (دبيان / أوبونتو هنا).

آسف على الغموض الأصلي ، اعتقدت أنك تحاول تكوين جهاز خاص متعدد الوظائف (لست متأكدًا من السبب الآن ، وربما قلة النوم).

نصائح أخرى

يمكنك أن تفعل شيئًا كهذا fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)

يستخدم strace لمعرفة ما هي الوظائف ifconfig المكالمات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top