導航:首頁 > 操作系統 > getcwdlinux

getcwdlinux

發布時間:2023-05-16 07:47:34

linux裡面import os作用是什麼

import os
print(os.path.abspath(".")) #當前目錄的絕對路徑

print(os.path.abspath(r"..")) #上級目錄的絕對路徑 print(os.path.abspath(r"D:\python_workshop\python6\revise\函數.py"))

運行結果

D:\python_workshop\python6\selenium_webdriver

D:\python_workshop\python6

D:\python_workshop\python6\revise\函數.py

其他的一些常見函數:

1、os.getcwd()函數
功能:獲取當前目錄,python 的工作目
import os
pwd = os.getcwd()
print (pwd)
2、os.name 函數
功能:獲取當前使用的操作系統(獲取信息不夠詳細)
其中 'nt' 是 windows,'posix' 是 linux 或者 unix
import os
name = os.name
if name == 'posix':
print ("this is Linux or Unix")
elif name == 'nt':
print ("this is windows")
else:
print ("this is other system")
3、os.remove()函數
功能:刪除指定文件
eg:刪除 file.txt 文件
import os
os.remove(』file.txt『)
4、os.removedirs()函數
功能:刪除指定目錄
eg:刪除 file目錄
import os
os.removedirs(『file』)
5、os.system()函數
功能:運行shell命令

eg:執行ls -a > 1.txt命令

import os
os.system(『ls -a > 1.txt』)
6、os.mkdir()函數
功能:創建一個新目錄
eg:創建一個 file 目錄
import os
os.mkdir(『file』)
7、os.chdir()函數
功能:改變當前路徑到指定路徑
eg:我現在從當前路徑到 filepath 所指定的路徑下
import os
filepath = '/home'
pwd = os.getcwd()
print (pwd)
os.chdir(filepath)
pwd = os.getcwd()
print (pwd)
8、os.listdir()函數
功能:返回指定目錄下的所有目錄和文件
eg:列出當前目錄下的所有文件和目錄
import os
pwd = os.getcwd()
name = os.listdir(pwd)
for filename in name:
print (filename)

⑵ linux下system()調用失敗,返回32512,但有程序執行結果有時成功有時失敗

調用xfs_admin時沒有指明所在路徑,建議使用絕對路徑。

可以在system調用前查詢下當前所在目錄,看是不是xfs_admin程序所在路徑。

#include<unistd.h>
char*getcwd(char*buf,size_tsize);


關於返回值32512,解釋如下:

As for the exit code,

Bits 15-8 = Exit code.
Bit 7 = 1 if a core mp was proced.
Bits 6-0 = Signal number that killed the process.

32512 = 0x7F00

So it didn't die from a signal, a core mp wasn't proced, and it exited with code 255.

What 255 means is unclear, which is why it should accompanied by an error message.

⑶ 如何用它在Linux的相對路徑打開一個文件

1. 如果程序不是皮胡衫由自己做,這是一個糟糕的計劃。糟糕的程序應包有一點的Bash腳本:#!/bin/bash
set -e
cd $(readlink -f $(dirname $0))
exec ./myprog $*

上面的腳本確定所在的目錄,然後更改當前工作目錄到該目錄並運行一個程序myprog從那裡,通過所有透明。你必須把這個腳本到你的程序所在的目錄,然後運行你的程序來代替它。 假設您有訪問源代碼並可以修復程序,proc文件系統來確定程序的位置和絕對路徑。 例如,/proc/self/exe將永遠是一個符號鏈接指向的當前進程的二進制文件。使用readlink讀取它的值 CodeGo.net,再切可執行文件和你得到的目錄。
2. 出現了問題,前一段時間如何找到在C中的可執行文件的位置 你打開你的配置燃腔,資源,等這個路徑..
3. 一種方法是ARGV [0]-有你的程序的相對路徑(例如./programs/test/a.out)。如果你切的程序,並添加到文件的相對路徑,你會得到一個怪物(例如./programs/test/../../input_data),但它應該工作。
4. 最簡單的方法是要麼把你的程序在一個預先知道的地方(/ bin中,/ usr / bin中,等)。如果沒有,你在argv [0],刪除該程序(最後一部分),作為你的工作目錄前綴的所有相對路徑(如果你想相對路徑是相對於你的程序是)。 此外,你可以決定你的上面(使用的路徑argv[0]),然後調用一個chdir()與此目錄。從此所有的相對路徑上是相對於所在的程序。但請注意,在這種情況下,你必須確定是否argv[0]占據絕對路徑。如果沒有,你必須得到當前工作目錄(getcwd()),然後追加的目錄部分argv[0]。但是,請注意,改變當前工作目錄。是不是一個好主意,通常情況下,彷彿給你一個文件路徑作為這將是相對於當前的工作目錄,而不是相對於所在的程序存儲。 例子:想像一下,你的程序在生活/usr/bin。你可以打電話給你的程序為:/usr/bin/myprog

