導航:首頁 > 操作系統 > 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相關的資料

熱點內容
編譯程序有哪些用 瀏覽:943
變身之後我與她的狂想曲txt 瀏覽:843
睡在我上下前後左右鋪的兄弟閱讀 瀏覽:531
搜編程課程入口 瀏覽:226
韓國拍的朝鮮戰爭電影有哪些 瀏覽:262
裕泉影視台灣電影 瀏覽:35
安卓怎麼激活電源 瀏覽:519
推油類電影 瀏覽:112
好的看片網站 瀏覽:982
人吃人食人族電影全集 瀏覽:729
0855最新網址 瀏覽:4
浪潮伺服器如何安裝raid1 瀏覽:757
exe程序反向編譯工具 瀏覽:470
亞瑟的電影叫什麼名字 瀏覽:826
javaimport找不到 瀏覽:730
德銀投資加密貨幣 瀏覽:565
編譯器的前端包括什麼 瀏覽:379
宅男小電影在線 瀏覽:95
西班牙露奶電影有哪些? 瀏覽:691
成人短篇合集小說 瀏覽:746