A. linux系统中获取路径的文件名的方法
这篇文章主要介绍了Linux系统中获取路径的文件名的方法,文中总结出了两条,需要的朋友可以参考下
代码如下:
[[email protected]
]#basename
/root/aaa/bbb/dabu.txt
显示:
代码如下:
dabu.txt
#获取路径的文件名
shell脚本中如何获得脚本文件所在路径?
方法一:
代码如下:
[[email protected]
]#DIR=$(cd
"$(dirname
"$0")";
pwd)
[[email protected]
]#echo
$DIR
但是像这种dirname
"$0"这种写法,在遇到source命令时会得到错误的结果。
方法二:
代码如下:
[[email protected]
]#echo
"$(
cd
"$(
dirname
"${BASH_SOURCE[0]}"
)"
&&
pwd
)"
上面一行命令可以获得脚本的绝对轮径,无论你在何处调用这个脚本。
但是如果含有软链接,就无法使用了。所以,我们为了能正确解析指向脚本的软链接,可以使用下面的多行命令:
代码如下:
SOURCE="${BASH_SOURCE[0]}"
while
[
-h
"$SOURCE"
];
do
#
resolve
$SOURCE
until
the
file
is
no
longer
a
symlink
DIR="$(
cd
-P
"$(
dirname
"$SOURCE"
)"
&&
pwd
)"
SOURCE="$(readlink
"$SOURCE")"
[[
$SOURCE
!=
/*
]]
&&
SOURCE="$DIR/$SOURCE"
#
if
$SOURCE
was
a
relative
symlink,
we
need
to
resolve
it
relative
to
the
path
where
the
symlink
file
was
located
done
DIR="$(
cd
-P
"$(
dirname
"$SOURCE"
)"
&&
pwd
)"
也可与source,bash
-c命令使用
但是,如果你在脚本中使用先cd切换到其他目录,在运行时上面的命令片段时,则上面的命令不能等到正确的结果。可以参考关于$CDPATH
陷阱的文章。想理解它如何其作用的,可以运行下面的代码:
代码如下:
#!/bin/bash
SOURCE="${BASH_SOURCE[0]}"
while
[
-h
"$SOURCE"
];
do
#
resolve
$SOURCE
until
the
file
is
no
longer
a
symlink
TARGET="$(readlink
"$SOURCE")"
if
[[
$SOURCE
==
/*
]];
then
echo
"SOURCE
'$SOURCE'
is
an
absolute
symlink
to
'$TARGET'"
SOURCE="$TARGET"
else
DIR="$(
dirname
"$SOURCE"
)"
echo
"SOURCE
'$SOURCE'
is
a
relative
symlink
to
'$TARGET'
(relative
to
'$DIR')"
SOURCE="$DIR/$TARGET"
#
if
$SOURCE
was
a
relative
symlink,
we
need
to
resolve
it
relative
to
the
path
where
the
symlink
file
was
located
fi
done
echo
"SOURCE
is
'$SOURCE'"
RDIR="$(
dirname
"$SOURCE"
)"
DIR="$(
cd
-P
"$(
dirname
"$SOURCE"
)"
&&
pwd
)"
if
[
"$DIR"
!=
"$RDIR"
];
then
echo
"DIR
'$RDIR'
resolves
to
'$DIR'"
fi
echo
"DIR
is
'$DIR'"
B. Linux下用c语言打开文件路径问题
C语言程序也是启动一个进程, 所以他也也有环境变量, 默认是继承父进程的环境变量;如果是shell界面直接启动, 那么就是继承shell的环境变量; 如果是其他程序启动这个那么就是继承那个程序的环境变量;
首先没有搞清楚hello.html是可执行程序, 还是不可执行文件;现在我默认把他当作可执行文件
./表示当前目录;即执行当前目录下的hello.html; 如果没有则报错
而直接使用程序(hello.html)默认是先在PATH环境变量中查找; 如果PATH环境变量中没有则报错;
C. linux 下c语言利用readdir获取文件夹目录错误提示:segmentation fault~求达人看程序给解~
不说你了。
while(entry=readdir(dirpt));
这行后面有个分号发现没,给我去掉。
这行就是个空语句。
占位用的。可以这么理解
while(entry=readdir(dirpt))
这里啥都不干;
下面那一行的entry 就成 NULL了,他没有d_name,所以段错误
D. 用c语言编写一个linux程序:通过find一个文件名,系统给一个路径,然后用c语言展开这个路径
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
intmain(intargc,char*argv[])
{
charfile_name[64]={0};
charfile_path[128]={0};
chardir_path[64]={0};
charcmd[256]={0};
intre=0;
FILE*pf=NULL;
char*p=NULL;
printf("请输入文件名: ");
scanf("%s",file_name);
snprintf(cmd,256,"find-name%s>tmp.txt",file_name);//如果文件不在程序运行的本地目录(或者子目录)下,则需要改成find/-namexxxx但耗时会很长
system(cmd);
//文件中取绝对路径
pf=fopen("tmp.txt","r");
if(pf)
{
re=fscanf(pf,"%s",file_path);//只取第一行也就是默认不存在同名文件
if(-1==re)
{
printf("err0 ");
return0;
}
else
{
flcose(pf);
pf=NULL;
}
}
else
{
printf("err1 ");
return0;
}
if(0==strlen(file_path))
{
printf("err2 ");
return0;
}
//获取目录名
p=strstr(file_path,file_name);
if(p)
{
*p='