(這將是argv[0]。trim的可執行文件,你有你的目錄。)或者,是,比方說,在/usr:./bin/myprog

現在,argv[0]是一個相對路徑。你必須在前面加上當前工作目錄(/usr)到一個在argv[0]:/usr/./bin/myprog,然後再次trim可執行文件的目錄將再次/usr/bin。
5. 唐的相對路徑。使用絕對路徑。你可能有一個config.h頭文件中定義的常量,指定安裝的可執行文件。然後,前置一個字元串常量到您在代碼中指定任何相對路徑。
6. openat打開相對於你傳遞一個特定的目錄文件描述符的文件,但我不認為這真的是你想要的(精確)什麼。 你將需要找到當前可執行文件的目錄,然後創建一個開放的呼叫相對於(使用字元串運算符來建立路徑,openat,或改變當前目錄到該目錄)。 為了找到可執行文件,可以readlink/proc/做鄭self/exe。readlink讀取路徑的符號鏈接指向,並/proc/self是一個符號鏈接/proc/<PID>哪裡<PID>是當前進程(在內核中處理特殊)的進程ID,以及exe以下是該進程的可執行文件的符號鏈接。然後,你需要掏錢的路徑的可執行文件,。 所有這一切都這么說,應該避免這樣一種方式,他們希望找到相對於其可執行文件的東西寫程序。
7. 好吧,如果你的程序需要從依賴安裝程序所在的位置打開一個文件時,你應該做這個選項。有你的編譯系統設置的CPP宏表示,其中有問題的數據文件,可以發現該目錄。這是什麼樣的-datadir的選項在標准配置「的configure,make,make install的」內置程序經常做。 當然,如果你真的想要,可以通過編程改變工作目錄與chdirPOSIX函數。但就像我說的,如果一個程序需要知道它位於何處,這應該是提供那麼你不需要重寫的選擇工作目錄中。
8. 您可以從確定執行路徑argv[0]但這樣做的時候要小心。 你所描述的是一個眾所周知的和預期的語義。用戶expect這種行為。
9. 下面是代碼,你要找到你的程序在你的安裝路徑(與你的程序替換「test0002」):#include <iostream>
#include <sstream>
#include <string>
#include <fstream>
#include <unistd.h>
///=============================================================================
std::string FindInstallPath()
{
std::string sret="";
int pid = (int)getpid();
bool b=false;
std::string sf, s;
std::stringstream ss;
ss << "/proc/" << pid << "/maps";
sf = ss.str();
std::ifstream ifs(sf.c_str());
size_t pos1, pos2;
while (!b && ifs.good())
{
std::getline(ifs, s);
if ((pos1 = s.rfind("test0002")) != std::string::npos)
{
if ((pos2 = s.find_first_of('/')) != std::string::npos)
sret = s.substr(pos2, pos1 - pos2);
b = true;
}
}
if (!b) sret = "";
ifs.close();
return sret;
}

⑷ linux關於子進程的創建,先讓子進程輸出當前所在位置,再讓父進程在當前目錄下新建一個名為hise的文件夾

#include<stdio.h>

#include<stdlib.h>

#include<備殲unistd.h>

#include<string.h>

#include<fcntl.h>

#include<sys/types.h>

#include<sys/stat.h>

#include<sys/wait.h>

intmain(intargc,char*argv[]){

intfd[2];

pid_tpid;

if(pipe(fd)<0){

perror("pipe");

exit(1);

}

if((pid=fork())<0){

perror("fork");

exit(2);

}elseif(pid==0){

close(fd[0]);

charpath1[1024]={0};

getcwd(path1,sizeof(path1));

printf("childpath1====%s ",path1);

write(fd[1],path1,strlen(path1));

printf("childPID=%d,parentPID=%d ",getpid(),getppid());

sleep(3);

}else{

charpath2[1024]={0};

charbuf[1024];

close(fd[1]);

intflg=fcntl(fd[0],F_GETFL);

flg|=O_NONBLOCK;

fcntl(fd[0],F_SETFL);

read(fd[0],buf,sizeof(buf));

printf("parentbuf=%s ",buf);

umask(0000);

if(mkdir("hise",0755)){

perror("mkdir");

exit(1);

}

chdir("hise");

intfd_file=open("./01.c",O_RDONLY);

int兆岩fd_file2=open("./cp01.c"仿猜沖,O_WRONLY|O_CREAT,0644);

intbuf2[1024];

memset(buf2,0,1024);

while(read(fd_file,buf2,sizeof(buf2)-1)>0){

write(fd_file2,buf2,strlen(buf2));

}

wait(NULL);

sleep(3);

}

return0;

}

