获取工作路径这里介绍两种方法:
1、使用getcwd()函数。
头文件:#include
定义函数:char*getcwd(char*buf,size_tsize)
函数说明:getcwd()会将当前的工作目录绝对路径复制到参数buf所指的内存空间,参数size为buf的空间大小。
实例:
voidgetPath()
{
charpPath[256]={0}
getcwd(buf,256)
printf("filePath:%s\n",pPath)
}
主函数调用此函数运行结果:
filePath:/home/myTest
2、使用readlink()函数
头文件:#include<unistd.h>
函数定义:intreadlink(constchar*path,char*buf,size_tbufsiz)
函数说明:此函数会将参数path的符号连接内容到参数buf所指的内存空间,返回的内容不是前带以NULL作字符串结尾,但会将字符串的字符数返回。若参数bufsiz小于符号连接的内容长度,过长的内容会被截断。成功返回buf长度,失败返回-1。
实例:
voidgetPath()
{
charpPath[256]={0}
intret=-1
ret=readlink("/proc/self/exe",pPath,256)
pPath[ret]="\0"
printf("thefilePath:%s\n",pPath)
}
intmain()
{
getPath()
}
运行敏缺结果:
thefilePath:/home/myTest/a.out
小猿圈Linux讲师提醒大家:每天学习一点技术问题,只要功夫深,铁杵磨成针,学习不是一朝一夕的,是需要付出行动的,而且还要坚持,学习新的技术需要不断的查阅资料,看视频,复习,练习,如果你工作中或者生活中遇到什么问题,可以到小猿圈去寻找答案的,相信会给你满意的答复
1. 如果程序不是由自己做,这是一个糟糕的计划。糟糕的程序应包有一点的Bash脚本:#!/bin/bashset -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
}
单词发音英语:read 音标[ri:d] 汉义:读 例子:I want to read a book . 我想读一本书。 The sign reads "No Smoking" . 那个标牌写着“禁止吸烟”。
常用词组
read out 1.大声诵读Please read out the names on the list. 请大声念出名单上的名字 read up 1.研读:通过阅读族凳进行研究或学习Read up on the places you plan to visit before you travel. 拍冲 在旅游之前,对你准备前往的地方先作一番调查研究 read someone like a book 1.了解…的心思(或动机);对…了如指掌 read someone's mind (或 thoughts) 1.猜透…的心思,知道…在想些什么 read my lips 1.(北美,非正式)请认真听(用来强调所说的话的重要性或表达说话人迫切的心情) take something as read 1.不加讨论地接受 you wouldn't read about it 1.(澳/新西兰,非正式)太离奇了(用来表示怀疑、厌恶、悲伤) read something back 1.朗读信息(或书面材料)(以检验其准确性);重念,复述 read something into 1.把…加进对…的理解中去;对…做某种解释Was I reading too much into his behaviour?. 我是否对他的行为做了过于武断的解释?。 read someone out of 1.(主美)(从组织、团体)开除,除名 read up on something (或 read something up)
编辑本段函数名
函数名: read 功 能: 从文件中读 用 法: int read(int handle, void *buf, int nbyte)程序例: #include #include #include #include #include #include int main(void) { void *bufint handle, bytesbuf = malloc(10)/* Looks for a file in the current directory named TEST.$$$ and attempts to read 10 bytes from it. To } if ((bytes = read(handle, buf, 10)) == -1) { printf("Read Failed.\n")exit(1)} else { printf("Read: %d bytes read.\n", bytes)} return 0}
c++中的read函数
函数声明:istream&read( char *buffer, streamsize number )参数说明: buffer:指向缓冲区的字符指针袭穗歼 number:要读多少个字节,不能大于buffer指向的缓冲区 函数读到文件尾或读够number个符,函数终止。 示例: /********************************************* *读取windows系统下的win.ini文件,并显示* **********************************************/ #include <iostream>#include <fstream>//read函数所有的头文件 #include <Windows.h>#include <string>int main() { char buffer[100]char winFilePath[MAX_PATH]GetWindowsDirectoryA(winFilePath,MAX_PATH)strcat(winFilePath,win_ini文件名)//得到win.ini文件绝对路径 std::ifstream win_ini(winFilePath,std::ios::in|std::ios::binary)//构造时关联文件 if(!win_ini 。is_open()) { std::clog<<"打开文件失败"<<std::endlexit(0)} while(!win_ini.eof()) { win_ini.read(buffer,99)buffer[win_ini.gcount()]='\0'//read函数不会在读入的字节中加入 std::cout<<buffer} std::cout<<std::endlwin_ini.close()return 1}
编辑本段Linux C语言
read(由已打开的文件读取数据) 相关函数 readdir,write,fcntl,close,lseek,readlink,fread 表头文件 #include<unistd.h>定义函数 ssize_tread(int fd,void * buf ,size_t count)函数说明 read()会把参数fd 所指的文件传送count个字节到buf指针所指的内存中。若参数count为0,则read为实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动。 附加说明 如果顺利read()会返回实际读到的字节数,最好能将返回值与参数count 作比较,若返回的字节数比要求读取的字节数少,则有可能读到了文件尾、从管道(pipe)或终端机读取,或者是read()被信号中断了读取动作。当有错误发生时则返回-1,错误代码存入errno中,而文件读写位置则无法预期。 错误代码 EINTR 此调用被信号所中断。 EAGAIN 当使用不可阻断I/O 时(O_NONBLOCK),若无数据可读取则返回此值。 EBADF 参数fd 非有效的文件描述词,或该文件已关闭。
编辑本段read 命令
用途 从标准输入中读取一行。 语法 read [ -p ][ -r ][ -s ][ -u[ n ] ] [ VariableName?Prompt ] [ VariableName ... ] 描述 read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量,用 IFS(内部字段分隔符)变量中的字符作为分隔符。VariableName 参数指定 sh定给每一个字段的值,由 VariableName 参数指定的以此类推,直到最后一个字段。如果标准输入行的字段比相应的由 VariableName 参数指定的 shell 变量的个数多,把全部余下的字段的值赋给指定的最后的 shell 变量。如果比 shell 变量的个数少,则剩余的 shell 变量被设置为空字符串。 注意: 如果省略了 VariableName 参数,变量 REPLY 用作缺省变量名。 由 read 命令设置的 shell 变量影响当前 shell 执行环境。名称)读取由 Korn shell 运行的进程的输出作为输入。 注:-p 标志的文件结束符引起该进程的清除,因此产生另外一个进程。 -r 指定读取命令把一个 \ (反斜杠) 处理为输入行的一部分,而不把它作为一个控制字符。 -s shell 的历史记录文件中。 -u [ n ] 读取一位数的文件描述符号码 n 作为输入。文件描述符可以用 ksh exec 内置命令打开。n 的缺省值是 0,表示的是键盘。值 2 表示标准错误。 参数 VariableName?Prompt 指定一个变量的名称和一个要使用的提示符。当 Korn shell 是交互式时,它将把提示符写到标准错误,并执行输入。Prompt 包含多于一个的字,必须用单引号或双引号括起来。 VariableName... 指定一个或多个由空格分隔的变量名。 退出状态 这个命令返回下列出口值: 0 成功完成。 >0 检测到文件结束符或一个错误发生。 示例 1. 下列脚本打印一个文件,这个文件中每行的第一个字段被移动到本行的末尾。 while read -r xx yy do print printf "%s %s/n" $yy $xx done <InputFile 2. 读取一行,把它分成字段,并使用 "Please enter: " 作为提示符,请输入: read word1?"Please enter: " word2 系统显示: Please enter: You enter: hello world 变量 word1 的值应该是 "hello",变量 word2 应该是 "world." 3. 为创建一个共同进程,用 print -p 写到共同进程,并用 read -p 从共同进程中读取输入,请输入: (readprint "hello $REPLY") print -p "world" read-p line 变量 line 的值应该是 "hello world." 4. 为把输入行的副本保存为历史文件中的一个命令,请输入: read -s line <input_file 如果输入文件包含 "echo hello world," ,那么在历史记录文件中将会把 "echo hello world" 保存为一个命令。 read的过去分词形式 原形,只是读音不同。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)