From owner-freebsd-questions@FreeBSD.ORG Mon Jul 27 17:25:21 2009 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 892D2106566B for ; Mon, 27 Jul 2009 17:25:21 +0000 (UTC) (envelope-from mel.flynn+fbsd.questions@mailing.thruhere.net) Received: from mailhub.rachie.is-a-geek.net (rachie.is-a-geek.net [66.230.99.27]) by mx1.freebsd.org (Postfix) with ESMTP id 57FB68FC12 for ; Mon, 27 Jul 2009 17:25:21 +0000 (UTC) (envelope-from mel.flynn+fbsd.questions@mailing.thruhere.net) Received: from smoochies.rachie.is-a-geek.net (mailhub.rachie.is-a-geek.net [192.168.2.11]) by mailhub.rachie.is-a-geek.net (Postfix) with ESMTP id 83A237E818 for ; Mon, 27 Jul 2009 09:25:20 -0800 (AKDT) From: Mel Flynn To: freebsd-questions@freebsd.org Date: Mon, 27 Jul 2009 09:25:19 -0800 User-Agent: KMail/1.11.4 (FreeBSD/8.0-BETA2; KDE/4.2.4; i386; ; ) References: <771031.86846.qm@web57007.mail.re3.yahoo.com> In-Reply-To: <771031.86846.qm@web57007.mail.re3.yahoo.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200907270925.19456.mel.flynn+fbsd.questions@mailing.thruhere.net> Subject: Re: How to find what symlink points to? X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 27 Jul 2009 17:25:21 -0000 On Monday 27 July 2009 05:45:13 Unga wrote: > > > Hi all > > > > > > I need to remove some unwanted symlinks on /dev using > > > > a C program. > > > > > The "struct dirent" only shows the symlink name, how > > > > do I find what that > > > > > symlink points to for verification purpose? > > > > By using the readlink(2) system call. > > But readlink(2) fails with errno set to 2. Can readlink(2) use with dev > nodes? Works for me. errno 2 is ENOENT ("No such file or directory"). I would inspect if your request path points to the right location. % ./rl /dev/stderr /dev/stderr => fd/2 % cat rl.c #include #include #include #include #include #include #include int main(int argc, char **argv) { char path[MAXPATHLEN], buf[MAXPATHLEN+1]; ssize_t res; if( argc != 2 ) exit(67); (void)strlcpy(path, argv[1], sizeof(path)); res = readlink(path, buf, sizeof(buf)); if( res < 0 ) err(EXIT_FAILURE, "readlink()"); buf[MAXPATHLEN] = '\0'; printf("%s => %s\n", path, buf); return (0); } -- Mel