⑸ ubuntu中使用函數getcwd應該包括什麼頭文件,是uinstd.h嗎如果ububtu中沒有這個頭文件應該安裝什麼包

#include <unistd.h> // 頭文件
char* getcwd(char*buf,size_tsize); // 函數原型。
類似函數:
char* getwd(char*buf);
char* get_current_dir_name(void);
也可以直接調 linux 系統命令 getcwd.
===
沒有這個頭文件? 這應當是編譯器里最基本的頭文件之一。

⑹ 如何判斷linux編程里system()成功調用

system("cd ./test && pwd")
system調用是開了新的線程(或者進程,記不旦遲清楚了),和當前進程一樣的環模襲李境變數,system里執行改變環境變數,是當前進程的(子進程),不會改到調用進程(父進程).當system返回後.改變當前進程的你禪畝用 chdir("./test");// 試一下
getcwd()

⑺ linux下getcwd獲取的目錄錯誤

這是因為你的「當前路徑」是/home/suc。要得到你需要的結果,需要:
cd /home/sunc/nxdl/test
./main

在任意橋腔型「當前路徑」下,對非upx壓縮的ELF文件,可以通過調用readlink讀圓游取/proc/self/exe指向的路徑得敏猜到可執行文件所在的路徑。

⑻ 【Linux】實現一個簡單的shell命令解釋器

姓名:羅學元       學號:21181214375     學院:廣州研究院

【嵌牛導讀】shell命令解釋器該包含哪些部分

【嵌牛鼻子】shell命令解釋器該包含哪些部分

【嵌牛提問】shell命令解釋器該包含哪些部分

我們所做的這個簡單的shell命令解釋器可以實現簡單的常用的基本命令,如ls、pwd、cd、cd - 、cd ~ 等

根據簡單命令的定義,它的第一個參數是要執行的命令,後面的參數作為該命令的參數。

要執行的命令有兩種情況:

一種是外部命令: 也就是對應著磁碟上的某個程序,例如 pwd、ls等等。對於這種外部命令,我們首先要到指定的路徑下找到它,然後再執行它。

另一種是內部命令:內部命令並不對應磁碟上的程序,例如cd等等,它需要shell自己來決定該如何執行。例如對 cd 命令,shell就應該根據它後面的參數改變當前路徑。

對於外部命令,需哪指要創建一個子進程來執行它,本質就是fork+exec

#include <stdio.h>

#include <stdlib.h>

#include <assert.h>

#include <string.h>

#include <pwd.h>

#include <sys/utsname.h>

#include <sys/types.h>

#include <unistd.h>

#define MAX 10

#define STRLEN 128

#define PATH "/bin/" //系統bin路徑位置

char OLDPWD[STRLEN]={0}; //記錄上一次的命令,為了cd -這條命令

//================================================================================

//每次敲回車輸出當前所在用戶信息

//普通用戶和root用戶的提示符區別

void Printf_Info()

{

char flag='$';

struct passwd *pw=getpwuid(getuid());

assert(pw!=NULL);

//uid為0則為root用戶

if(pw->pw_uid==0)

{

flag='#';

}

struct utsname hostname; //主機名

uname(&hostname);

char node[STRLEN]={0};

strcpy(node,hostname.nodename); //獲取網路上的名稱

char* name=strtok(node,".");

//獲取絕對路徑

char path[STRLEN]={0};

getcwd(path,STRLEN-1);

char*p=path+strlen(path); //p指向絕對路徑的末尾

while(*p!='/')

{

p--;

}

//p指向路徑末尾往前大野的第一個『/』位置處

if(strlen(path)!=1)

{

p++; //++前,p->'/'

}

if(strcmp(path,pw->pw_dir)==0)

{

p="~";

}

printf("\033[;32mMyBash[%s@%s %s]%c\033[0m",pw->pw_name,name,p,flag);

//  \033[47;31mThis is a color test\033[0m  設置列印滾緩喊結果的顏色

    fflush(stdout);

}

//================================================================================

void Mycd(char*path)

{

//第一個字元串為cd而第二為空 如:cd 則結束本輪循環

if(path==NULL)

{

exit(0);

}

//cd ~ 回到用戶根目錄

if(strcmp(path,"~")==0)

    {

        struct passwd*pw=getpwuid(getuid());

        path=pw->pw_dir;

    }

    //cd - 回到上一次的位置

    if(strcmp(path,"-")==0) 

    {

      //若是第一次輸入命令,則cd -命令不存在!

        if(strlen(OLDPWD)==0)

        {

            printf("\033[;31mMyBash:cd:OLDPWD not set\n\033[0m");

            return ;

        }

        //否則把上一次的命令給path

        path=OLDPWD;

    }

    //getpwd記錄當前工作目錄的絕對路徑

    char oldpwd[STRLEN]={0};

    getcwd(oldpwd,STRLEN-1);

if(-1==chdir(path))//反之則不是空,則通過chdir系統調用進入到該目錄中

    {

        char err[128]="\033[;31mMybash: cd \033[0m";

        strcat(err,path);

        perror(err);

    }

    //每次執行完cd命令後,把工作路徑賦給OLDPWD

    strcpy(OLDPWD,oldpwd);

}

