由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Linux版 - Linux GNU C, readlink问题 (转载)
相关主题
网络设置问题please help: using 'cat' to merge large text files in linux
Symbolic Link: ln 和 cp -s 是一样的么?天朝太牛掰了,出民科cpu艺术家了:中国第1款64位CPU细节披露 zz (转载)
how to rename files -- waiting on line如何把session翻译成中文?
a C question菜鸟 wget 问题求教
How difficult is it to write your own sprintf ? (转载)桌面系统你们觉得怎么样还能更方便?
php session variable问题(有包子)GNU screen 下面 vim 没有颜色?
perl sprintf question converting dec to hex (转载)怎样创造一个 segv (转载)
Perl Q: how to convert integer to MAC address (转载)怎么让sftp自动补全?
相关话题的讨论汇总
话题: readlink话题: gnu话题: linux话题: path话题: buf
进入Linux版参与讨论
1 (共1页)
xt
发帖数: 17532
1
【 以下文字转载自 Programming 讨论区 】
发信人: xt (拷贝猫), 信区: Programming
标 题: Linux GNU C, readlink问题
发信站: BBS 未名空间站 (Fri Dec 18 16:00:34 2009, 美东)
现在我有一个soft link
/home/xt/test/bin/a.out -> /home/xt/build/a.out
然后我执行test/bin/a.out,进入/proc/pid/exe,可以看到
exe -> /home/xt/test/bin/a.out
但是我用GNU C的readlink读出来,发现得到的是
/home/xt/build/a.out
我现在需要的是/home/xt/test/bin/a.out
谁知道这个问题怎么解决?
E*V
发帖数: 17544
2
好像是readline的问题,我具体忘了,要么是不是这么用的,
要不就是你参数不对。google一下应该有答案

【在 xt 的大作中提到】
: 【 以下文字转载自 Programming 讨论区 】
: 发信人: xt (拷贝猫), 信区: Programming
: 标 题: Linux GNU C, readlink问题
: 发信站: BBS 未名空间站 (Fri Dec 18 16:00:34 2009, 美东)
: 现在我有一个soft link
: /home/xt/test/bin/a.out -> /home/xt/build/a.out
: 然后我执行test/bin/a.out,进入/proc/pid/exe,可以看到
: exe -> /home/xt/test/bin/a.out
: 但是我用GNU C的readlink读出来,发现得到的是
: /home/xt/build/a.out

xt
发帖数: 17532
3
注意,是readlink,不是readline.google没有答案

【在 E*V 的大作中提到】
: 好像是readline的问题,我具体忘了,要么是不是这么用的,
: 要不就是你参数不对。google一下应该有答案

E*V
发帖数: 17544
4
google readlink那个manual好像说可以的啊
我有空试试看

【在 xt 的大作中提到】
: 注意,是readlink,不是readline.google没有答案
E*V
发帖数: 17544
5
readlink(2) - Linux man page
Name
readlink - read value of a symbolic link
Synopsis
#include
ssize_t readlink(const char *path, char *buf, size_t bufsiz);
Description
readlink() places the contents of the symbolic link path in the buffer buf,
which has size bufsiz. readlink() does not append a null byte to buf. It wil
l truncate the contents (to a length of bufsiz characters), in case the buff
er is too small to hold all of the contents.
Return Value
The call returns the count of char

【在 xt 的大作中提到】
: 注意,是readlink,不是readline.google没有答案
E*V
发帖数: 17544
6
just tested, correct a

,
wil
buff

【在 E*V 的大作中提到】
: readlink(2) - Linux man page
: Name
: readlink - read value of a symbolic link
: Synopsis
: #include
: ssize_t readlink(const char *path, char *buf, size_t bufsiz);
: Description
: readlink() places the contents of the symbolic link path in the buffer buf,
: which has size bufsiz. readlink() does not append a null byte to buf. It wil
: l truncate the contents (to a length of bufsiz characters), in case the buff

E*V
发帖数: 17544
7
#include
#include
ssize_t readlink(const char *path, char *buf, size_t bufsiz);
int main(){
char path[90];
ssize_t size;
size = readlink("/home/zsdfsf/dfasfsdfadfm", path, 90);
path[size] = '\0';
printf("%d, %s\n", size, path);
return (0);
}

【在 E*V 的大作中提到】
: just tested, correct a
:
: ,
: wil
: buff

xt
发帖数: 17532
8
用我修改过的code,编译好后,到另一个路径做个softlink,
用softlink执行这个程序。

pid_t pid = getpid();
char buf[40]={0};
sprintf( buf,"/proc/%d/exe", pid);
size=readlink(buf, path, 90);
sleep(120);
你得到的结果会是你的a.out的真实路径
趁这个程序睡觉的时候,你到/proc/pid里面来个ls,
会发现那个exe指向你的soft link.如果你用shell
的readlink得到的也是softlink地址。
这个至少是在我的RHEL5上是这样

【在 E*V 的大作中提到】
: #include
: #include
: ssize_t readlink(const char *path, char *buf, size_t bufsiz);
: int main(){
: char path[90];
: ssize_t size;
: size = readlink("/home/zsdfsf/dfasfsdfadfm", path, 90);
: path[size] = '\0';
: printf("%d, %s\n", size, path);
: return (0);

N****w
发帖数: 21578
9
好像你是想拿到 softlink 的全名?
不是要实质文件的全名?

【在 xt 的大作中提到】
: 用我修改过的code,编译好后,到另一个路径做个softlink,
: 用softlink执行这个程序。
:
: pid_t pid = getpid();
: char buf[40]={0};
: sprintf( buf,"/proc/%d/exe", pid);
: size=readlink(buf, path, 90);
: sleep(120);
: 你得到的结果会是你的a.out的真实路径
: 趁这个程序睡觉的时候,你到/proc/pid里面来个ls,

xt
发帖数: 17532
10
是。

【在 N****w 的大作中提到】
: 好像你是想拿到 softlink 的全名?
: 不是要实质文件的全名?

N****w
发帖数: 21578
11
那不就是文件名么,不用 readlink 阿

【在 xt 的大作中提到】
: 是。
xt
发帖数: 17532
12
不行。文件名是
/proc/pid/exe
整个过程是这样:我用link执行一个文件,然后到/proc下面,
要找到这个link.但是GNU C的readlink返回的是最终的可执行
文件。而shell的readlink返回的是我执行的那个link,也就
是我所要的。
我需要的是exe指向的那个文件名。

【在 N****w 的大作中提到】
: 那不就是文件名么,不用 readlink 阿
1 (共1页)
进入Linux版参与讨论
相关主题
怎么让sftp自动补全?How difficult is it to write your own sprintf ? (转载)
中國企業沒有人真正有戰略眼光的php session variable问题(有包子)
Linux里如何查找当前release name? (转载)perl sprintf question converting dec to hex (转载)
使用Linux点滴累积Perl Q: how to convert integer to MAC address (转载)
网络设置问题please help: using 'cat' to merge large text files in linux
Symbolic Link: ln 和 cp -s 是一样的么?天朝太牛掰了,出民科cpu艺术家了:中国第1款64位CPU细节披露 zz (转载)
how to rename files -- waiting on line如何把session翻译成中文?
a C question菜鸟 wget 问题求教
相关话题的讨论汇总
话题: readlink话题: gnu话题: linux话题: path话题: buf