Linux系统文件编程(1)

打开文件

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

open----返回的是文件描述符是整形数(文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。)打开成功返回非负数,失败返回-1。
pathname----要打开的文件名称。
flags-----是打开文件的权限包含
{
O_RDONLY——只读打开
O_WRONLY——只写打开
O_RDWR——可读可写打开(常用)
}
示例如下

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
int main()
{int fd;fd=open("./file1",O_RDWR);//file1是要打开的文件,fd是文件描述符printf("fd=%d\n",fd);return 0;
}
ps:头文件可用man手册查看

Mode---- 一定是在flags中使用了O_CREAT标志,mode记录待创建文件的访问权限。
权限:
{
可读 r 4
可写 w 2
可执行 x 1
}
例如:0600 表示可读可写(4+2=6)
文件不存在则打开失败要用到O_CREAT
示例如下

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
int main()
{int fd;fd=open("./file1",O_RDWR);if(fd==-1){printf("open file1 fail");fd=open("./file1",O_RDWR|O_CREAT,0600);//文件不存在则创建文件,0600是待创建文件的权限。if(fd>0){printf("creat file1 fd=%d\n",fd);}}return 0;
}

写入文件

ssize_t write(int fd, const void *buf, size_t count);
第一个参数是文件描述符
第二个参数是缓冲区(就是要写入内容的指针)
第三个参数是要写入文件的大小
若写入成功返回写入的字节数,失败则返回-1.

代码示例

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include <unistd.h>
#include <string.h>
int main()
{int fd;char*buf="i am handsome";//将要写入文件的内容fd=open("./file1",O_RDWR);//"./file1"    is    wenjianlujingif(fd==-1){printf("open file1 fail\n");fd=open("./file1",O_RDWR|O_CREAT,0600);if(fd>0){printf("creat file1\n");}}printf("open successful  fd=%d\n",fd);write(fd,buf,strlen(buf));//strlen计算字符串的长度,sizeof()在这里计算的是指针的大小close(fd);//写完文件后要关闭文件return 0;}

文件的读取

ssize_t read(int fd, void *buf, size_t count);
fd:文件描述符
buf:把读取的数据放到buf中
count:所要读取的字节数
若成功则返回读取的字节数,失败返回-1.

代码示例

#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main()
{int fd;char*buf="i am handsome";//将要写入文件的内容fd=open("./file1",O_RDWR);//"./file1"是文件路径if(fd==-1){printf("open file1 fail\n");fd=open("./file1",O_RDWR|O_CREAT,0600);if(fd>0){printf("creat file1\n");}}printf("open successful  fd=%d\n",fd);int n_write=write(fd,buf,strlen(buf));//返回字节的长度if(n_write!=-1){printf("write successfuli %d\n",n_write);}close(fd); 重新打开定位光标(光标在文件的头)fd=open("./file1",O_RDWR);char*readbuf;readbuf=(char *)malloc(n_write*sizeof(char));int n_read=read(fd,readbuf,n_write);printf("read %d,context %s\n",n_read,readbuf);close(fd);return 0;
}

文件光标的移动操作

off_t lseek(int fd, off_t offset, int whence);
fd:文件描述符
offset:将读写指针相对whence移动offset个字节,负数向前偏移,正数向后偏移
whence:
{	SEEK_SET:文件的头SEEK_CUR:当前位置SEEK_END:文件的尾
}
调用成功返回从当前位置到文件头所偏移的字节数,失败则返回-1.

代码改进

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main()
{int fd;char*buf="i am handsome";//将要写入文件的内容fd=open("./file1",O_RDWR);if(fd==-1){printf("open file1 fail\n");fd=open("./file1",O_RDWR|O_CREAT,0600);if(fd>0){printf("creat file1\n");}}printf("open successful  fd=%d\n",fd);int n_write=write(fd,buf,strlen(buf));if(n_write!=-1){printf("write successfuli %d\n",n_write);}
//      close(fd);       
//      fd=open("./file1",O_RDWR);lseek(fd,-n_write,SEEK_END);char*readbuf;readbuf=(char *)malloc(n_write*sizeof(char));int n_read=read(fd,readbuf,n_write);printf("read %d,context %s\n",n_read,readbuf);close(fd);return 0;
}

可利用lseek计算文件的字节数

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include <unistd.h>
#include <string.h>#include <stdlib.h>
int main()
{int fd;char*buf="i am handsome";fd=open("./file1",O_RDWR);int filesize=lseek(fd,0,SEEK_END);printf("size=%d\n",filesize);close(fd);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272525.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【收集】常用的cmd命令

运行操作CMD命令&#xff1a;开始&#xff0d;>运行&#xff0d;>键入cmd或command(在命令行里可以看到系统版本、文件系统版本)CMD命令锦集1. gpedit.msc-----组策略2. sndrec32-------录音机3. Nslookup-------IP地址侦测器 &#xff0c;是一个 监测网络中 DNS 服务器是…

MVC框架详解--Servlet+JSP+JavaBean模式(MVC)开发复杂的web应用

孤傲苍狼 javaweb学习总结(二十二)——基于ServletJSPJavaBean开发模式的用户登录注册 转载于:https://www.cnblogs.com/yangjj08/p/10153657.html

Linux文件编程(2)

文件打开创建补充 &#xff08;1&#xff09;O_EXCL O_EXCL和O_CREAT配合使用 若文件不存在则创建文件 若文件存在则返回-1 代码演示 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<stdio.h> int main() {int fd;fdope…

IT技术人员必须思考的几个问题

1.搞IT的是屌丝、码农、程序猿?人们提到IT人的时候&#xff0c;总会想到他们呆板、不解风情&#xff0c;专注于IT技术&#xff0c;就算性感的美女躺在旁边也无动于衷。事实真的是这样吗?虽说不能完全否定有这样的情况存在&#xff0c;但这是IT人普遍的特点吗?而其它行业也有…

37个JavaScript基本面试问题和解答

https://www.zcfy.cc/article/37-essential-javascript-interview-questions-and-answers1、使用typeof bar “object”来确定bar是否是一个对象时有什么潜在的缺陷&#xff1f;这个陷阱如何避免&#xff1f;尽管typeof bar “object”是检查bar是否是对象的可靠方法&#xff0…

封装cookie.js、EventUtil.js、

最近学习了javascript&#xff0c;封装好的东西看起来舒服&#xff0c;以备需要的时候拉出来&#xff0c;jquery对javascript做了很好的封装&#xff01;以后会多用jquery多些var CookieUtil {get: function (name){var cookieName encodeURIComponent(name) "",c…

实现linux cp 命令和修改配置文件

cp指令用来代码的拷贝 以下由文件编程代码实现 代码演示 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<stdio.h> #include <unistd.h> #include <string.h>#include <stdlib.h> int main(int argc…

最实用前端开发框架对比评测

现在&#xff0c;各种开发框架层出不穷&#xff0c;但是&#xff0c;真正的精品却为数不多。今天我们根据Github上的流行程度整理了2014年最受欢迎的5个前端开发框架&#xff0c;并进行对比说明&#xff0c;希望帮助有需要的朋友选择合适自己的前端框架。1. BootstrapBootstrap…

HBase1.0.0 实现数据增删查

HBase1.0.0 即Hadoop 2.6 采用maven 的方式实现HBase数据简单操作 import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Random;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.a…

linux 写结构体到文件

将整数写入到文件 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<stdio.h> #include <unistd.h> #include <string.h>#include <stdlib.h> int main() {int fd;int data100;int data20;fdopen("…

程序员常访问的国外技术交流网站

技术人员经常会在各种技术交流社区游逛&#xff0c;大家互相学习、交流、分享、帮助。互联网拉近了地球人的距离&#xff0c;让全世界的技术人员可以聚集在一起分享交流。当然因为多方面原因&#xff0c;通常最新最权威的技术知识传到国内存在一定“时差”。本文将给大家分享技…

标准C库对文件操作的引入

modeopen和fopen的区别 fopen、fread、fwrite的使用 &#xff08;1&#xff09;fopen FILE *fopen(const char *path, const char *mode);path&#xff1a;文件路径 mode&#xff1a;以什么权限打开&#xff0c;要用双引号 它的返回值并不是文件描述符 若失败返回NULL 若操作成…

转载爱哥自定义View系列--Paint详解

上图是paint中的各种set方法 这些属性大多我们都可以见名知意&#xff0c;很好理解&#xff0c;即便如此&#xff0c;哥还是带大家过一遍逐个剖析其用法&#xff0c;其中会不定穿插各种绘图类比如Canvas、Xfermode、ColorFilter等等的用法。 set(Paint src) 顾名思义为当前画笔…

只有程序员才懂这些黑色幽默!

也是机缘巧合&#xff0c;让我一个之前工作从未接触过程序员的人&#xff0c;现在成天和程序员打交道&#xff0c;要知道&#xff0c;不懂技术&#xff0c;往往他们想和你幽默的搞笑一下&#xff0c;未必能读懂。都说程序员情商低&#xff0c;不爱说话&#xff0c;比较闷骚。可…

tiny4412 linux+qtopia nfs网络文件系统的挂载

1,首先确定uboot启动内核的bootargs参数 Linux-CommandLine root/dev/nfs nfsroot192.168.1.131:/home/tiny4412/rootfs_qtopia_qt4 ip192.168.1.230:192.168.1.131:192.168.1.1:255.255.255.0::eth0:off rootfstypenfs consolettySAC0,115200 init/linuxrc ctp2 skipcaliy uh…

Linux 进程、父进程、子进程

进程和程序的区别 一、 进程是动态的&#xff0c;程序是静态的&#xff1a;程序是有序代码的集合&#xff0c;进程是程序的执行。进程有核心态/用户态。 二、 进程是暂时的&#xff0c;程序是永久的&#xff1b;进程是一个状态变化的过程&#xff0c;程序可以长久保存 三、进…

几款开源富文本编辑器优缺点比较

1、百度UEditor 优点&#xff1a;插件多&#xff0c;基本满足各种需求&#xff0c;类似贴吧中的回复界面。缺点&#xff1a;不再维护&#xff0c;文档极少&#xff0c;使用并不普遍&#xff0c;图片只能上传到本地服务器&#xff0c;如果需要上传到其他服务器需要改动源码&…

C程序的储存空间是如何分配?

可执行程序包括BSS段、数据段、代码段。 在类UNIX系统下可使用size命令查看可执行文件的段大小信息。如size a.out&#xff1a; ~/Desktop/MyC$ size a.outtext data bss dec hex filename1672 600 8 2280 8e8 a.out1.数据段存放已初始化的全…

详细讲解Android的网络通信(HttpUrlConnection和HttpClient)

前言&#xff0c;Android的网络通信的方式有两种&#xff1a;使用Socket或者HTTP&#xff0c;今天这一篇我们详细讲解使用HTTP实现的网络通信&#xff0c;HTTP又包括两种方式编程方式&#xff1a; &#xff08;1&#xff09;HttpUrlConnection&#xff1b; &#xff08;2&#…

常见通信协议HTTP、TCP、UDP的简单介绍

TCP HTTP UDP:都是通信协议&#xff0c;也就是通信时所遵守的规则&#xff0c;只有双方按照这个规则“说话”&#xff0c;对方才能理解或为之服务。TCP HTTP UDP三者的关系:TCP/IP是个协议组&#xff0c;可分为四个层次&#xff1a;网络接口层、网络层、传输层和应用层…