//================================================================================

//命令分割函數

void Strtok_cmd(char*buff,char*myargv[])

{

char *s=strtok(buff," "); //分割輸入的字元串

if(s==NULL) //如果s為空,則進入下一輪循環

{

exit(0);

}

myargv[0]=s; //把分割出來的第一個字元串放在myargv[0]中

int i=1;

while((s=strtok(NULL,""))!=NULL) //把後續分割出來的字元串依次存放在數組中

{

myargv[i++]=s;

}

}

//===============================================================

int main()

{

while(1)

{

char buff[128]={0};

Printf_Info();

//從終端獲取命令存入buff中

fgets(buff,128,stdin);

buff[strlen(buff)-1]=0;

char *myargv[MAX]={0};

//分割輸入的命令

Strtok_cmd(buff,myargv);

//如果輸入exit則退出循環

if(strcmp(myargv[0],"exit")==0)

{

exit(0);

}

//如果分割出來的第一個字元串為cd

else if(strcmp(myargv[0],"cd")==0)

{

Mycd(myargv[1]);

continue;

}

//若是系統調用,直接替換fork+exec

pid_t pid=fork();

assert(pid!=-1);

if(pid==0)

{

char path[256]={0};

if(strncmp(myargv[0],"./",2)!=0 && strncmp(myargv[0],"/",1)!=0)

{

//先把路徑放入path中

strcpy(path,PATH);

}

//進行命令拼接,路徑+名稱

strcat(path,myargv[0]);

//替換進程 例如:/bin/ls

execv(path,myargv);

perror("\033[;31mexecv error\033[0m");

}

//處理僵死進程

else

{

wait(NULL);

}

}

}

運行結果如下 :

異常處理如下:

若是第一次運行程序,則不能使用cd - 命令,因為此時還沒有歷史路徑

若進入一個不存在的目錄則會報錯,沒有這個文件或目錄

若直接輸入一個不存在的無法識別的命令,也會報錯。

⑼ 小弟有一個Linux操作系統課程留的實驗:寫一個mygetcwd()函數,要求顯示當前工作目錄,不

相關函數:get_current_dir_name, getwd, chdir

頭文件:#include <unistd.h>

定義函數:char * getcwd(char * buf, size_t size);

函數說明:getcwd()會將當前的工作目錄絕對路徑復制到參數buf 所指的內存空間,參數size 為buf 的空間大小。

註:
1、在調用此函數時,buf 所指的內存空間要足夠大。若工作目錄絕對路徑的字元串長度超過參數size 大小,則返回NULL,errno 的值則為ERANGE。
2、倘若參數buf 為NULL,getcwd()會依參數size 的大小自動配置內存(使用malloc()),如果參數size 也為0,則getcwd()會依工作目錄絕對路徑的字元串程度來決定所配置的內存大小,進程可以在使用完次字元串後利用free()來釋放此空間。

返回值:執行成功則將結果復制到參數buf 所指的內存空間, 或是返回自動配置的字元串指針. 失敗返回NULL,錯誤代碼存於errno.

範例
#include <unistd.h>
main()
{
char buf[80];
getcwd(buf, sizeof(buf));
printf("current working directory : %s\n", buf);
}

執行:
current working directory :/tmp

閱讀全文

與getcwdlinux相關的資料

熱點內容
鏤空加密隔斷牆效果圖 瀏覽:539
windows7怎麼安裝證書伺服器 瀏覽:952
證券業務的程序員 瀏覽:202
u點伺服器wifi密碼如何設置 瀏覽:864
寶馬x5大燈編程 瀏覽:673
python安裝和使用 瀏覽:381
加密的門禁卡復制了用不了 瀏覽:714
javacsv讀寫 瀏覽:806
ug編程教程pdf 瀏覽:763
latex編譯軟體安卓版 瀏覽:248
如何在信合app上交居民醫保 瀏覽:109
丑惡pdf 瀏覽:365
陝西定頻壓縮機銷售公司 瀏覽:795
安卓系統如何幫人打王者 瀏覽:427
sbtlinux安裝 瀏覽:141
阿里雲sip伺服器 瀏覽:73
身為程序員的你怎麼拚命 瀏覽:453
android圖片手勢放大 瀏覽:586
錢的所有演算法 瀏覽:13
光模塊伺服器怎麼直接連電腦 瀏覽:376