.\" -*- coding: UTF-8 -*- .\" Copyright 2011, Christopher Yeoh .\" Copyright 2012, Mike Frysinger .\" Copyright 2012, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Commit fcf634098c00dd9cd247447368495f0b79be12d1 .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH process_vm_readv 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم process_vm_readv, process_vm_writev \- نقل البيانات بين مساحات عناوين العمليات .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBssize_t process_vm_readv(pid_t \fP\fIpid\fP\fB,\fP \fB const struct iovec *\fP\fIlocal_iov\fP\fB,\fP \fB unsigned long \fP\fIliovcnt\fP\fB,\fP \fB const struct iovec *\fP\fIremote_iov\fP\fB,\fP \fB unsigned long \fP\fIriovcnt\fP\fB,\fP \fB unsigned long \fP\fIflags\fP\fB);\fP \fBssize_t process_vm_writev(pid_t \fP\fIpid\fP\fB,\fP \fB const struct iovec *\fP\fIlocal_iov\fP\fB,\fP \fB unsigned long \fP\fIliovcnt\fP\fB,\fP \fB const struct iovec *\fP\fIremote_iov\fP\fB,\fP \fB unsigned long \fP\fIriovcnt\fP\fB,\fP \fB unsigned long \fP\fIflags\fP\fB);\fP .fi .P .RS -4 متطلبات ماكروات اختبار الميزات لـ glibc (انظر \fBfeature_test_macros\fP(7)): .RE .P \fBprocess_vm_readv\fP(), \fBprocess_vm_writev\fP(): .nf _GNU_SOURCE .fi .SH الوصف تنقل استدعاءات النظام هذه البيانات بين مساحة عنوان العملية المستدعية ("العملية المحلية") والعملية المحددة بواسطة \fIpid\fP ("العملية البعيدة"). تتحرك البيانات مباشرة بين مساحتي عنوان العمليتين، دون المرور عبر مساحة النواة. .P ينقل استدعاء النظام \fBprocess_vm_readv\fP() البيانات من العملية البعيدة إلى العملية المحلية. تُحدد البيانات المراد نقلها بواسطة \fIremote_iov\fP و \fIriovcnt\fP: \fIremote_iov\fP مؤشر لمصفوفة تصف نطاقات العناوين في العملية \fIpid\fP، ويحدد \fIriovcnt\fP عدد العناصر في \fIremote_iov\fP. تُنقل البيانات إلى المواقع المحددة بواسطة \fIlocal_iov\fP و \fIliovcnt\fP: \fIlocal_iov\fP مؤشر لمصفوفة تصف نطاقات العناوين في العملية المستدعية، ويحدد \fIliovcnt\fP عدد العناصر في \fIlocal_iov\fP. .P استدعاء النظام \fBprocess_vm_writev\fP() هو عكس \fBprocess_vm_readv\fP()\[em]ينقل البيانات من العملية المحلية إلى العملية البعيدة. بصرف النظر عن اتجاه النقل، فإن الوسائط \fIliovcnt\fP و \fIlocal_iov\fP و \fIriovcnt\fP و \fIremote_iov\fP لها نفس المعنى كما في \fBprocess_vm_readv\fP(). .P تشير الوسيطتان \fIlocal_iov\fP و \fIremote_iov\fP إلى مصفوفة من بنى \fIiovec\fP، الموصوفة في \fBiovec\fP(3type). .P تُعالج المخازن المؤقتة بترتيب المصفوفة. يعني هذا أن \fBprocess_vm_readv\fP() يملأ \fIlocal_iov[0]\fP بالكامل قبل الانتقال إلى \fIlocal_iov[1]\fP، وهكذا. وبالمثل، يُقرأ \fIremote_iov[0]\fP بالكامل قبل الانتقال إلى \fIremote_iov[1]\fP، وهكذا. .P وبالمثل، يكتب \fBprocess_vm_writev\fP() المحتوى الكامل لـ \fIlocal_iov[0]\fP قبل الانتقال إلى \fIlocal_iov[1]\fP، ويملأ \fIremote_iov[0]\fP بالكامل قبل الانتقال إلى \fIremote_iov[1]\fP. .P لا يجب أن تكون أطوال \fIremote_iov[i].iov_len\fP و \fIlocal_iov[i].iov_len\fP متساوية. وبالتالي، من الممكن تقسيم مخزن محلي واحد إلى مخازن بعيدة متعددة، أو العكس. .P الوسيطة \fIflags\fP غير مستخدمة حالياً ويجب ضبطها على 0. .P .\" In time, glibc might provide a wrapper that works around this limit, .\" as is done for readv()/writev() يجب أن تكون القيم المحددة في الوسيطتين \fIliovcnt\fP و \fIriovcnt\fP أقل من أو تساوي \fBIOV_MAX\fP (المعرفة في \fI\fP أو القابلة للوصول عبر الاستدعاء \fIsysconf(_SC_IOV_MAX)\fP). .P تُفحص وسيطات العد و \fIlocal_iov\fP قبل إجراء أي عمليات نقل. إذا كانت الأعداد كبيرة جداً، أو كان \fIlocal_iov\fP غير صالح، أو كانت العناوين تشير إلى مناطق لا يمكن للعملية المحلية الوصول إليها، فلن تُعالج أي من المتجهات وسيُعاد خطأ فوراً. .P لاحظ، مع ذلك، أن استدعاءات النظام هذه لا تفحص مناطق الذاكرة في العملية البعيدة إلا قبل القيام بالقراءة/الكتابة مباشرة. وبالتالي، قد ينتج قراءة/كتابة جزئية (انظر قيمة الإرجاع) إذا كان أحد عناصر \fIremote_iov\fP يشير إلى منطقة ذاكرة غير صالحة في العملية البعيدة. لن تُجرى محاولات قراءة/كتابة إضافية بعد تلك النقطة. ضع هذا في الاعتبار عند محاولة قراءة بيانات ذات طول غير معروف (مثل سلاسل C المنتهية بقيمة فارغة) من عملية بعيدة، بتجنب امتداد صفحات الذاكرة (عادةً 4\ KiB) في عنصر \fIiovec\fP بعيد واحد. (بدلاً من ذلك، قسم القراءة البعيدة إلى عنصري \fIremote_iov\fP واجعلها تندمج مرة أخرى في إدخال \fIlocal_iov\fP واحد للكتابة. يصل إدخال القراءة الأول إلى حد الصفحة، بينما يبدأ الثاني على حد الصفحة التالي.) .P يُحكم الإذن بالقراءة من أو الكتابة إلى عملية أخرى بواسطة فحص وضع الوصول ptrace \fBPTRACE_MODE_ATTACH_REALCREDS\fP؛ انظر \fBptrace\fP(2). .SH "قيمة الإرجاع" عند النجاح، يُرجع \fBprocess_vm_readv\fP() عدد البايتات المقروءة ويُرجع \fBprocess_vm_writev\fP() عدد البايتات المكتوبة. قد تكون قيمة الإرجاع هذه أقل من إجمالي عدد البايتات المطلوبة، إذا حدثت قراءة/كتابة جزئية. (تنطبق عمليات النقل الجزئية على دقة عناصر \fIiovec\fP. لن تؤدي استدعاءات النظام هذه عملية نقل جزئية تقسم عنصر \fIiovec\fP واحد.) يجب على المستدعي التحقق من قيمة الإرجاع لتحديد ما إذا حدثت قراءة/كتابة جزئية. .P عند حدوث خطأ، يُرجع \-1 ويُضبط \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEFAULT\fP الذاكرة الموصوفة بواسطة \fIlocal_iov\fP خارج مساحة العنوان القابلة للوصول للمستدعي. .TP \fBEFAULT\fP الذاكرة الموصوفة بواسطة \fIremote_iov\fP خارج مساحة العنوان القابلة للوصول للعملية \fIpid\fP. .TP \fBEINVAL\fP مجموع قيم \fIiov_len\fP إما لـ \fIlocal_iov\fP أو \fIremote_iov\fP يفيض قيمة \fIssize_t\fP. .TP \fBEINVAL\fP \fIflags\fP ليست 0. .TP \fBEINVAL\fP \fIliovcnt\fP أو \fIriovcnt\fP كبير جداً. .TP \fBENOMEM\fP تعذر تخصيص ذاكرة للنسخ الداخلية لهياكل \fIiovec\fP. .TP \fBEPERM\fP ليس لدى المستدعي الإذن للوصول إلى مساحة عنوان العملية \fIpid\fP. .TP \fBESRCH\fP لا توجد عملية بالمعرف \fIpid\fP. .SH المعايير لينكس. .SH التاريخ لينكس 3.2، glibc 2.15. .SH ملاحظات عمليات نقل البيانات التي ينفذها \fBprocess_vm_readv\fP() و \fBprocess_vm_writev\fP() ليست مضمونة لتكون ذرية بأي شكل. .P .\" Original user is MPI, http://www.mcs.anl.gov/research/projects/mpi/ .\" See also some benchmarks at http://lwn.net/Articles/405284/ .\" and http://marc.info/?l=linux-mm&m=130105930902915&w=2 صُممت استدعاءات النظام هذه للسماح بتمرير الرسائل السريع من خلال السماح بتبادل الرسائل بعملية نسخ واحدة (بدلاً من النسخ المزدوج الذي سيكون مطلوباً عند استخدام، على سبيل المثال، الذاكرة المشتركة أو الأنابيب). .SH أمثلة يوضح نموذج الكود التالي استخدام \fBprocess_vm_readv\fP(). يقرأ 20 بايت عند العنوان 0x10000 من العملية ذات PID 10 ويكتب أول 10 بايتات في \fIbuf1\fP والـ 10 بايتات الثانية في \fIbuf2\fP. .P .\" SRC BEGIN (process_vm_readv.c) .EX #define _GNU_SOURCE #include #include #include \& int main(void) { char buf1[10]; char buf2[10]; pid_t pid = 10; /* PID of remote process */ ssize_t nread; struct iovec local[2]; struct iovec remote[1]; \& local[0].iov_base = buf1; local[0].iov_len = 10; local[1].iov_base = buf2; local[1].iov_len = 10; remote[0].iov_base = (void *) 0x10000; remote[0].iov_len = 20; \& nread = process_vm_readv(pid, local, 2, remote, 1, 0); if (nread != 20) exit(EXIT_FAILURE); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "انظر أيضًا" \fBreadv\fP(2), \fBwritev\fP(2) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .