linux文件读写函数|c语言如何读写 linux文本文件

linux文件读写函数|c语言如何读写 linux文本文件的第1张示图

1. linux求解:通过系统调用实现文件的读写,类似于库函数的fprintf和fscanf

1.fscanf():从文件指针fp指向的文件中,按format中对应的控制格式读取数据,并存储在agars对应的变量中;原型: fscanf(FILE *fp, const char *format, agars)#include#includeint main(){ FILE *fp; char ch; fp = fopen("test.txt","r"); if(fp == NULL) { printf("Open filefailure!"); exit(1); } else { fscanf(fp,"%s",&ch); } printf("%s\n",ch); fclose(fp); return 0;}注:对于上面else中的内容需注意一下几点:1.如果要读取一个整数(该整数必须在所存变量的数据类型表示的范围之内)则为:fscanf(fp, “%d”, &ch),而此时ch应该定义为int;若读取的数据大于int所能表示的范围,则读取的数据屏幕显示为负数,即读取的数据发生越界,如果此时的ch依然为char型,则运行时报错(内存读写错误)。2.如果要读取字符串,则ch应该定义为char型数组或指针(指针需分配空间),而不能将其定义为char型,否则也会报错(内存读写错误);3.输出数据时的数据格式应该和读取数据时的控制格式相同,除非进行强制转换。4.使用fscanf()时,其中的变量agars应该取其地址;5.对于文件的操作,记得文件打开操作后要关闭。 对于fscanf()主要应用在按行读取一个文件中的所有内容或依次读取每行相隔的几个数据,具体参照以下示例:#include#include int main(){ FILE *fp; char *ch, *ah; ch =(char *) malloc(sizeof(char) * 100); ah =(char *) malloc(sizeof(char) * 100); fp = fopen("test.txt","r"); if(fp == NULL) { printf("Open filefailure!"); exit(1); } else { while(!feof(fp)) { fscanf(fp, “%s”, ch); printf(“%s”, ch);//这两行为按行读取所有数据 fscanf(fp, “%s%s”, ch, ah); printf(“The value of ch and ah is:%s %s\n”,ch,ah);//这两行为分别读取每行相隔的几个数据 } } printf("%s\n",ch); free(ch); free(ah); fclose(fp); return 0;} 2.fprintf():将agars(参数表)内各项的值,按format(格式控制字符串)所表示的格式,将数据格式为字符串的形式写入到文件指针fp指向的文件中。原型:fprintf(FILE *fp, const char *format, agars)fprintf()和fscanf()相对应,其用法也基本和fscanf()相同。具体参照以下示例:#include#include int main(){ FILE *fp; fp = fopen("test.txt","a+"); fprintf(fp,“%d %d”,123456,789);//将123456和789写到test.txt文件中 fprintf(fp,"%s %s","China","ChongQing"); //将字符串China和ChongQing追加写到test.txt文件中 fclose(fp); return 0;}看我辛苦找的份上给个采纳!

2. 如何在linux内核中读写文件

内核中读写文件1.filp_open()在kernel中可以打开文件,其原形如下: Struct file* filp_open(const char* filename, int open_mode, int mode); 该函数返回strcut file*结构指针,供后继函数操作使用,该返回值用IS_ERR()来检验其有效性。 2. 读写文件(vfs_read/vfs_write)kernel中文件的读写操作可以使用vfs_read()和vfs_write,在使用这两个函数前需要说明一下get_fs()和 set_fs()这两个函数。vfs_read() vfs_write()两函数的原形如下:ssize_t vfs_read(struct file* filp, char __user* buffer, size_t len, loff_t* pos);ssize_t vfs_write(struct file* filp, const char __user* buffer, size_t len, loff_t* pos);注意这两个函数的第二个参数buffer,前面都有__user修饰符,这就要求这两个buffer指针都应该指向用空的内存,如果对该参数传递kernel空间的指针,这两个函数都会返回失败-EFAULT。但在Kernel中,我们一般不容易生成用户空间的指针,或者不方便独立使用用户空间内存。要使这两个读写函数使用kernel空间的buffer指针也能正确工作,需要使用set_fs()函数或宏(set_fs()可能是宏定义),如果为函数,其原形如下:void set_fs(mm_segment_t fs);该函数的作用是改变kernel对内存地址检查的处理方式,其实该函数的参数fs只有两个取值:USER_DS,KERNEL_DS,分别代表用户空间和内核空间,默认情况下,kernel取值为USER_DS,即对用户空间地址检查并做变换。那么要在这种对内存地址做检查变换的函数中使用内核空间地址,就需要使用set_fs(KERNEL_DS)进行设置。get_fs()一般也可能是宏定义,它的作用是取得当前的设置,这两个函数的一般用法为:

3. c语言如何读写 linux文本文件

Linux下C语言的文件(fputc,fgetc,fwrite,fread对文件读写操作)//fputc 向文件写入字符#include <stdio.h>#include <stdlib.h>main(){FILE *fp;char ch;if((fp=fopen("test.txt","w"))==NULL){printf("不能打开文件\n");exit(0);}while ((ch=getchar())!='\n')fputc( ch, fp );fclose(fp);}————-小提示:fp=fopen("test.txt","w") ,把"w"改为 "a" 可以创建文件并且追加写入内容exit(0); 需要包含 stdlib.h 头文件,才能使用//fgetc 读取字符#include <stdio.h>#include <stdlib.h>main( int argc, char *argv[] ){char ch;FILE *fp;int i;if((fp=fopen(argv[1],"r"))==NULL){printf("不能打开文件\n");exit(0);}while ((ch=fgetc(fp))!=EOF)putchar(ch);fclose(fp);}文件结尾,通过判断 EOF//fwrite 的使用使数组或结构体等类型可以进行一次性读写#include <stdio.h>#include <stdlib.h>main(){FILE *fp1;int i;struct student{char name[10];int age;float score[2];char addr[15];}stu;if((fp1=fopen("test.txt","wb"))==NULL){printf("不能打开文件");exit(0);}printf("请输入信息,姓名 年龄 分数1 分数2 地址:\n");for( i=0;i<2;i++){scanf("%s %d %f %f %s",stu.name,&stu.age,&stu.score[0],&stu.score[1], stu.addr);fwrite(&stu,sizeof(stu),1,fp1);}fclose(fp1);}//fread 的使用#include <stdio.h>#include <stdlib.h>main(){FILE *fp1;int i;struct student{char name[10];int age;float score[2];char addr[15];}stu;if((fp1=fopen("test.txt","rb"))==NULL){printf("不能打开文件");exit(0);}printf("读取文件的内容如下:\n");for (i=0;i<2;i++){fread(&stu,sizeof(stu),1,fp1);printf("%s %d %7.2f %7.2f %s\n",stu.name,stu.age,stu.score[0],stu.score[1],stu.addr);}fclose(fp1);}//fprintf , fscanf, putw , getw , rewind , fseek 函数这些函数的话我就不演示了 ,这些函数基本都一对来使用,例如 fputc 和 fgetc 一起来用.

4. linux 有哪些写文件的函数

write, writev, fwrite, fputc, fputs, putc

5. Linux环境编程:打开open函数创建的文件,然后对此文件进行读写操作。。。

#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include<string.h>intmain(){intfd=-1;fd=open("_561804018.dat",O_CREAT|O_TRUNC|O_RDWR,0666);if(fd<0){perror("open");return-1;}charbuff[64];strcpy(buff,"Hello!thisfile!");intcount=strlen(buff);if(write(fd,buff,count)<0){perror("write");return-1;}if(lseek(fd,0,SEEK_SET)<0){perror("lseek");return-1;}if(read(fd,buff,10)<0){perror("read");return-1;}buff[10]=0x00;printf("%s",buff);if(fd>0){close(fd);fd=-1;}return0;}

