صفحه نخست | سیستم وبلاگ | در مورد من | twitter
کد زیر پیاده سازی ساده دستور tty(1) است که نام فایل مربوط به ترمینال فعلی که در حال استفاده از آن هستیم را برمیگرداند. بدیهی است که دستور موجود در سیستمهای لینوکس قطعا جزییات بسیار بیشتری دارند ولی این برنامه صرفا به قصد تمرین و یادگیری نوشته شده است.
امیدوارم که برای علاقمندان مفید باشد.
/* * PRACTICE OF PROGRAMMING! * tty(1) simulation * * safari.tafreshi@gmail.com * mstafreshi.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); }
کلیه حقوق برای دارندهی سایت محفوظ است.