.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1995, Mark D. Roth .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH getutent 3 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم getutent, getutid, getutline, pututline, setutent, endutent, utmpname \- الوصول إلى مدخلات ملف utmp .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBstruct utmp *getutent(void);\fP \fBstruct utmp *getutid(const struct utmp *\fP\fIut\fP\fB);\fP \fBstruct utmp *getutline(const struct utmp *\fP\fIut\fP\fB);\fP .P \fBstruct utmp *pututline(const struct utmp *\fP\fIut\fP\fB);\fP .P \fBvoid setutent(void);\fP \fBvoid endutent(void);\fP .P \fBint utmpname(const char *\fP\fIpath\fP\fB);\fP .fi .SH الوصف يجب على التطبيقات الجديدة استخدام إصدارات "utmpx" المحددة بواسطة POSIX.1 من هذه الدوال؛ انظر المعايير. .P تضبط \fButmpname\fP() اسم مسار ملف تنسيق utmp لدوال utmp الأخرى للوصول إليه. إذا لم تُستخدم \fButmpname\fP() لضبط اسم المسار قبل استخدام الدوال الأخرى، فإنها تفترض \fB_PATH_UTMP\fP، كما هو معرف في \fI\fP. .P تعيد \fBsetutent\fP() مؤشر الملف إلى بداية ملف utmp. من الجيد عمومًا استدعاؤها قبل أي من الدوال الأخرى. .P تغلق \fBendutent\fP() ملف utmp. يجب استدعاؤها عندما ينتهي كود المستخدم من الوصول إلى الملف باستخدام الدوال الأخرى. .P تقرأ \fBgetutent\fP() سطرًا من موضع الملف الحالي في ملف utmp. تُرجع مؤشرًا إلى بنية تحتوي على حقول السطر. يظهر تعريف هذه البنية في \fButmp\fP(5). .P تبحث \fBgetutid\fP() للأمام من موضع الملف الحالي في ملف utmp بناءً على \fIut\fP. إذا كان \fIut\->ut_type\fP واحدًا من \fBRUN_LVL\fP أو \fBBOOT_TIME\fP أو \fBNEW_TIME\fP أو \fBOLD_TIME\fP، فستجد \fBgetutid\fP() أول مدخل يتطابق حقل \fIut_type\fP فيه مع \fIut\->ut_type\fP. إذا كان \fIut\->ut_type\fP واحدًا من \fBINIT_PROCESS\fP أو \fBLOGIN_PROCESS\fP أو \fBUSER_PROCESS\fP أو \fBDEAD_PROCESS\fP، فستجد \fBgetutid\fP() أول مدخل يتطابق حقل \fIut_id\fP فيه مع \fIut\->ut_id\fP. .P تبحث \fBgetutline\fP() للأمام من موضع الملف الحالي في ملف utmp. تفحص المدخلات التي يكون \fIut_type\fP فيها \fBUSER_PROCESS\fP أو \fBLOGIN_PROCESS\fP وتُعيد أول مدخل يتطابق حقل \fIut_line\fP فيه مع \fIut\->ut_line\fP. .P تكتب \fBpututline\fP() بنية \fIutmp\fP \fIut\fP في ملف utmp. تستخدم \fBgetutid\fP() للبحث عن المكان المناسب في الملف لإدراج المدخل الجديد. إذا لم تجد فتحة مناسبة لـ \fIut\fP، فستلحق \fBpututline\fP() المدخل الجديد بنهاية الملف. .SH "قيمة الإرجاع" تُعيد \fBgetutent\fP() و \fBgetutid\fP() و \fBgetutline\fP() مؤشرًا إلى \fIstruct\ utmp\fP عند النجاح، و NULL عند الفشل (والذي يتضمن حالة "السجل غير موجود"). تُخصص هذه \fIstruct\ utmp\fP في تخزين ثابت، وقد تُستبدل باستدعاءات لاحقة. .P عند النجاح، تُعيد \fBpututline\fP() \fIut\fP؛ عند الفشل، تُعيد NULL. .P تُعيد \fButmpname\fP() 0 إذا خُزن الاسم الجديد بنجاح، أو \-1 عند الفشل. .P عند الفشل، تضبط هذه الدوال \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBENOMEM\fP نفدت الذاكرة. .TP \fBESRCH\fP السجل غير موجود. .P يمكن أن تفشل \fBsetutent\fP() و \fBpututline\fP() ودوال \fBgetut*\fP() أيضًا للأسباب الموصوفة في \fBopen\fP(2). .SH الملفات .TP \fI/var/run/utmp\fP قاعدة بيانات المستخدمين المسجلين حاليًا .TP \fI/var/log/wtmp\fP قاعدة بيانات لعمليات تسجيل دخول المستخدمين السابقة .SH السمات للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر \fBattributes\fP(7). .TS allbox; lb lb lbx l l l. الواجهة السمة القيمة T{ .na .nh \fBgetutent\fP() T} سلامة الخيوط T{ .na .nh MT\-Unsafe init race:utent race:utentbuf sig:ALRM timer T} T{ .na .nh \fBgetutid\fP(), \fBgetutline\fP() T} سلامة الخيوط T{ .na .nh MT\-Unsafe init race:utent sig:ALRM timer T} T{ .na .nh \fBpututline\fP() T} سلامة الخيوط T{ .na .nh غير آمن للمسارات المتعددة (MT\-Unsafe) سباق:utent إشارة:ALRM مؤقت T} T{ .na .nh \fBsetutent\fP(), \fBendutent\fP(), \fButmpname\fP() T} سلامة الخيوط MT\-Unsafe race:utent .TE .P في الجدول أعلاه، يشير \fIutent\fP في \fIrace:utent\fP إلى أنه إذا استُخدمت أي من الدوال \fBsetutent\fP()، \fBgetutent\fP()، \fBgetutid\fP()، \fBgetutline\fP()، \fBpututline\fP()، \fButmpname\fP()، أو \fBendutent\fP() بالتوازي في خيوط مختلفة من برنامج، فقد تحدث سباقات بيانات. .SH المعايير لا شيء. .SH التاريخ XPG2، SVr4. .P في XPG2 وSVID 2، وُثقت الدالة \fBpututline\fP() لترجع void، وهذا ما تفعله على العديد من الأنظمة (AIX، HP\-UX). تقدم HP\-UX دالة جديدة \fB_pututline\fP() بالنموذج الأولي المذكور أعلاه لـ \fBpututline\fP(). .P جميع هذه الدوال أصبحت مهملة الآن على الأنظمة غير اللينكسية. لا تحتوي POSIX.1\-2001 وPOSIX.1\-2008، باتباع SUSv1، على أي من هذه الدوال، بل تستخدم بدلاً من ذلك .P .RS 4 .EX \fB#include \fP .P \fBstruct utmpx *getutxent(void);\fP \fBstruct utmpx *getutxid(const struct utmpx *);\fP \fBstruct utmpx *getutxline(const struct utmpx *);\fP \fBstruct utmpx *pututxline(const struct utmpx *);\fP \fBvoid setutxent(void);\fP \fBvoid endutxent(void);\fP .EE .RE .P تُوفر glibc هذه الدوال، وتؤدي نفس المهمة كمعادلاتها بدون "x"، لكنها تستخدم \fIstruct utmpx\fP، المُعرَّف على لينكس ليكون مماثلاً لـ \fIstruct utmp\fP. للاكتمال، توفر glibc أيضًا \fButmpxname\fP()، على الرغم من أن هذه الدالة غير محددة بواسطة POSIX.1. .P على بعض الأنظمة الأخرى، هيكل \fIutmpx\fP هو مجموعة شاملة لهيكل \fIutmp\fP، مع حقول إضافية، وإصدارات أكبر من الحقول الموجودة، وتُحتفظ بملفات متوازية، غالبًا \fI/var/*/utmpx\fP و\fI/var/*/wtmpx\fP. .P من ناحية أخرى، لا تستخدم glibc على لينكس ملف \fIutmpx\fP موازٍ لأن هيكل \fIutmp\fP الخاص بها كبير بما يكفي بالفعل. الدوال "x" المذكورة أعلاه هي مجرد أسماء مستعارة لنظيراتها بدون "x" (على سبيل المثال، \fBgetutxent\fP() هو اسم بديل لـ \fBgetutent\fP()). .SH ملاحظات .SS "ملاحظات glibc" الدوال المذكورة أعلاه ليست آمنة للخيوط. تضيف glibc إصدارات قابلة لإعادة الدخول .P .nf \fB#include \fP .P \fBint getutent_r(struct utmp *\fP\fIubuf\fP\fB, struct utmp **\fP\fIubufp\fP\fB);\fP \fBint getutid_r(struct utmp *\fP\fIut\fP\fB,\fP \fB struct utmp *\fP\fIubuf\fP\fB, struct utmp **\fP\fIubufp\fP\fB);\fP \fBint getutline_r(struct utmp *\fP\fIut\fP\fB,\fP \fB struct utmp *\fP\fIubuf\fP\fB, struct utmp **\fP\fIubufp\fP\fB);\fP .fi .P متطلبات ماكروات اختبار الميزات لـ glibc (انظر \fBfeature_test_macros\fP(7)): .P \fBgetutent_r\fP()، \fBgetutid_r\fP()، \fBgetutline_r\fP(): .nf _GNU_SOURCE || /* Since glibc 2.19: */ _DEFAULT_SOURCE || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE .fi .P هذه الدوال هي إضافات GNU، نظائر الدوال ذات الاسم نفسه دون اللاحقة _r. تُعطي الوسيطة \fIubuf\fP لهذه الدوال مكانًا لتخزين نتيجتها. عند النجاح، تُرجع 0، ويُكتب مؤشر إلى النتيجة في \fI*ubufp\fP. عند الخطأ، تُرجع هذه الدوال \-1. لا توجد مكافئات utmpx للدوال المذكورة أعلاه. (لا يحدد POSIX.1 مثل هذه الدوال.) .SH أمثلة يُضيف المثال التالي ويزيل سجل utmp، بافتراض أنه يُشغّل من داخل طرفية زائفة. للاستخدام في تطبيق حقيقي، يجب عليك التحقق من قيم الإرجاع للدالتين \fBgetpwuid\fP(3) و \fBttyname\fP(3). .P .\" SRC BEGIN (getutent.c) .EX #include #include #include #include #include #include #include \& int main(void) { struct utmp entry; \& if (system("echo before adding entry:;who") == \-1) err(EXIT_FAILURE, "system"); \& entry.ut_type = USER_PROCESS; entry.ut_pid = getpid(); strcpy(entry.ut_line, ttyname(STDIN_FILENO) + strlen("/dev/")); /* only correct for ptys named /dev/tty[pqr][0\-9a\-z] */ strcpy(entry.ut_id, ttyname(STDIN_FILENO) + strlen("/dev/tty")); entry.ut_time = time(NULL); strcpy(entry.ut_user, getpwuid(getuid())\->pw_name); memset(entry.ut_host, 0, UT_HOSTSIZE); entry.ut_addr = 0; setutent(); if (pututline(&entry) == NULL) err(EXIT_FAILURE, "pututline"); \& if (system("echo after adding entry:;who") == \-1) err(EXIT_FAILURE, "system"); \& entry.ut_type = DEAD_PROCESS; memset(entry.ut_line, 0, UT_LINESIZE); entry.ut_time = 0; memset(entry.ut_user, 0, UT_NAMESIZE); setutent(); if (pututline(&entry) == NULL) err(EXIT_FAILURE, "pututline"); \& if (system("echo after removing entry:;who") == \-1) err(EXIT_FAILURE, "system"); \& endutent(); exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "انظر أيضًا" \fBgetutmp\fP(3), \fButmp\fP(5) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .