只总结了部分常用的内容,详细内容参考《UNIX环境高级编程》及相关书籍。

Linux中文件编程可以使用两种方法

  • Linux系统调用(依赖于系统)
  • C语言库函数(不依赖于系统)

Linux系统调用实现文件编程(man 2)

函数详见 man 2 funcname

文件的创建

int creat(const char *filename, mode_t mode)

filename: 要创建的文件名

mode:创建模式 (S_IRUSR/S_IWUSR/S_IXUSR/S_IRWXU) //mode_t 无符号整形 (0755怎么解释)

    用数字表示    1              2              4              7  

文件的描述

所有打开文件都对应一个文件描述符。文件描述符是一个非负整数。打开文件时由系统来分配。文件描述符范围为0-OPEN_MAX,现在很多系统中OPEN_MAX=1023。

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

int open(const char *pathname, int flags, mode_t mode); //此处mode用于以O_CREAT方式打开的文件,用于指定新建文件的权限

pathname:包含路径的文件名

flags:打开标志(O_RDONLY/O_WRONLY/O_RDWR/O_APPEND/O_CREAT/O_NONBLOCK)

          0      1      2   追加方式    创建文件     非阻塞方式

文件的关闭

int close(int fd);

文件的内容读取(读位置为文件读写指针所指位置)

int read(int fd, const void *buf, size_t length);

从fd中读取length长度字节到buf指向的缓冲区,返回实际读取字节数。

读取完后返回值为0。   //while(bytes_read=read(from_fd,buffer,BUFFER_SIZE)) 读完后bytes_read=0,false,退出循环。

不能保证一次性读完文件的情况下可以循环调用read,直至读写完毕。

文件的内容写入(写位置为文件读写指针所指位置)

int write(int fd,const void *buf, size_t length);

从buf指向的缓冲区中取length个字节写入fd文件中,返回实际写入字节数。

文件的读写指针定位

int lseek(int fd, offset_t offset, int whence);  例:lseek(fd,-1,SEEK_END);

将文件读写指针相对whence移动offset个字节。操作成功时,返回文件指针相对于文件头的位置。

offser可取负值

whence值:SEEK_SET/SEEK_CUR/SEEK_END

使用lseek计算文件长度 lseek(fd,0,SEEK_END);

文件访问判断

int access(const char* pathname, int mode);

判断文件是否可以进行某种操作(读写等),成功后返回0,否则-1.

pathname:包含路径的文件名

mode:要判断的权限。 R_OK 文件可读; W_OK 文件可写; X_OK 文件可执行; F_OK 文件存在

文件操作练习

通过文件操作系统调用实现文件的拷贝。

Linux库函数实现文件访问 (man 3)

文件打开

FILE *fopen(const char* filename, const char* mode )

文件读操作

size_t fread(void *ptr, size_t size, size_t n,FILE *stream)

从stream指向的文件中读取n个字段,每个字段为size字节,并将读取的数据放入ptr所指的字符数组中,返回实际已读取的字节数。

文件写

size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream)

读字符

int fgetc(FILE *stream)

写字符

int fputc(int c,FILE *stream)

向指定文件中写一个字符,例 fputc(ch,fp); //char ch; FILE *fp;

格式化读

fscanf(FILE *stream, char *format[,argument...])

从一个流中进行格式化输入

格式化输出

int fprintf(FILE *stream,char *format[,argument...])

格式化输出到一个流中 例:fprintf(stream,"%s%c",s,c)

文件读写定位

int fseek(FILE *stream,long offset, int whence)

whence: SEEK_SET/SEEK_CUR/SEEK_END

路径的获取

char *getcwd(char *buffer,size_t size)

size是buffer的大小。

创建目录

int mkdir(char *dir,int mode)

返回值:0:成功 -1:出错

时间编程

UTC:标准时间

日历时间:从1970.1.1 0点到现在的秒数。

时间获取

time_t time(time_t *tloc)  //typedef long time_t

获取日历时间

时间转化

struct tm *gmtime(const time_t *timep)

将日历时间转化为格林威治标准时间,并保存到TM结构中

struct tm *localtime(const time_t *timep)

将日历时间转化为本地时间,并保存到TM结构。

struct tm{int tm_sec;int tm_min;int tm_hour;int tm_mday;int tm_mon;int tm_year;    //tm_year +1900=哪一年int tm_wday;int tm_yday;int tm_isdst;
};

#include <time.h>
#include <stdio.h>int mian(){struct tm *local;time_t t;t=time(NULL);local=localtime(&t);printf("Local hour is: %d\n",local->tm_hour);local=gmtime(&t);printf("UTC hour is: %d\n",local->tm_hour);return 0;
}

时间显示

char *asctime(const struct tm *tm)

将tm格式的时间转化为字符串

char *ctime(const struct time_t *timep)

将日历时间转化为本地时间的字符串形式

#include <time.h>
#include <stdio.h>int main(){struct tm *ptr;time_t lt;lt=time(NULL);ptr=gmtime(&lt);printf(asctime(ptr));printf(ctime(&lt));return 0;
}

获取凌晨到现在的时间差

int gettimeofday(stuct timeval *tv, struct timezone *tz)

功能:获取从今日凌晨到现在的时间差,常用于计算事件耗时。时间差记录到tv指向的空间。tz时区

struct timeval{

  int tv_sec;  //秒数

  int tv_usec; //微秒数

};

