linux--文件编程(4)
来源:互联网 发布:js正则匹配数字和字母 编辑:程序博客网 时间:2024/06/07 18:02
系统调用
概念:指操作系统提供给用户程序的一组“特殊”接口(API),用户程序可以通过这组“特殊”接口来获得操作系统内核提供的特殊服务。
linux运行空间氛围内核空间和用户空间
文件编程可以使用两种方式一是Linux系统调用,二是C语言库函数,前者依赖于Linux操作系统,后者与操作系统是独立的
文件I/O
不带缓存:每次写入都读进去
带缓存:写到一定量读入一次
Linux下 (#man 指令) 查看
- 系统调用特殊函数
1.fcntl函数(功能:改变已经打开文件的性质)2.ioctl函数(功能:设置特殊属性(如波特率、停止位))
重点
#include <stdio.h>#include <stdlib.h>#include <string.h>//argc表示输入参数个数,argv指向argc的参数int main(int argc, char **argv){ char *file_name = "kkkk"; FILE *fp; int ts_i; int ts_j; char cts_c; char buf[128]; char string[]="Thisisatest"; char msg[20]; char msg2[20]; //1.打开文件 fp = fopen(file_name, "w+"); if (fp == NULL) { return -1; } memset(buf, 0 , sizeof(buf)); memset(msg2, 0 , sizeof(msg2)); //2.格式化写入文本 fprintf(fp, "%d,%s", 1, "abcd"); //3.移动位置到最前面 fseek(fp,0L,SEEK_SET); //4.fgetc一个个读出 while((ts_j=fgetc(fp))!=EOF) printf("%c",ts_j); printf("\n"); fseek(fp,0L,SEEK_SET); //2.格式化从文本读出 fscanf(fp,"%d,%s", &ts_i, buf); printf("%d,%s", ts_i, buf); //4.当前开始增加一个字符(增加不覆盖) fputc('\n', fp); //5.写入指定长度字符 fwrite(string,strlen(string),1,fp); fseek(fp,0,SEEK_SET); //6.从文本获取第一行 fgets(msg,strlen(string)+1,fp); fseek(fp,0,SEEK_SET); //5.从文本读出指定长度字符 fread(msg2,3,1,fp); printf("msg=%s",msg); printf("msg2=%s",msg2); //6.写入一行(会覆盖) fputs("hello", fp); //1.关闭 fclose(fp); return 0;}
- linux系统调用
1.open
#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int oflag, …/*, mode_t mode * / ) ;功能:打开文件返回:若成功为文件描述符,若出错为- 1//函数参数pathname:文件名oflag:文件打开属性 O_RDONLY 只读打开。 O_WRONLY 只写打开。 O_RDWR 读、写打开。 O_APPEND 每次写时都加到文件的尾端。 O_CREAT 若此文件不存在则创建它。使用此选择项时,需同时说明第三个参数mode,用其说明该新文件的存取许可权位。 O_EXCL 如果同时指定了O_CREAT,而文件已经存在,则出错。这可测试一个文件是否存在,如果不存在则创建此文件成为一个原子操作。 O_TRUNC 如果此文件存在,而且为只读或只写成功打开,则将其长度截短为0。(先清空文件里面内容,后加入)mode:创建新文件才需要的属性
2.create
#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int creat(const char * pathname, mode_t mode) ;功能:创建一个新的文件。返回:若成功为只写打开的文件描述符,若出错为- 1。注意,此函数等效于:open (pathname, O_WRONLY | O_CREAT | O_TRUNC, mode) ;creat的一个不足之处是它以只写方式打开所创建的文件。
3.close
#include <unistd.h>int close (int filedes);功能:关闭一个打开文件返回:若成功为0,若出错为- 1 当一个进程终止时,它所有的打开文件都由内核自动关闭。很多程序都使用这一功能而不显式地用close关闭打开的文件。
4.lseek函数
#include <sys/types.h>#include <unistd.h>off_t lseek(int filesdes, off_t offset, int whence) ;功能:设置文件内容读写位置返回:若成功为新的文件位移,若出错为- 1。对参数offset 的解释与参数whence的值有关。若whence是SEEK_SET,则将该文件的位移量设置为距文件开始处offset 个字节。若whence是SEEK_CUR ,则将该文件的位移量设置为其当前值加offset,offset可为正或负。若whence是SEEK_END ,则将该文件的位移量设置为文件长度加offset,offset可为正或负。
5.read
#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);功能: 从打开文件中读数据返回:读到的字节数,若已到文件尾为0,若出错为- 1
6.write
#include <unistd.h>ssize_t write(int fd, const void *buf, size_t count);功能;向打开文件写数据。返回:若成功为已写的字节数,若出错为- 1。
- C文件操作
1.fopen
#include<stdio.h>FILE *fopen(const char *path,const char *mode)函数功能:打开一个文件返回值:文件顺利打开后,指向该流的文件指针就会被返回。若文件打开失败则返回NULL,并把错误代码存在error中。参数说明path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。Mode有下列几种形态字符串:r 打开只读文件,该文件必须存在r+ 打开可读写的文件,该文件必须存在w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。w+ 打开可读写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。a 以附加的方式打开只写文件。若文件不存在则建立,存在则把数据添加在文件末尾2.fflush函数#include<stdio.h>int fflush(FILE *_stream)功能:清除流缓冲区3.feof函数#include <stdio.h>Bool feof(FILE *_stream)功能:检测流上的文件结束符4.access函数int access(const char* pathname,int mode)文件的访问权限判断:判断某文件是否可以进行某种操作(读、写,可执行,是否存在等)
——-剩下的具体百度百科
0 0
- linux--文件编程(4)
- linux编程-文件操作(4)
- linux文件编程(1)
- 文件编程(Linux---C)
- 【Linux库函数编程】文件编程
- Linux 之文件编程(一)
- Linux 之文件编程(二)
- Linux 之文件编程(三)
- Linux之文件编程(四)
- 2、linux文件编程(库函数)
- linux文件编程(1)系统调用
- linux历程--文件编程(系统调用)
- linux之文件编程(一)
- Linux文件编程(系统调用1)
- (二) Unix/Linux 文件编程
- Linux编程(文件描述符)
- linux编程_Makefile文件
- linux编程_Makefile文件
- GUID与MBR
- [AC自动机 fail树 || 后缀数组] BZOJ 3172 [Tjoi2013]单词
- 如何用BitmapFactory来实现图片的简单压缩
- thingking in java 2.11练习(2)(先有static还是先有main?)
- 求二叉树的先序遍历
- linux--文件编程(4)
- 最小公倍数
- java 小知识集锦
- Scala之入门基础学习
- 开门人和关门人
- u-boot与linux内核间的参数传递过程分析
- HDU 1272 小希的迷宫
- [AC自动机 fail树 树状数组] BZOJ 2434 [NOI2011] 阿狸的打字机
- 浅谈我为什么选择用Retrofit作为我的网络请求框架