导航:首页 > 操作系统 > 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相关的资料

热点内容
pso算法优化参数 浏览:606
java打开pdf文件怎么打开 浏览:369
用银行家算法拒绝死锁的例题 浏览:670
洗盘选股指标源码 浏览:705
百度云盘下载的压缩包怎么解压 浏览:737
加密类型是TKIP被我弄掉了 浏览:234
贝刻智能手环app如何下载 浏览:838
公司电脑上的加密文件解密 浏览:462
服务器怎么配置数据库 浏览:889
压缩机和制冷剂 浏览:182
树莓派手机版编程 浏览:926
谷歌编程挑战赛时间安排 浏览:438
自动学习机源码 浏览:938
明日之后星曳镇是什么服务器 浏览:474
编程学有年龄限制吗 浏览:571
工程可靠度pdf 浏览:900
包子解压玩具会爆吗 浏览:143
资治通鉴柏杨版pdf 浏览:852
跆拳道pdf 浏览:205
程序员毕设可以攻哪个方向 浏览:427