版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、extern用法 在别的文件中定义的变量,要想在本文件中使用,在别的文件中定义的变量,要想在本文件中使用,必须先用必须先用externextern声明声明,例如:,例如:extern a;extern a;之后就当之后就当成在本文件中定义的变量一样使用成在本文件中定义的变量一样使用 外部变量(即全局变量)是在函数的外部定义的,外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件它的作用域为从变量定义处开始,到本程序文件的末尾。如果外部变量不在文件的开头定义,其的末尾。如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。如果有效的作用范围只限
2、于定义处到文件终了。如果在定义点之前的函数想引用该外部变量,则应该在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字在引用之前用关键字externextern对该变量作对该变量作“外部变外部变量声明量声明”。表示该变量是一个已经定义的外部变。表示该变量是一个已经定义的外部变量。有了此声明,就可以从量。有了此声明,就可以从“声明声明”处起,合法处起,合法地使用该外部变量。地使用该外部变量。staticstatic 类型声明符在类型声明符在C语言里面主要有三个用途:语言里面主要有三个用途:1、声明静态局部变量、声明静态局部变量2、声明静态外部全局变量、声明静态外部全局变量3、声明静态外部
3、函数、声明静态外部函数静态局部变量静态局部变量(与auto对比) 1、 存储空间分配、作用域和生存期存储空间分配、作用域和生存期static分配在静态存储区,作用域仅仅限于声明该变量的函数内部。在程序整个运行期间都不释放,生存期贯穿于程序运行的整个过程。auto类型分配在栈上,属于动态存储类别,占动态存储区空间,作用域仅仅限于声明该变量的函数内部。函数调用结束后自动释放,生存期不过是在声明该变量的函数内部。2、赋初值时的处理方式、赋初值时的处理方式 static静态局部变量在编译时赋初值,即只赋初值一次;auto自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值
4、语句。3、未赋初值时的处理方式、未赋初值时的处理方式 如果在定义局部变量时不赋初值的话:static静态局部变量,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。auto自动变量,如果不赋初值则它的值是一个不确定的值。 int fun (void);int main (void) int x; x=fun(); printf( First transfer function a is %dn, x); x=fun(); printf( Second transfer function a is %dn, x); x=fun(); printf( Third transfer func
5、tion a is %dn, x); return 0; int fun (void) int a=0; a+=100; return a; 程序结果为: First transfer function a is 100 Second transfer function a is 100 Third transfer function a is 100 那么我们稍稍做下修改,将fun中的a定义成static intfun函数如下:int fun (void) static int a=0; a+=100; return a; int fun (void);int main (void) int
6、 x; x=fun(); printf( First transfer function a is %dn, x); x=fun(); printf( Second transfer function a is %dn, x); x=fun(); printf( Third transfer function a is %dn, x); return 0; int fun (void) static int a=0; a+=100; return a; 程序执行结果: First transfer function a is 100 Second transfer function a is
7、200 Third transfer function a is 300 静态外部全局变量静态外部全局变量 在C语言中static还用来声明静态外部全局变量,那么这个全局变量的作用域就被限制在本文件内部。 外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。如果在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字extern对该变量作“外部变量声明”。表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。 static int a;in
8、t fun (void);void fun2(int y);int main (void) int x; fun2(100); x=fun(); printf( First transfer function a is %dn, x); x=fun(); printf( Second transfer function a is %dn, x); x=fun(); printf( Third transfer function a is %dn, x); return 0; int fun (void) a+=100; return a;void fun2(int y) a=y; 程序结果为:
9、 First transfer function a is 200 Second transfer function a is 300 Third transfer function a is 400Linux标准I/O流文件fopen ()函数 表头文件 #include 定义函数 FILE * fopen( const char * path, const char * mode); 函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。mode有下列几种形态字符串:r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该文件必须存在。w 打开只写
10、文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。上述的形态字符串都可以再加一个b字符,如rb、w+b 或ab等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Lin
11、ux都会忽略该字符。返回值 文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中。 #includemain()FILE * fp;fp=fopen ( “noexist”, ”a+”);if (fp= =NULL) return;fclose (fp);fclose() 函数 表头文件 #include 定义函数 int fclose (FILE * stream); 函数说明 fclose()用来关闭先前fopen()打开的文件。此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。返回值 若关文件动作成功则返回0,有错误发
12、生时则返回EOF并把错误代码存到errno。 #include int main() FILE *fp; fp = fopen (aa.txt, r); /以只读方式打开aa.txt文件 if (fp = NULL) printf ( fail to open file !n); return -1; printf(open file successfully !n); fclose (fp);/关闭文件 return 0; fread()函数 表头文件 #include 定义函数 size_t fread(void * ptr,size_t size,size_t nmemb,FILE *
13、stream); 函数说明 fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定。fread()会返回实际读取到的nmemb数目,如果此值比参数nmemb 来得小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或ferror()来决定发生什么情况。返回值 返回实际读取到的nmemb数目。fwrite()函数 表头文件 #include 定义函数 size_t fwrite (const void * ptr,size_t size,size_t nmemb,FILE * st
14、ream); 函数说明 fwrite()用来将数据写入文件流中。参数stream为已打开的文件指针,参数ptr 指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定。fwrite()会返回实际写入的nmemb数目。 返回值 返回实际写入的nmemb数目。rewind()和fseek ()函数 #include void rewind (FILE *fp) 作用:使文件fp的位置指针指向文件开始。 int fseek (FILE *stream, long offset, int whence); 作用:移动文件内部位置指针fseek函数调用形式为: fseek(文件指针,位移
15、量,起始点); 其中:“文件指针”指向被移动的文件。 “位移量”表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB 时不会出错。当用常量表示位移量时,要求加后缀“L”。“起始点”表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾。其表示方法如表。 起始点 表示符号 数字表示 文件首 SEEK-SET 0 当前位置 SEEK-CUR 1 文件末尾 SEEK-END 2 例如: fseek(fp,100L,0);其意义是把位置指针移到离文件首100个字节处。还要说明的是fseek函数一般用于二进制文件。在文本文件中由于要进行转换,故往往计算的位置会出现错误
16、。文件的随机读写在移动位置指针之后, 即可用前面介绍的任一种读写函数进行读写。由于一般是读写一个数据据块,因此常用fread和fwrite函数。下面用例题来说明文件的随机读写。 int main(void) FILE *fp; char msg = this is a test; char buf20; if (fp = fopen(DUMMY.FIL, w+)= NULL) fprintf ( stderr, Cannot open output file.n); return -1; fwrite(msg, strlen(msg)+1, 1, fp); /fseek (fp, SEEK_S
17、ET, 0); rewind(fp); fread (buf, 1, strlen(msg)+1, fp); printf(%sn, buf); fclose(fp); return 0; fgetc()函数 表头文件 include 定义函数 fgetc(FILE * stream); 函数说明 fgetc()从参数stream所指的文件中读取一个字符。若读到文件尾而无数据时便返回EOF。 返回值 getc()会返回读取到的字符,若返回EOF则表示到了文件尾。 #includemain()FILE *fp;int c;fp=fopen(“exist”,”r”);while(c=fgetc(f
18、p)!=EOF)printf(“%c”,c);fclose(fp);fputc() 函数 表头文件 #include 定义函数 int fputc(int c,FILE * stream); 函数说明 fputc 会将参数c 转为unsigned char 后写入参数stream 指定的文件中。 返回值 fputc()会返回写入成功的字符,即参数c。若返回EOF则代表写入失败。 #includemain()FILE * fp;char a26=”abcdefghijklmnopqrstuvwxyz”;int i;fp= fopen(“noexist”,”w”);for(i=0;i26;i+)f
19、putc(ai,fp);fclose(fp);fgets()函数 表头文件 include 定义函数 char * fgets(char * s,int size,FILE * stream); 函数说明 fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束。 返回值 fgets()若成功则返回s指针,返回NULL则表示有错误发生。fputs()函数 表头文件 #include 定义函数 int fputs(const char * s,FILE * stream);
20、函数说明 fputs()用来将参数s所指的字符串写入到参数stream所指的文件内。 返回值 若成功则返回写出的字符个数,返回EOF则表示有错误发生。 #includemain()char s80;fputs(fgets(s,80,stdin),stdout);Linux c 编程之系统调用 open,打开一个文件或设备。 close,关闭一个打开的文件或设备。 read,从一个打开的文件或者设备中读取信息。 write,写入一个文件或设备。open ( )函数 表头文件 #include#include#include 定义函数 int open(const char *pathname,
21、int flags); int open(const char *pathname, int flags, mode_t mode); 函数说明:参数pathname 指向欲打开的文件路径或文件名 返回值:成功则返回文件描述符(0-255),否则返回 -1 下列是参数flags 所能使用的旗标:O_RDONLY 以只读方式打开文件O_WRONLY 以只写方式打开文件O_RDWR 以可读写方式打开文件。上述三种旗标是互斥的,也就是不可同时使用,但可与下列的旗标利用OR(|)运算符组合。O_CREAT 若欲打开的文件不存在则自动建立该文件。O_EXCL 如果O_CREAT 也被设置,此指令会去检查
22、文件是否存在。文件若不存在则建立该文件,否则将导致打开文件错误。 此外,若O_CREAT与O_EXCL同时设置,并且欲打开的文件为符号连接,则会打开文件失败。O_NOCTTY 如果欲打开的文件为终端机设备时,则不会将该终端机当成进程控制终端机。 O_TRUNC 若文件存在并且以可写的方式打开时,此旗标会令文件长度清为0,而原来存于该文件的资料也会消失。O_APPEND 当读写文件时会从文件尾开始移动,也就是所写入的数据会以附加的方式加入到文件后面。O_NONBLOCK 以不可阻断的方式打开文件,也是无论有无数据读取或等待,都会立即返回进程之中。O_NDELAY 同O_NONBLOCK。O_SY
23、NC 以同步的方式打开文件。O_NOFOLLOW 如果参数pathname 所指的文件为一符号连接,则会令打开文件失败。O_DIRECTORY 如果参数pathname 所指的文件并非为一目录,则会令打开文件失败。 参数mode 则有下列数种组合,只有在建立新文件时才会生效。S_IRWXU00700 权限,代表该文件所有者具有可读、可写及可执行的权限。 S_IRUSR 或S_IREAD,00400权限,代表该文件所有者具有可读取的权限。S_IWUSR 或S_IWRITE,00200 权限,代表该文件所有者具有可写入的权限。S_IXUSR 或S_IEXEC,00100 权限,代表该文件所有者具有
24、可执行的权限。S_IRWXG 00070权限,代表该文件用户组具有可读、可写及可执行的权限。 S_IRGRP 00040 权限,代表该文件用户组具有可读的权限。S_IWGRP 00020权限,代表该文件用户组具有可写入的权限。S_IXGRP 00010 权限,代表该文件用户组具有可执行的权限。S_IRWXO 00007权限,代表其他用户具有可读、可写及可执行的权限。S_IROTH 00004 权限,代表其他用户具有可读的权限S_IWOTH 00002权限,代表其他用户具有可写入的权限。S_IXOTH 00001 权限,代表其他用户具有可执行的权限。 creat ()函数 表头文件 #inclu
25、de#include#include 定义函数 int creat(const char * pathname, mode_t mode); creat()相当于使用下列的调用方式调用open()open(const char *pathname ,(O_CREAT|O_RDONLY|O_TRUNC); 返回值:文件描述符(成功)或者 -1(出错) read()函数 表头文件 #include 定义函数 ssize_t read(int fd,void * buf ,size_t count); 函数说明 read()会把参数fd 所指的文件传送count个字节到buf指针所指的内存中。若参数
26、count为0,则read()不会有作用并返回0。返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动。 #include #include #include int main() char c int in, out; in = open(file.in, O_RDONLY); out = open(file.out,O_WRONLY | O_CREAT,S_IWUSR | S_IRUSR); while (read(in,&c,1) = 1) write(out,&c,1); exit(0); write ()函数 表头文件 #include 定义
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 枞阳县检察官、法官入员额考试真题(附答案)
- 司法鉴定中心资产评估鉴定人招聘面试模拟题及答案
- 小儿血液专科练习题库答案
- 红十字救护员考试题答案
- 市场战略面试题库及答案
- 施工项目人员考核制度
- 掘进队绩效考核制度
- 钢铁厂质量考核制度
- 幼儿园绩分考核制度
- 各级护理人员考核制度
- 2026年马年德育实践作业(图文版)
- 2026春译林8下单词表【Unit1-8】(可编辑版)
- 2025至2030生物燃料酶行业调研及市场前景预测评估报告
- 2025中国即饮咖啡市场趋势报告-欧睿咨询
- 护士心理护理操作规程
- 跨境电商案例分析
- 聚丙烯酰胺安全培训课件
- 广州某国际机场航班延误旅客服务与应急处理办法
- 共享单车项目2025年经济效益与社会效益综合评价方案
- 阶梯式早期活动在ICU机械通气患者中的应用课件
- 上海市海绵城市建设技术标准图集DBJT08-128-2019 2019沪L003、2019沪S701
评论
0/150
提交评论