导航:首页 > 操作系统 > linux获取文件路径c

linux获取文件路径c

发布时间:2023-06-07 21:12:10

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='';
strcpy(dir_path,file_path);//也可以不cp直接用file_path
}

//通过c语言展开ls这个路径c语言变量其实我没有理解这句话...先这么做吧
snprintf(cmd,256,"ls%s",dir_path);
system(cmd);

return0;
}

如果哪里有异常就加printf打印出来各个变量

阅读全文

与linux获取文件路径c相关的资料

热点内容
pdf图档 浏览:775
华为平板app如何移入隐私空间 浏览:127
python怎么列表去重 浏览:735
linux命令文件路径 浏览:58
程序员的愤怒完整视频 浏览:871
如何把iphoneapp变小 浏览:130
一个后端程序员的日常 浏览:416
51单片机历史 浏览:890
怎样减小pdf文件大小 浏览:31
和彩云zip解压 浏览:725
linux查看线程状态 浏览:459
怎么起文件夹名称 浏览:49
北京交大编译原理 浏览:982
linux执行java脚本 浏览:589
全能扫描加密文档忘记密码怎么办 浏览:75
极品飞车ol安卓版为什么要关服 浏览:275
学生服务器怎么选 浏览:464
mac系统本身编译器 浏览:151
头条app如何设置横屏模式 浏览:359
clion怎么使用终端编译 浏览:768