6. linux下系统调用函数read()

open系统调用open函数的三个参数:(1)path是已经存在的文件的路径;(2)oflags参数:若值为 O_RDONLY ,就以只读方式打开文件;若值为 O_WDONLY,就以只写方式打开文件;若值为 O_RDWR,就以读写方式打开文件;(3)参数mode:文件的权限,对于一个已经存在的文件,参数mode是没有用的,通常将其省略,因此这种情况下open调用只需两个参数。创建新文件:前面已经说到,当文件不存在时,open会创建一个新文件(仅能是普通文件),我们只需要用 or操作向open的 oflags参数中加入标志O_CREAT即可。这样可以创建一个新的只读文件,但是这没有任何意义,因为所创建的新文件没有任何可读内容。因此一般需要 O_CREAT与 O_WRONLY或 O_RDWR一起使用,此时就需要mode参数了。例如:int fd = open("/home/LY/newfile",O_RDWR | O_CREAT,MODE_FILE) 参数mode仅在创建新文件时有效,对于一个已经存在的文件,它没有任何作用。关于open的flags参数:除了以上介绍的 open标志外,open还有许多标志,具体的如下表所示:标志解释O_RDONLY只读方式打开O_WRONLY只写方式打开O_RDWR读写方式打开O_APPEND每次写都追加到文件的尾端O_CREAT若文件不存在则创建文件O_DSYNC设置同步I/O方式O_EXCL如果文件已存在,则出错;必须与O_CREAT一起使用O_NOCTTY不将此设备作为控制终端O_NONBLOCK不等待命名管道或特殊文件准备好O_RSYNC设置同步I/O方式O_SYNC设置同步I/O方式O_TRUNC将其长度截短为0write系统调用write函数的三个参数:(1)fildes: 文件描述符(2)buf:指定写入数据的数据缓冲区(3)nbytes:指定写入的字节数函数返回值:成功:已写的字节数-1 :出错0:未写入任何数据例子:运行结果:read系统调用read函数的三个参数:(1)fildes:文件描述符(2)buf:指定读入数据的数据缓冲区(3)nbytes:指定读入的字节数函数返回值:成功:已读的字节数0:未读入任何数据-1:出错例子:运行结果:close系统调用通过对 close进行分析,我们会发现close并没有做什么实质工作,它没有刷新任何内核缓冲区,而仅仅是使文件描述符可以重用。

7. 如何自己编程实现linux中的read()、write()函数

#!/bin/bashecho -n "Enter your name:" //参数-n的作用是不换行,echo默认是换行read name //从键盘输入版echo "hello $name,welcome to my program" //显示信息exit 0 //退出shell程序权。

8. linux如何读写文件

我不太懂你的意思~如果你要写文件的话,可以输入:#vi 文件名内.文件后缀接着输入数据保存就可容以了~要打开文件可以这样:#vi 文件名.文件后缀读取文件内容#cat 文件名.文件后缀不知道你要问的是不是这些问题~

9. linux 关于文件读写的问题

1. 文件write操作是原子的,多个进程同时写文件,原理上是没问题的。但是问题会出版现在:权如果多个进程写文件时是先lseek再write,就会出现覆盖。打开文件时使用append标志可以使先lseek再write这个操作变成原子操作,这样可以避免覆盖。2. 多线程共享一个文件句柄的话,是不会有问题的。3.4.linux读写磁盘文件过程中,一般情况下并不是直接操作磁盘上的文件,而是读写内存中的磁盘高速缓存,内核选择合适的时机把脏页同步到磁盘。所以读写文件时不立刻调用io不是因为你说的缓冲区,read和write是没有缓冲区的。5. fprintf和printf一样,是有缓冲区的,不过大小我不知道,也没必要知道吧。

10. linux下 用fcnl.h头文件中的文件读写函数, 怎么把1-100的字符串写到一个文件中,且每

