الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تحدي : تغيير إسم الملف التنفيذي عند تشغيله

بدأه zirek99i في 22 نوفمبر 2013 · 11 رد · 1,348 مشاهدة · في اختبر قداراتك
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

المطلوب: كتابة برنامج بلغة سي، يقوم بتغيير إسمه

الشرط   : لايسمح بآستخدام أي دالة، من دوال الـ API، فقط pure c

 

Enjoy

#2

جميل :)

بما أن صاحبنا gcc فيه كل الـpure c صايرة Built in  ..

إليك أقصر كود يمكنه تنفيذ العملية :D

main(){system("rename OldName.exe NewName.exe");}

هل حلي صحيح ؟

في ويندوز على الأقل ..

 

شكرا لك

1
#3

حلك تقرياً غش :P ،

لكنني أريد حلاً يعمل بجميع الأنظمة، :D دون الحاجة الى إستخدام أدوات النظام .

#4

:D نعم شعرت بأنه غش  ... ولكن على كل حال system من pure c ولكنها تستخدم dirty c في مضمونها :D (هل هناك شيء اسمه dirty c )

على كل حال لا يزال دماغي يتدغدغ .. وإن لم يسبقني أحد فسأصل إلى الحل بإذن الله :)

شكرا جزيلاً

#5

السلام عليكم

 

هل هذا ما تريده ؟ :)

#include <stdio.h>
int main()
{
   if (rename("Untitled.c", "Snack3r.c") == -1)
   perror("rename");
   return 0;
}
1
#6

@snacker

إقتربت من الجواب، لكنك و مصطفي إفترضتم أن إسم البرنامج لن يتغير، لكن ماذا لو غيره المستخدم،

 

أنا أريد طريقة لإعادة تسمية البرنامج مهما كان إسمه،  :evil:

#7

هل تريد إعادة تسمية ملف السورس كود أو إعادة تسمية الملف التنفيذي ؟
إذا كنت تريد الأولى فأعتقد أن الكود التالي يفي بالغرض :)

#include <stdio.h>
int main()
{
   if (rename(__FILE__ , "Snack3r.c") == -1)
   perror("rename");
   return 0;
}

تم تعديل هذه المشاركة بواسطة Snack3r في 23 نوفمبر 2013 في 19:32

1
#8

إستخدام __FILE__ فكرة جيدة   :uwish:   ، لكنها ليست المطلوب،  :tbbash:

المطلوب تغيير إسم الملف التنفييذي مهما كان إسمه ..

 

hint

تذكر الـ Argument التي ترسل للدالة main ()  :tbyeah:

 

 

 

أرجو تعديل التحدي بالموضوع الى

تغيير إسم الملف التنفييذي مهما كان إسمه ..

 

أو أي جملة أخرى معبرة

تم تعديل هذه المشاركة بواسطة zirek99i في 23 نوفمبر 2013 في 11:36

#9

السلام عليكم

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char ** argv)
{

    int result;
    char * oldname = argv[0];

    result= rename( oldname , "hello.exe" );
    if ( result == 0 ){
            puts ( "File successfully renamed" );
    }
    else{
            perror( "Error renaming file" );
    }
    return 0;
}
2
#10

@bigginer

جوابك صحيح  ;)

 

جوابي

#include <stdio.h>
 
int main(int argc, char **argv) {

    if(rename(argv[0], "newName")) {
        perror("rename");
        return 1;
    }
	
    return 0;
}
2
#11

رائعة :)

الغريب أن جسم الدالة rename موجودة في ملفات dll أو شيئاً كهذا .. (أستعمل VC ) يعني الكود غير متاح ! غريب

 

شكراً استفدت :)

#12
مصطفى 36a2 كتب:

رائعة :)

الغريب أن جسم الدالة rename موجودة في ملفات dll أو شيئاً كهذا .. (أستعمل VC ) يعني الكود غير متاح ! غريب

 

شكراً استفدت :)

 

أغلب الظن ان rename تستخدم MoveFile، فتقريبا كل الدوال عبارة عن واجهة للـ Win32 api، لم أتحقق من ذلك، لكن يمكنك بكل سهولة التأكد منه  ;)

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…