From owner-freebsd-hackers@FreeBSD.ORG Wed Apr 13 18:30:41 2005 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 6C32716A4CE for ; Wed, 13 Apr 2005 18:30:41 +0000 (GMT) Received: from hotmail.com (bay10-f2.bay10.hotmail.com [64.4.37.2]) by mx1.FreeBSD.org (Postfix) with ESMTP id 417D943D1F for ; Wed, 13 Apr 2005 18:30:41 +0000 (GMT) (envelope-from ghanekar_rajesh@hotmail.com) Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Wed, 13 Apr 2005 11:30:41 -0700 Message-ID: Received: from 202.54.11.72 by by10fd.bay10.hotmail.msn.com with HTTP; Wed, 13 Apr 2005 18:30:40 GMT X-Originating-IP: [202.54.11.72] X-Originating-Email: [ghanekar_rajesh@hotmail.com] X-Sender: ghanekar_rajesh@hotmail.com From: "Rajesh Ghanekar" To: freebsd-hackers@freebsd.org Date: Thu, 14 Apr 2005 00:00:40 +0530 Mime-Version: 1.0 Content-Type: text/plain; format=flowed X-OriginalArrivalTime: 13 Apr 2005 18:30:41.0164 (UTC) FILETIME=[E57FA4C0:01C54056] Subject: not able to get controlling tty X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Apr 2005 18:30:41 -0000 Hi, I have a program which prints the name of the controlling terminal. The code snippet is as follows: int main(int argc, char **argv) { int mib[4], len; struct kinfo_proc buf; udev_t ttydev; register struct dirent *dirp; register DIR *dp; struct stat dsb; char namebuf[sizeof(PATH_DEV) + MAXNAMLEN]; mib[0] = CTL_KERN; mib[1] = KERN_PROC; mib[2] = KERN_PROC_PID; mib[3] = getpid(); len = sizeof (buf); sysctl(mib, 4, &buf, &len, NULL, 0); ttydev = buf.kp_eproc.e_tdev; printf("ttydev is %u, major = %d, minor = %d\n", ttydev, major(ttydev), minor(ttydev)); if (!(dp = opendir(PATH_DEV))) return 1; strlcpy(namebuf, PATH_DEV, sizeof(PATH_DEV)); while ((dirp = readdir(dp))) { memset(namebuf + sizeof(PATH_DEV) - 1, '\0', MAXNAMLEN - sizeof(PATH_DEV) + 1); memcpy(namebuf + sizeof(PATH_DEV) - 1, dirp->d_name, dirp->d_namlen + 1); if (stat(namebuf, &dsb) || (dsb.st_rdev != ttydev)) continue; printf("OK found\n"); break; } } The value returned by buf.kp_eproc.e_tdev doesn't seems to be right. #/tmp/abc ttydev is 30479, major = 119, minor = 15 Device name is /dev/log # /tmp/abc ttydev is 30577, major = 119, minor = 113 Device name is /dev/log ttydev keeps on changing every time I run same program on same terminal. Is there any way to get terminal device (udev_t) from struct kinfo_proc? - Rajesh _________________________________________________________________ Marriages at Bharatmatriony.com http://www.bharatmatrimony.com/cgi-bin/bmclicks1.cgi?74 Relationships that last forever