open(打开文件) 相关函数 read,write,fcntl,close,link,stat,umask,unlink,fopen 表头文件 #include<sys/types.h>#include<sys/stat.h>#include<fcntl.h> 定义函数 int open( const char * pathname, int flags);int open( const char * pathname,int flags, mode_t mode);函数说明 参数pathname 指向欲打开的文件路径字符串。下列是参数flags 所能使用的旗标:O_RDONLY 以只读方式打开文件O_WRONLY 以只写方式打开文件O_RDWR 以可读写方式打开文件。上述三种旗标是互斥的,也就是不可同时使用,但可与下列的旗标利用OR(|)运算符组合。O_CREAT 若欲打开的文件不存在则自动建立该文件。O_EXCL 如果O_CREAT 也被设置,此指令会去检查文件是否存在。文件若不存在则建立该文件,否则将导致打开文件错误。此外,若O_CREAT与O_EXCL同时设置,并且欲打开的文件为符号连接,则会打开文件失败。O_NOCTTY 如果欲打开的文件为终端机设备时,则不会将该终端机当成进程控制终端机。O_TRUNC 若文件存在并且以可写的方式打开时,此旗标会令文件长度清为0,而原来存于该文件的资料也会消失。O_APPEND 当读写文件时会从文件尾开始移动,也就是所写入的数据会以附加的方式加入到文件后面。O_NONBLOCK 以不可阻断的方式打开文件,也就是无论有无数据读取或等待,都会立即返回进程之中。O_NDELAY 同O_NONBLOCK。O_SYNC 以同步的方式打开文件。O_NOFOLLOW 如果参数pathname 所指的文件为一符号连接,则会令打开文件失败。O_DIRECTORY 如果参数pathname 所指的文件并非为一目录,则会令打开文件失败。此为Linux2.2以后特有的旗标,以避免一些系统安全问题。参数mode 则有下列数种组合,只有在建立新文件时才会生效,此外真正建文件时的权限会受到umask值所影响,因此该文件权限应该为(mode-umaks)。S_IRWXU00700 权限,代表该文件所有者具有可读、可写及可执行的权限。S_IRUSR 或S_IREAD,00400权限,代表该文件所有者具有可读取的权限。S_IWUSR 或S_IWRITE,00200 权限,代表该文件所有者具有可写入的权限。S_IXUSR 或S_IEXEC,00100 权限,代表该文件所有者具有可执行的权限。S_IRWXG 00070权限,代表该文件用户组具有可读、可写及可执行的权限。S_IRGRP 00040 权限,代表该文件用户组具有可读的权限。S_IWGRP 00020权限,代表该文件用户组具有可写入的权限。S_IXGRP 00010 权限,代表该文件用户组具有可执行的权限。S_IRWXO 00007权限,代表其他用户具有可读、可写及可执行的权限。S_IROTH 00004 权限,代表其他用户具有可读的权限S_IWOTH 00002权限,代表其他用户具有可写入的权限。S_IXOTH 00001 权限,代表其他用户具有可执行的权限。返回值 若所有欲核查的权限都通过了检查则返回0 值,表示成功,只要有一个权限被禁止则返回-1。错误代码 EEXIST 参数pathname 所指的文件已存在,却使用了O_CREAT和O_EXCL旗标。EACCESS 参数pathname所指的文件不符合所要求测试的权限。EROFS 欲测试写入权限的文件存在于只读文件系统内。EFAULT 参数pathname指针超出可存取内存空间。EINVAL 参数mode 不正确。ENAMETOOLONG 参数pathname太长。ENOTDIR 参数pathname不是目录。ENOMEM 核心内存不足。ELOOP 参数pathname有过多符号连接问题。EIO I/O 存取错误。附加说明 使用access()作用户认证方面的判断要特别小心,例如在access()后再作open()空文件可能会造成系统安全上的问题。

未经允许不得转载:山九号 » linux文件读写函数|c语言如何读写 linux文本文件

赞 (0)