Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

โปรแกรม C ที่ไม่หยุดทำงานเมื่อกด Ctrl+Z

พื้นฐานสัญญาณ (Signal)

เมื่อโปรแกรมทำงานผิดปกติ สามารถหยุดได้ด้วยปุ่มลัด:

  • Ctrl+C: ส่งสัญญาณ SIGINT หยุดโปรแกรมหลังเสร็จ I/O operations
  • Ctrl+Z: ส่งสัญญาณ SIGTSTP หยุดโปรแกรมทันที ทรงพลังกว่า SIGINT

ในภาษา C สามารถจัดการสัญญาณเหล่านี้ได้ด้วยฟังก์ชัน signal()

โจทย์

เขียนโปรแกรมที่ข้ามการหยุดจาก Ctrl+Z แทนที่จะหยุด ให้พิมพ์ "Ctrl+Z cannot suspend this code"

โค้ดภาษา C

#include <stdio.h>
#include <signal.h>

void signalhandler(int sig_num) {
    signal(SIGTSTP, signalhandler);  // ลงทะเบียน handler ใหม่
    printf("Cannot execute Ctrl+Z\n");
}

int main() {
    int a = 1;
    signal(SIGTSTP, signalhandler);  // ตั้งค่า handler สำหรับ SIGTSTP
    while (a) {
        // วนลูปไม่รู้จบ
    }
    return 0;
}

ผลลัพธ์

// โปรแกรมจะทำงานเป็นลูปไม่รู้จบ
// เมื่อกด Ctrl+Z จะพิมพ์ "Cannot execute Ctrl+Z" แทนที่จะหยุด

คำอธิบาย: ฟังก์ชัน signalhandler() จะถูกเรียกเมื่อมีสัญญาณ SIGTSTP เข้ามา มันจะลงทะเบียนตัวเองใหม่และพิมพ์ข้อความ แทนที่จะให้โปรแกรมหยุดทำงาน