دستور tty(1) نام و آدرسِ فایل مربوط به ترمینال فعلی که در حال استفاده از آن هستیم را برمی‌گرداند. بدیهی است که دستور موجود در سیستم‌های لینوکس قطعا جزئیات بسیار بیشتری دارد. این برنامه صرفا به قصد تمرین و یادگیری نوشته شده است و حالت پیش فرض آن را پیاده می‌کند:

tty.c
/*
 * PRACTICE OF PROGRAMMING!
 * tty(1) simulation
 * 
 * safari.tafreshi@gmail.com
 * dokaj.ir
 */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <err.h>
#include <dirent.h>
#include <sys/stat.h>
#include <limits.h>
#include <sys/sysmacros.h>

void
search(char *dir, int minor, int major) {
    char path[PATH_MAX];
    DIR *dirp;
    struct dirent *dirent;
    int s;
    struct stat st;

    dirp = opendir(dir);
    if (dirp == NULL)
        err(EXIT_FAILURE, "opendir");

    while ((dirent = readdir(dirp)) != NULL) {
        sprintf(path, "%s/%s", dir, dirent->d_name);
        s = lstat(path, &st);
        if (s == -1)
            err(EXIT_FAILURE, "lstat");
        if (minor(st.st_rdev) == minor &&  major(st.st_rdev) == major) {
            printf("%s\n", path);
            exit(EXIT_SUCCESS);
        }
    }

    closedir(dirp);
}

int
main(int argc, char *argv[])
{
    struct stat st;
    int s, minor, major;
    char *dirs[] = {"/dev", "/dev/pts", NULL};

    s = fstat(STDIN_FILENO, &st);
    if (s == -1)
        err(EXIT_FAILURE, "fstat");

    minor = minor(st.st_rdev);
    major = major(st.st_rdev);

    for (int i = 0; dirs[i] != NULL; i++)
        search(dirs[i], minor, major);

    exit(EXIT_FAILURE);
}

برنامه به صورت زیر کامپایل و اجرا می‌شود:

SHELL
$ gcc -o tty tty.c
$ ./tty
/dev/pts/1
نوشته شده در: 1402-02-18 (1 سال 1 هفته 20 ساعت پیش)

من محسن هستم؛ برنامه‌نویس PHP و Laravel و Zend Framework و پایتون و فلسک، ولی بیشتر تمرکزم روی لاراول است. این سایت را اولین بار با فلسک نوشتم ولی بعد تصمیم گرفتم آن را با لاراول نیز پیاده‌سازی کنم. هم نسخه‌ی فسلک و هم نسخه‌ی لاراول را می‌توانید روی گیت‌هابم پیدا و دانلود کنید.

برای ارتباط با من یا در همین سایت کامنت بگذارید و یا به dokaj.ir(at)gmail.com ایمیل بزنید.

در مورد این مطلب یادداشتی بنویسید.