linux--文件编程(4)

来源:互联网 发布:js正则匹配数字和字母 编辑:程序博客网 时间:2024/06/07 18:02

系统调用

概念:指操作系统提供给用户程序的一组“特殊”接口(API),用户程序可以通过这组“特殊”接口来获得操作系统内核提供的特殊服务。

linux运行空间氛围内核空间和用户空间
这里写图片描述

文件编程可以使用两种方式一是Linux系统调用,二是C语言库函数,前者依赖于Linux操作系统,后者与操作系统是独立的

文件I/O

不带缓存:每次写入都读进去
带缓存:写到一定量读入一次

Linux下 (#man 指令) 查看

功能 系统调用 C文件操作 打开 open fopen 创建 creat 文件位置 lseek fseek 读 read fread 写 write fwrite 关闭 close fclose 写一个字符到文件 fputc 文件读取一个字符 fgets 写一串字符到文件 fputs 文件读取一串字符 fgets 格式化输入到文件 fscanf 文件中格式化读取 fprintf
  • 系统调用特殊函数
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 ,则将该文件的位移量设置为其当前值加offsetoffset可为正或负。若whence是SEEK_END ,则将该文件的位移量设置为文件长度加offsetoffset可为正或负。

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
原创粉丝点击