الاسم
- Provided by: manpages-ar (Version: 4.31.0-1)
- Source: manpages-l10n
- Report a bug
#include <linux/loop.h>
جهاز loop هو جهاز كتلي يربط كتل بياناته ليس بجهاز مادي مثل القرص الصلب أو محرك الأقراص الضوئية، بل بكتل ملف عادي في نظام ملفات أو بجهاز كتلي آخر. يمكن أن يكون هذا مفيدًا على سبيل المثال لتوفير جهاز كتلي لصورة نظام ملفات مخزنة في ملف، بحيث يمكن وصلها باستخدام الأمر mount(8). يمكنك القيام بما يلي
$ dd if=/dev/zero of=file.img bs=1MiB count=10; $ sudo losetup /dev/loop4 file.img; $ sudo mkfs -t ext4 /dev/loop4; $ sudo mkdir /myloopdev; $ sudo mount /dev/loop4 /myloopdev;
انظر losetup(8) لمثال آخر.
يمكن تحديد دالة نقل لكل جهاز loop لأغراض التعمية وفك التعمية.
تُوفر عمليات ioctl(2) التالية بواسطة جهاز loop الكتلي:
struct loop_info {
int lo_number; /* ioctl r/o */
dev_t lo_device; /* ioctl r/o */
unsigned long lo_inode; /* ioctl r/o */
dev_t lo_rdevice; /* ioctl r/o */
int lo_offset;
int lo_encrypt_type;
int lo_encrypt_key_size; /* ioctl w/o */
int lo_flags; /* ioctl r/w (r/o قبل
لينكس 2.6.25) */
char lo_name[LO_NAME_SIZE];
unsigned char lo_encrypt_key[LO_KEY_SIZE];
/* ioctl w/o */
unsigned long lo_init[2];
char reserved[4];
};
struct loop_config {
__u32 fd;
__u32 block_size;
struct loop_info64 info;
__u64 __reserved[8];
};
منذ لينكس 2.6، توجد عمليتا ioctl(2) جديدتان:
struct loop_info64 {
uint64_t lo_device; /* ioctl r/o */
uint64_t lo_inode; /* ioctl r/o */
uint64_t lo_rdevice; /* ioctl r/o */
uint64_t lo_offset;
uint64_t lo_sizelimit; /* بايت، 0 == أقصى متاح */
uint32_t lo_number; /* ioctl r/o */
uint32_t lo_encrypt_type;
uint32_t lo_encrypt_key_size; /* ioctl w/o */
uint32_t lo_flags; i /* ioctl r/w (r/o قبل
لينكس 2.6.25) */
uint8_t lo_file_name[LO_NAME_SIZE];
uint8_t lo_crypt_name[LO_NAME_SIZE];
uint8_t lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
uint64_t lo_init[2];
};
منذ لينكس 3.1، تُوفر النواة جهاز /dev/loop-control، الذي يسمح للتطبيق بالعثور ديناميكيًا على جهاز حر، وإضافة أجهزة loop وإزالتها من النظام. للقيام بهذه العمليات، يفتح المرء أولاً /dev/loop-control ثم يستخدم إحدى عمليات ioctl(2) التالية:
يستخدم البرنامج أدناه جهاز /dev/loop-control للعثور على جهاز loop حر، ويفتح جهاز loop، ويفتح ملفًا ليُستخدم كمخزن أساسي للجهاز، ثم يربط جهاز loop بالمخزن الخلفي. توضح جلسة الصدفة التالية استخدام البرنامج:
$ dd if=/dev/zero of=file.img bs=1MiB count=10; 10+0 سجلات للداخل 10+0 سجلات للخارج 10485760 بايت (10 ميجابايت) نُسخت، 0.00609385 ثانية، 1.7 جيجابايت/ثانية $ sudo ./mnt_loop file.img; loopname = /dev/loop5
#include <err.h>
#include <fcntl.h>
#include <linux/loop.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int
main(int argc, char *argv[])
{
int loopctlfd, loopfd, backingfile;
long devnr;
char loopname[4096];
if (argc != 2) {
fprintf(stderr, "الاستخدام: %s backing-file\n", argv[0]);
exit(EXIT_FAILURE);
}
loopctlfd = open("/dev/loop-control", O_RDWR);
if (loopctlfd == -1)
err(EXIT_FAILURE, "فتح: /dev/loop-control");
devnr = ioctl(loopctlfd, LOOP_CTL_GET_FREE);
if (devnr == -1)
err(EXIT_FAILURE, "ioctl-LOOP_CTL_GET_FREE");
sprintf(loopname, "/dev/loop%ld", devnr);
printf("loopname = %s\n", loopname);
loopfd = open(loopname, O_RDWR);
if (loopfd == -1)
err(EXIT_FAILURE, "فتح: loopname");
backingfile = open(argv[1], O_RDWR);
if (backingfile == -1)
err(EXIT_FAILURE, "فتح: backing-file");
if (ioctl(loopfd, LOOP_SET_FD, backingfile) == -1)
err(EXIT_FAILURE, "ioctl-LOOP_SET_FD");
exit(EXIT_SUCCESS);
}
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.