打印
[应用相关]

文件编程 linux 函数

[复制链接]
684|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dingbo95|  楼主 | 2019-3-15 23:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Linux中文件编程可以使用两种方法:1.Linux系统调用, 2.C语言库函数
前者依赖Linux系统,后者与操作系统是独立的,在任何操作系统下,使用C语言库函数操作文件的方法都是相同的。

沙发
dingbo95|  楼主 | 2019-3-15 23:41 | 只看该作者
1.系统调用
   1.1创建 int creat(const char *filename,mode_t mode)
      filename:要创建的文件名(包含路径,缺省为当前路径)
      mode:创建模式(可读、可写、可执行)
      常见创建模式:
      S_IRUSR     可读
      S_IWUSR    可写
      S_IXUSR     可执行
      S_IRWXU    可读、写、执行

使用特权

评论回复
板凳
dingbo95|  楼主 | 2019-3-15 23:41 | 只看该作者
1.2打开
      int open(const char*pathname, int flags)
      int open(const char*pathname, int flags,mode_t mode)
      pathname: 要打开的文件名(包含路径,缺省为当前路径)
      flags:打开标志

使用特权

评论回复
地板
dingbo95|  楼主 | 2019-3-15 23:42 | 只看该作者
1.3 关闭
      int close(int fd) fd:打开文件成功后的返回值

使用特权

评论回复
5
dingbo95|  楼主 | 2019-3-15 23:42 | 只看该作者
1.4 读Int read(int fd,const void*buf,size_t length)
      功能:
      从文件描述符fd所指的文件中读取length个字节到buf所指向的缓冲区中,返回值为实际读取的字节数。

使用特权

评论回复
6
dingbo95|  楼主 | 2019-3-15 23:43 | 只看该作者
1.5写Int write(int fd,const void*buf,size_t length)
       功能:
      把length个字节从buf指向的缓冲区中写到文件描述符fd所指向的文件中,返回值为实际写入的字节数。

使用特权

评论回复
7
dingbo95|  楼主 | 2019-3-15 23:43 | 只看该作者
1.6 定位 int iseek(int  fd,offset_t offset, int whence)
       功能:
      将文件读写指针相对whence移动offset个字节。操作成功后,返回文件指针相对于文件头的位置。
      Whence可以使用下述值
      SEEK_SET:相对开头
      SEEK_CUR:相对文件读写指针的当前位置
      SEEK_END:相对文件末尾
      offset可取负值,表示向前移动

使用特权

评论回复
8
dingbo95|  楼主 | 2019-3-15 23:43 | 只看该作者
例: Iseek(fd,-5,SEEK_CUR)将文件指针相对于当前位置向前移动5个字节

使用特权

评论回复
9
dingbo95|  楼主 | 2019-3-15 23:44 | 只看该作者
2.C语言库函数 文件访问
2.1创建和打开:FILE *fopen(const char *filename, const char *mode)
    filename:打开的文件名(包含路径,缺省为当前路径)
     mode: 打开模式
     常见打开模式:
     r,  rb   只读方式打开
     w,wb  只写方式打开,如果文件不存在,则创建该文件
     a, ab  追加方式打开,如果文件不存在,则创建该文件
     r+,r+b,rb+   读写方式打开 如果文件不存在,则创建该文件
     w+,w+b,wh+  读写方式打开
     a+, a+b,ab+   读和追加方式打开 如果文件不存在,则创建该文件
     b: 用于区分二进制文件和文本文件,在Dos、windows系统中有区分的,在Linux不区分二进制文件和文本文件。

使用特权

评论回复
10
dingbo95|  楼主 | 2019-3-15 23:44 | 只看该作者
2.2读: size_t fread(void *ptr, size_t size, size_t n, FILE *stream)
功能:从stream指向的文件中读取n个字段,每个字段为size字节,并将读取到的数据放入ptr所指的字符数组中,返回实际已读取的字节数。

使用特权

评论回复
11
dingbo95|  楼主 | 2019-3-15 23:44 | 只看该作者
2.3 从指定文件读一个字符: int fgetc(FILE *stream)
例:
#include<stdio.h>
void main()
{
    FILE  *fp;
    char ch;
    if((fp =fopen(“c1.txt” ,”rt”))==NULL)
    {
      printf(“\n cannot open file strike any key exit!”);
      getch();
      exit(1);
}
ch =fgetc(fp);
while(ch!=EOF)    // 读取的不是结束字符时,一直打印。
{
putchar(ch);
ch=fgetc(fp);
}
fclose(fp);
}

使用特权

评论回复
12
dingbo95|  楼主 | 2019-3-15 23:45 | 只看该作者
2.4 从指定文件写一个字符: int fputc(FILE *stream)
#include<stdio.h>
void main()
{
    FILE  *fp;
    char ch;
    if((fp =fopen(“string” ,”wt+”))==NULL)
    {
      printf(“\n cannot open file strike any key exit!”);
      getch();
      exit(1);
}
printf(“input a string: \n”);
ch =getchar();
while(ch!=’\n’)   
{
fputc(ch,fp);
ch =getchar();
}
printf(“\n”);
fclose(fp);
}

使用特权

评论回复
13
dingbo95|  楼主 | 2019-3-15 23:46 | 只看该作者
2.5 库函数-格式化读: fscanf(FILE *stream, char*format[,argument...])
从一个流中进行格式化输入
#include<stdlib.h>
#include<stdio.h>
int main()
{
  int i;
  printf(“input an integer:”);
  if(fscanf(stdin, “%d”,&i))
    printf(“The integer read was: %i\n”,i);
  return 0;
}

使用特权

评论回复
14
dingbo95|  楼主 | 2019-3-15 23:48 | 只看该作者
2.6 库函数-格式化写Int fprintf(FILE*stream,char*format[,argument])
格式化输出到一个流中
#include<stdio.h>
#include<process.h>
FILE*stream;
void main()
{
  int  i=10;
  double fp=1.5;
  char s[] =”this is a string”;
  char c =’\n’;
  stream = fopen(“fprintf.out”,”w”);
  fprintf(stream,“%s%c”,s,c);
  fclose(stream);
}

使用特权

评论回复
15
dingbo95|  楼主 | 2019-3-15 23:49 | 只看该作者
2.7库函数—定位Int fseek(FILE *stream,long offset, int whence)
Whence:
SEEK_SET:  从文件的开始处开始搜索
SEEK_CUR  从当前位置开始搜索
SEEK_END  从文件结尾处开始搜索

使用特权

评论回复
16
dingbo95|  楼主 | 2019-3-15 23:49 | 只看该作者
2.8 获取路径 char *getcwd(char *buffer,size_t size)
提供有个size大小的buffer,getcwd会把当前的路径名copy到buffer中,如果buffer太小,函数会返回-1;
例:#include<stdio.h>
void main()
{
char buf[80];
getcwd(buf,sizeof(buf));
printf(“current working directory:%sn”,buf);
}

使用特权

评论回复
17
dingbo95|  楼主 | 2019-3-15 23:50 | 只看该作者
2.9 创建目录 int mkdir(char *dir,int mode)
#include<sys/stat.h>
int mkdir(char *dir,int mode)
功能:创建一个新目录。
返回值:0表示成功,-1表示出错。

使用特权

评论回复
18
八层楼| | 2019-4-4 12:43 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
19
观海| | 2019-4-4 12:44 | 只看该作者
帖子内容很不错

使用特权

评论回复
20
guanjiaer| | 2019-4-4 12:49 | 只看该作者
非常不错的资料

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

1197

帖子

5

粉丝