#include <sys/time.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>void function()
{unsigned int i,j;double y;for(i=0;i<1000;i++)for(j=0;<1000;j++)y++;
main()
{struct timeval tpstart ,tpend;float timeuse;gettimeofday(&tpstart,NULL);function();gettimeofday(&tpstart,NULL);timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+tpend.tv_usec-tpstart.tv_usec;timeuse/=1000000;printf("Used Time: %f\n",timeuse);exit(0);
}

延时执行

unsigned int sleep(unsigned int seconds)  //使程序睡眠seconds秒

void usleep(unsigned long usec)   //使程序睡眠usec微秒

转载于:https://www.cnblogs.com/kwseeker-bolgs/p/4373131.html

Linux系统编程@文件操作(一)相关推荐

  1. linux 文件操作 编程,Linux系统编程------------文件操作(基础)

    一.文件操作 1.1 Linux文件系统结构 1.1.1  Linux常见系统目录 /bin  :  存放普通系统可执行的命令(ls wc等) /sbin  :  存放系统管理程序(fsck等) /b ...

  2. Linux系统编程-文件的操作

    Linux系统编程-文件操作 前言: Linux 中所有内容都是以文件的形式保存和管理的,即一切皆文件,普通文件是文件,硬件设备(键盘.监视器.硬盘.打印机)是文件,就连套接字(socket).网络通 ...

  3. 外网访问arm嵌入式linux_嵌入式Linux系统编程——文件读写访问、属性、描述符、API

    Linux 的文件模型是从 Unix 的继承而来,所以 Linux 继承了 UNIX 本身的大部分特性,然后加以扩展,本章从 UNIX 系统接口来描述 Linux 系统结构的特性. 操作系统是通过一系 ...

  4. 4. linux调用文件计算阶乘前5项和_嵌入式Linux系统编程——文件读写访问、属性、描述符、API

    Linux 的文件模型是从 Unix 的继承而来,所以 Linux 继承了 UNIX 本身的大部分特性,然后加以扩展,本章从 UNIX 系统接口来描述 Linux 系统结构的特性. 操作系统是通过一系 ...

  5. linux系统编程——文件编程

    linux系统编程--文件编程 文章目录 linux系统编程--文件编程 一.如何创建.修改一个文件 二.linux系统调用的API 三.文件描述符 四.linux系统调用 1.创建文件-creat ...

  6. linux 打开关闭文件,Linux系统编程-文件打开关闭

    一.文件描述符 对于Linux而言,所有对设备或文件的操作都是通过文件描述符进行的.当打开或者创建一个文件的时候,内核向进程返回一个文件描述符(非负整数).后续对文件的操作只需通过该文件描述符,内核记 ...

  7. Linux编程 文件操作,linux高级编程(文件操作)

    功能: 确定文件的访问权限 用法: int access(const char *filename, int amode); finename 文件名称mode 模式,共5种模式: 0-检查文件是否存 ...

  8. Linux系统编程—文件—fputc、fgetc、feof函数

    一.fputc函数 函数格式:int fputc (int c, File *fp) 函数功能: 将字符c写到文件指针fp所指向的文件的当前写指针的位置. 参数:c 为要写入的字符,虽然函数被定义为整 ...

  9. Linux系统编程—文件—write函数

    一.write函数手册上的定义 write函数需要包含头文件 #include <unistd.h> 函数原型:ssize_t write(int fd, const void *buf, ...

最新文章

  1. Vim 实用技术,第 3 部分: 定制 Vim
  2. asp使用mysql5.0_ASP使用MYSQL数据库全攻略
  3. html mvc 分页 保存,Asp.net Mvc3 加载cshtml文件自定义分页+ 查询
  4. SAP CRM WebClient UI上分销渠道点击展开按钮后执行了哪些逻辑
  5. android绘制环形进度_Android实现环形进度条代码
  6. 基于django rest framework的mock server实践
  7. centos 字体的修改
  8. SSRF(服务端请求伪造)原理/防御
  9. IDEA 设置背景颜色为黑色
  10. 常用十六进制颜色对照表代码查询
  11. Python模块selenium实例:电影分类排名数据生成json,sqlite和excel(openpyxl)文件(一)
  12. 解决thinkbook14p 的windows11系统关机或者睡眠时间长扩展坞无法加载网口和hdmi接口
  13. 类选择器和ID选择器的区别
  14. 16秋南开计算机应用答案,南开16秋学期“计算机应用基础”在线作业.doc
  15. 使用Selenium时,如何选择ChromeDriver驱动版本对应Chrome浏览器版本
  16. VCS编译仿真警告Warning
  17. java calendar 增加年_java 使用Date类、Calendar类,实现增加日期
  18. chinapay 新版php接口,php最新銀聯支付chinaPay,最新接口地址
  19. 《墨菲定律》读书笔记(3)
  20. java开发工作交接一般要多久_交接工作一般交接到什么程度?

热门文章

  1. LaTeX入门最终集 :LaTeX格式的调整LaTeX中怎么打出数学公式LaTeX的各种上下标
  2. OpenCv 金字塔之上采样与下采样
  3. jsp用session判断输入框_[实战小剧场servletamp;jsp] 用户登录及退出功能实现
  4. java 判断是否是list_给Java程序员的20个链表面试题
  5. python unicodeencodeerror_解决 Python UnicodeEncodeError 错误
  6. python中的1怎么用的_python中的[:-1]和[::-1]的具体使用
  7. python索引序列_Pythonfor循环通过序列索引迭代过程解析
  8. python 空对象模式_Python 单例模式(3种方式)
  9. 边缘与锐化滤波(MATLAB)
  10. 在此处打开命令窗口_这样操作方便多了!简单DOS命令实用技巧详解