关于终端
c4droid吧
全部回复
仅看楼主
level 9
hhkern 楼主
最近在终端编译源码,在Ubuntu和Windows下用gcc 命令生成的代码都可以运行,但是在安卓上不能运行(其实是权限原因,在网上搜索居然都是嵌入式单片机之类的和这个错误提示一样)于是怀疑是不是我用gcc参数搞错了,生成的到底是未连接的目标文件,还是连接后的可执行目标文件,于是查到有一个命令“file”可以查看到一下东西,在Ubuntu下用这个命令查看对比了这两个类型目标文件,发现编译确实没错,可惜在终端下没有这个命令文件,于是这几天脑抽的对命令感兴趣起来了,想学习一下命令,但是不知道这些命令在哪里,Ubuntu下有which命令可以查看命令所在的目录,但是安卓终端,和Windows下没有这个命令,于是想自己动手写一个,原理很简单就是历遍环境变量PATH,然后查找这些目录下是否有这个文件,现在已经获取到所有命令的目录,但是怎么查找到这个文件呢,最初用打开文件的方式if(file=fopen(路径/文件名)),但是文件如果不存在,会提示指针越界,程序没法继续下去,有没有一种简单方法判断一个文件是否存在(不带文件后缀)?
2016年02月02日 14点02分 1
level 13
FILE*f=fopen(const char*);
if(f)
2016年02月02日 14点02分 2
FILE* file=NULL; if(file=fopen(buff,"rb")) //buff是一个完整的路径在,我是这样写的,但是文件不存在,会指针越界,没法继续文
2016年02月02日 14点02分
@hhkern 你这样是不行的,就算是没错误也会导致内存泄露
2016年02月02日 14点02分
fopen(const char*,const char*);[滑稽]
2016年02月02日 15点02分
2016年02月02日 15点02分
level 9
hhkern 楼主
Segmentation fault
2016年02月02日 14点02分 3
level 9
hhkern 楼主
FILE* file=NULL;
if(file=fopen(buff,"rb"))
//buff是一个完整的路径
2016年02月02日 14点02分 4
FILE*fp=NULL; fp=fopen("storage/sdcard0/aaa.c","r"); if(fp==NULL) puts("空");
2016年02月02日 15点02分
没区别吧,
2016年02月02日 15点02分
level 12
dirent.h
获取目录
然后对比
你都学得这么深了[不高兴]
请允许我叫你大神
2016年02月02日 14点02分 5
不敢当,我只是什么都喜欢玩玩,从来没有写个超过100行的代码
2016年02月02日 14点02分
level 13
判断文件是否存在不需要fopen
#include <unistd.h>
#include <stdlib.h>
if (access("文件", R_OK) == 0) {
// 文件存在
}
2016年02月02日 16点02分 6
2016年02月02日 16点02分
只写文件名不写文件后缀可以吗
2016年02月03日 13点02分
level 13
还可以用5楼的方法
2016年02月02日 16点02分 7
level 13
如果fopen(path, mode)出现错误
1. 检查 path 是否为 NULL
2. 检查 mode 是否正确
3. 当mode为读时,检查文件是否存在
4. 可打开的文件数是否已达上限
5. 磁盘IO错误
2016年02月02日 16点02分 9
level 13
// 我真是渣到不能要了…
#include <fstream>
bool accessible(const char *file)
{
static std::ifstream inf;
if (inf)
inf.close();
inf.open(file);
return inf;
}
// @_柒月初七
2016年02月02日 16点02分 11
这…………
2016年02月03日 13点02分
这个对象不用文件名作为参数,不管怎样都会创建成功的吧,
2016年02月03日 13点02分
再者这返回类型也不符啊
2016年02月03日 13点02分
@hhkern 看清楚再说话。这里返回值是符合的,operator bool()
2016年02月03日 15点02分
level 12
发下错误
2016年02月03日 15点02分 12
1