❶ c语言在头文件中调用函数
你把#include "lab1.c"加在主函数头文件中看看!并且把 lab1.h 和lab1.c 这两个文件都放到与主函数同一个目录下.
❷ 用C语言批量更改文件名
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
#include <iconv.h>
#include <errno.h>
/*int to_iconv(char *in,size_t in_bytes,char *out,size_t out_bytes,
const char *from,const char *to)*/
int to_iconv(char *in,char *out,size_t out_bytes,const char *from,const char *to)
{
iconv_t cd;
size_t in_bytes=strlen(in);
//size_t out_bytes;
if((cd=iconv_open(to,from)) == (iconv_t)-1)
{
perror("iconv_open");
return -1;
}
if(iconv(cd,&in,&in_bytes,&out,&out_bytes) == -1)
{
perror("iconv");
return -1;
}
iconv_close(cd);
return 0;
}
void read_and_iconv(char *path,const char *from,const char *to)
{
DIR *dirp;
struct dirent *dir;
struct stat buf;
char temp[512]; //用于保存转换后的文件名称
if((dirp=opendir(path)) == NULL) //读取文件夹
{
perror("opendir");
return;
}
chdir(path); //进入到该文件夹内部
while(dir=readdir(dirp)) //读取该文件夹下所有文件
{
if((strcmp(dir->d_name,".") == 0) || (strcmp(dir->d_name,"..") == 0))
//过滤掉.以及..文件夹,不然会死循环的
continue;
bzero(temp,sizeof(temp));
to_iconv(dir->d_name,temp,sizeof(temp),from,to); //进行编码转换
rename(dir->d_name,temp); //进行重命名
printf("rename %s to %s\n",dir->d_name,temp);
stat(temp,&buf);
if(S_ISDIR(buf.st_mode)) //判断当前读取的文件是否为文件夹
{
read_and_iconv(temp,from,to); //如果是则递归处理
chdir(".."); //处理完成后一定要记得返回上一层目录哦,不然其它文件就无法处理了
}
}
closedir(dirp);
}
int main(int argc,char **argv)
{
read_and_iconv(argv[1],argv[2],argv[3]);
/*第一个参数是要转换的文件夹所在的文件夹名称
*第二个参数是文件名称所使用的编码(这里为GBK)
*第三个参数是要转换成何种编码(这里为UTF-8)
*/
return 0;
}
❸ Linux文件系统C语言编程的一道编程题目求解答。
#
包括
#包括
定义MAXSIZE 20
:(INT ARGC的char * argv的[])
{
INT M,N,??FD1,FD2;
个char [MAXSIZE];
(ARGC == 4 &&(* + + argv的)[0 ] ==' - '&& * + + * argv的=='R'&& * + + * argv的=='I')
((FD1 =打开(* + + argv的,O_RDONLY))> 0 &&(FD2 =打开(* + + argv的,O_WRONLY))> 0)
((N =读(FD1,MAXSIZE))> 0)
(写(FD2,S, N)= N &&使用lseek(FD2,0,SEEK_CUR)!= -1);
其他
printf的(“写入错误”);
其他
printf的(“开放错误“);
(N <0)
printf的(”读取错误“);
返回0;
}
利用课余时间我可以从字面上编程(你在哪里得到啊)
不明白的可以发送消息^ _ ^
❹ c语言 怎么查找 当前目录有哪些 文件
在命令提示符窗口运行:findfile (盘符): *.(文件后缀)
如:[sourcecode language=”plain”]findfile d: *.txt [/sourcecode]
即为找出d盘根目录下的所有.txt后缀的文件并写入文件路径于文件中。
❺ C语言读取txt文件,思路如下:
#include <stdio. h>
#include <string. h>
void main()
{
FILE *fp;
char name[128],path[128];
fp = fopen("F:\\list.txt","r")
if(fscanf(fp,"%s %s",name,path)!=EOF)
{
if( strcmp(name,"11汉宫秋月")==0)
printf("%s",path)
}
else
printf("没有找到")
}
❻ linux c glob()函数详细的使用方法,将man glob 的英文翻译出来也行
GLOB
Section: Linux Programmer's Manual (7)
Updated: 12 June
1998
Index
NAME
glob - 形成路径名称
描述 (DESCRIPTION)
很久以前 在 UNIX V6 版 中 有一个 程序 /etc/glob 用来 展开 通配符模板.
不久以后 它 成为 shell 内建功能. 现在 人们 开发了 类似的 库函数 glob(3), 让 用户程序 实现 同样的 功能.
此 规则 遵循 (POSIX 1003.2, 3.13).
通配符匹配 (WILDCARD MATCHING)
包含 '?', '*' 或 '[' 字符的 字符串 称为 通配符模板(wildcard
pattern). 形成路径名(globbing) 指 一种 操作, 把 通配符模板 展开为 匹配 该串的 路径名. 匹配 定义为:
不在 方括号中 的 '?' 匹配 任意 单个 字符.
不在 方括号中 的 '*' 匹配 任意 字符串, 包括 空串.
字符集 (Character classes)
对于 表达式 `[...]', 如果 在 第一个 '['符 后面 出现的 第一个 字符 不是
'!', 则 该 表达式 匹配 任意 一个 在 `[...]'内 出现的 字符. 方括号内 不能 有 空串, 因此 ']' 可以 作为 第一个 字符 出现在
方括号内. (像 这样, '[][!]' 匹配 下列三个 字符 中的 任意 一个, '[', ']' 和 '!'.)
范围集 (Ranges)
字符集 有一个 特例: 用 '-' 分开的 两个 字符 表示 一个 范围集. (像 这样, `[A-Fa-f0-9]'
等于 `[ABCDEFabcdef0123456789]'.) 把 '-' 放到 方括号内 的 开头 或 最后 可以 获得 它的 本意. (像 这样,
`[]-]' 匹配 ']'和'-' 中 任意 一个. 而 `[--/]' 匹配 `-', `.' 和`/'中任意 一个.)
补集 (Complementation)
表达式 '[!...]' 表示 一个 字符, 该 字符 不匹配 方括号内 去掉 开头 '!' 后的
表达式. (像 这样, `[!]a-]' 匹配 除了 ']', 'a' 和 '-' 的 任意 一个 字符.)
要 去掉 '?', '*' 和 '[' 的 特殊 含义, 可以 通过 前面 加 一个 反斜杠; 或者 在 shell 命令行 中, 通过 引号 来 引用
这些 字符. 在 方括号内 这些 字符 显露出 本意, 所以, '[[?*\]' 匹配 这 四个字符中 的 一个: '[', '?', '*', '\'.
路径名 (PATHNAME)
形成路径名 功能 应用于 路径 中 的 每一个 成员部分. 路径 中 的 '/' 不能 被通配符 '?' 或
'*', 或 范围集 如 '[.-0]' 匹配. 范围集 不能 直接 包含 '/', 否则 导致 语法错误.
如果 待匹配的 文件名 以'.'开头, 那么 这个 '.' 字符 必须 直接 给出. (比如说, 用 'tar c .' 会 更好.)
空列表 (EMPTY LISTS)
上述的 简单优雅 规则, 把 通配符模板 展开为 匹配的 路径名, 来源于 最初的 UNIX 定义. 它
允许 展开出 空串, 例如 xv -wait 0 *.gif *.jpg
这里 可能 没有 *.gif 文件 (而且 不算 错误).
然而, POSIX 要求 句法 错误 或 路径名 列表 为 空 时, 保留 通配符模板 不变. (译注: 即 不展开.)
在 bash 中 可以 通过 设置 allow_null_glob_expansion=true 把 它 强置为 传统的
风格. (其他 地方 也有 类似的 问题, 例如, 老式的 语句 是
rm `find . -name "*~"`
新的 写法 为
rm -f nosuchfile `find . -name "*~"`
以 避免 由于 空参数调用 rm 而 产生 错误信息.)
注意 (NOTES)
正规表达式 (Regular expressions)
注意, 通配符模板 不是 正规表达式, 尽管 它们 有点象. 首先, 它 匹配 文件名,
而 不是 正文; 其次, 规则 不一样, 例如 正规表达式 里 的 '*' 代表 零个或多个 前面内容的 重复.
正规表达式 的 方括号表达式 用 '^' 引导 取反操作, (而不是 '[!...]'). POSIX 声明, 在 通配符模板 中, '[^...]'
未做 定义.
字符集 和 国际化 (Character classes and Internationalization )
当然, 范围集 最初 指
ASCII的 范围, 因此 '[ -%]' 意思是 '[ !"#$%]',
一些 UNIX实现 把 这个 归纳为: 范围 X-Y 指 X的编码 到 Y的编码 之间的编码字符. 可是, 这 要求 用户 知道 他们 本地系统的
字符编码, 此外, 如果本地的 字母表顺序 和 字符集顺序 不对应, 那 就 更不方便了.
因此, POSIX 对 通配符模板 和 正规表达式 的 方括号表达法 作了 重大扩展, 上面 我们 知道了 方括号表达式 中 的 三个 类型, 它们是
(i) 取补集 (ii) 直接列出的 单个字符 和 (iii) 范围集.
POSIX 对 范围集 在 国际化 方面 作了 更有力的 说明, 并且 增加了 三个 类型:
(iii) 范围 X-Y 由 X 和 Y 之间 所有的字符 组成 (包括X和Y), X 和 Y 的 当前编码序列 由 当前场合的 LC_COLLATE
分类定义.
(iv) 命名字符集, 象
[:alnum:] [:alpha:] [:blank:] [:cntrl:]
[:digit:] [:graph:] [:lower:] [:print:]
[:punct:] [:space:] [:upper:] [:xdigit:]
因此 可以 用 '[[:lower:]]' 代替 '[a-z]', 它 在 丹麦语 里 同样 有效, 虽然 丹麦的 字母表 里 'z' 后面 还有
三个 字母. 这些 字符集 由 当前场合的 LC_CTYPE 分类定义.
(v) 符号对映, 象 '[.ch.]' 或 '[.a-acute.]', 在 '[.' 和 '.]' 之间的 字符串 是 定义 在 当前场合的
对映元素. 注意 这 可以 是 多字符元素.
(vi) 等类表达式, 象 '[=a=]', 在 '[=' 和 '=]' 之间的 字符串 是 任意 等类 中 的 对映元素, 它 定义在 当前场合.
例如, '[[=a=]]' 可以 等同于 `[a徉溻]' (警告: 这里 有 Latin-1 字符), 也就是
`[a[.a-acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]'.
SEE ALSO
sh(1), glob(3), fnmatch(3),
locale(7), regex(7)
❼ PHP中glob()函数查找指定后缀名的文件
建议参考以下代码
.
<?php
functionfindFiles($directory,$extensions=array()){
functionglob_recursive($directory,&$directories=array()){
foreach(glob($directory,GLOB_ONLYDIR|GLOB_NOSORT)as$folder){
$directories[]=$folder;
glob_recursive("{$folder}/*",$directories);
}
}
glob_recursive($directory,$directories);
$files=array();
foreach($directoriesas$directory){
foreach($extensionsas$extension){
foreach(glob("{$directory}/*.{$extension}")as$file){
$files[$extension][]=$file;
}
}
}
return$files;
}
var_mp(findFiles("C:",array(
"jpg",
"pdf",
"png",
"html"
)));
?>
把C:改成你需要查找的路径,里面放后缀,测试可用。
❽ 会c语言的帮帮忙,我可以通过c语言将多个txt文件合并成一个,问题是太多了麻烦,就想把txt的文件名写到一
用DOS 命令 total.txt + a1.txt + a2.txt + a3.txt + an.txt
就可以把 a1.txt + a2.txt + a3.txt + an.txt 合并到 total.txt 里。
用 system() 执行 DOS命令 就可以了。
#include <stdio.h>
main(){
char cm[200]="COPY total.txt" ;
char f[20];
int i,n=12;
for (i=1;i< n;i++){
sprintf(f," +a%d.txt",i); // 用这句产生 " +ai.txt" , i=1 到 n, n=12
strcat(cm,f); // 产生 COPY total.txt +a1.txt + a2.txt .....
}
printf("%s\n",cm); // 检查
// system(cm); // 去掉注解符号就可执行
return 0;
}
❾ glob in Perl
glob再Perl里有两个意思,一个是数据类型“类型团”(Typeglob),一个是函数。您应该说清楚。
如果您说的是前者:
----------------------------
Perl 里面有种特殊的类型叫类型团(typeglob)用以保留整个符号表记录。(符号表记录 *foo 包括 $foo, @foo, %foo,&foo 和其他几个 foo 的简单解释值。)类型团(typeglob)的类型前缀上一个 *,因为它代表所有类型。
类型团(typeglob)(或由此的引用)的一个用途是是用于传递或者存储文件句柄。如果你想保存一个文件句柄,你可以这么干:
$fh = *STDOUT;
或者作为一个真的引用,象这样:
$fh = \*STDOUT;
这也是创建一个本地文件句柄的方法,比如:
sub newopen {
my $path = shift;
local *FH; # 不是my() 或 our ()
open(FH,$path ) or return undef;
return *FH: # 不是\*FH!
}
$fh = newopen('/etc/passwd');
参阅 open 函数获取另外一个生成新文件句柄的方法。
类型团如今的主要用途是把一个符号表取另一个符号表名字做别名。别名就是外号,如果你说:
*foo = *bar;
那所有叫“foo”的东西都是每个对应的叫“bar”的同意词。你也可以通过给类型团赋予引用实现只给某一个变量取别名:
*foo = \$bar;
这样 $foo 就是 $bar 的一个别名,而没有把 @foo 做成 @bar 的别名,或者把 %foo 做成 %bar 的别名。所有这些都只影响全局(包)变量;词法不能通过符号表记录访问。象这样给全局变量别名看起来可能有点愚蠢,不过事实是整个模块的输入/输出机制都是建筑在这个特性上的,因为没有人要求你正在当别名用的符号必须在你的名字空间里。因此:
local *Here::blue = \$There::green;
临时为 $There::green 做了一个叫 $Here::blue 的别名,但是不要给 @There:green 做一个叫 @Here::blue 的别名,或者给 %There::green 做一个 %Here::blue 的别名。幸运的是,所有这些复杂的类型团操作都隐藏在你不必关心的地方。参阅第八章的“句柄参考”和“符号表参考”,第十章的“符号表”,和第十一章,模块,看看更多的关于类型团的讨论和重点。
----------------------------
如果您说的是后者:
----------------------------
glob EXPR
glob
这个函数把 EXPR 的值带着 shell 那样的文件名扩展返回。它是实现 <*> 操作符的内部函数。
由于历史原因,这个算法和 csh(1) 的扩展风格相匹配,而不是 Bourne shell 的。早于 5.6 版本的 Perl 使用了一个外部的处理,但 5.6 及以后的版本在内部进行聚团的工作。那些第一个字符是点(“.”)的文件被忽略,除非这个字符是明确匹配的。一个星号(“*”)匹配任意字符的任意序列(包括空)。一个问号(“?”)匹配任意一个字符。一个方括号序列(“[ ... ]”)声明一个简单的字符表,比如“[chy0-9]”。字符表可以用音调符号取反,象“*.[^oa]”,它匹配任意非点文件,这些文件的文件名博爱喊一个点,后面跟着一个字符在文件名尾部,但这个字符既不能是“a”也不能是“o”。一个波浪号(“~”)扩展成一个家目录,象“~/.*rc”是指当前用户的所有 “rc”文件,或者“~jane/Mail/*”似乎所有 Jane 的邮件文件。花括号可以用于候补,象在“!/.{mail,ex,csh,twm,}rc”里面的是获取那些特定的 rc 文件。
如果你想聚集那些可能包含空白的文件名,你坑内需要直接使用 File::Glob 模块,因为老祖父 glob 把空白用于分隔多个模式,比如 <*.c *.h>。更多细节,请参阅第三十二章的 File::Glob。调用 glob (或者 <*> 操作符)自动 use 该模块,因此如果该模块莫名其妙地从你的库里消失了,那么就会抛出一个例外。
当你调用 open 的时候,Perl 并不扩展通配符,包括波浪号。你需要先把结果 glob 起来。
open(MAILRC, "~/.mailrc") # 错:波浪号是一个 shell 的东西
or die "can't open ~/.mailrc: $!";
open(MAILRC, (glob("~/.mailrc"))[0]) # 先扩展波浪号
or die "can't open ~/.mailrc: $!";
glob 函数和 Perl 的类型团的概念没有任何关系,只不过它们都用 * 代表多个项。
----------------------------