linux高级编程操作系统是管理电脑硬件与软件资源程序同时也_第1页
linux高级编程操作系统是管理电脑硬件与软件资源程序同时也_第2页
linux高级编程操作系统是管理电脑硬件与软件资源程序同时也_第3页
linux高级编程操作系统是管理电脑硬件与软件资源程序同时也_第4页
linux高级编程操作系统是管理电脑硬件与软件资源程序同时也_第5页
已阅读5页,还剩90页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux高级编程(一123文件I/O45能、进程管理等接 在L间和用户空(同互 此不许 作。调——7 用户编程接口用户编程接口89strerror(功能:以字符串方式打印错误信用法#includechar*strerror(int返回功能:在标准错误上产生一条基于其参数串和errno的当前值出消息用法#includevoidperror(constchar*intmain(){FILEif((fp=fopen("1.txt","r"))=={}}fopen:Nosuchfileorfopen:

{inti;printf(“%d:}::Operationnot:Nosuchfileor:Nosuch:Interruptedsystem:Input/output:Devicenot:Argumentlisttoo:Execformat10:Badfile内核如何区分 特定的文件呢这里用到了一个重要的概念——文件描述符Lx通常,一个进程启动时,都会打开3个文件:标准输入、标准输出标准出错处理。这3个文件分别对应文件描述符为0、1和2(也就宏替换STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO)包含在Linux下OPEN_MAX #include<sys/stat.h>#include<fcntl.h>intopen(constchar*pathname,intintopen(constchar*pathname,intflags,mode_t O_RDONLY只读打开。O_WRONLY只写打开。O_RDWR读、写打开。O_APPEND每次写时都加到文件的尾O_CREAT若此文件不存在则创建它。使用此选择项时,需同三个参数mode,用其说明该新文件的存 权位O_EXCL如果同时指定了O_CREAT,而文件已经存在,则出错。这测试一个文件是否存在,如果不存在则创建此文件成为一个原子 如果此文件存在,而且为只读或只写成功打开,则将其截短为0O_NONBLOCK如果pathname指的是一个块特殊文件或一个字符特殊文件,则此选择项为此文件的本次打开操作和后续的I/O操作设置非第三个参数mode指定文件权限,可以用八进制数表示,比如0644示-rw-r--r--,也可以用S_IRUSR、S_IWUSR等宏定义按位或起来。#include#include#includeintcreat(constchar*name,mode_tmode)open(name,#includeintclose(int很多程序都使用这能而不显式地用close关闭打开 打开文件例子例子#includessize_tread(intfeledes,void*buff,size_tnbytes)求读100个字节,则read返回30,下一次再调用read时,它将返回0(文件尾端)。 用write函数向打开文件写数据。#include<unistd.h>见例子errno{非堵塞read(设备if(设备1有数据到处理数据非堵塞read(设备2);if(设备2有数据到处理数据…}以设定堵塞等待的超时时间从而的解#include#includeoff_tlseek(intfilesdes,off_toffset,intwhence)返回:若成功为新的文件位移,若出错为-1对参数offset的解释与参数whence的值有关若whence是SEEK_SET,则将该文件的位移量设置为距文件开始offset个字若whence是SEEK_CUR,则将该文件的位移量设置为其当前值加offset可为正或若whence是SEEK_END,则将该文件的位移量设置为文件长度加offset可为正或若lseekoff_tcurr_pos=lseek(fd,0,见#include<sys/types.h>#include#includeintfcntl(intfd,intintfcntl(intfd,intcmd,longintfcntl(intfd,intcmd,structflock返回:若成功则依赖于cmd(见下),若出错为-1一个现存的描述符,新文件描述符作为函数值返(cmd=F_DUPFD)获得/设置文件描述符标记,对应于filedes的文件描述符标志作为函数返回.(cmd=F_GETFD或F_SETFD)获得/设置文件状态标志,对应于filedes的文件状态标志作为函数值回。(cmd=F_GETFL或F_SETFL)获得/设置异步I/O 获得/设置记录锁(cmd=F_SETLK,F_SETLKW)。用fcntl改变FileStatusFlag的例 #include<unistd.h>/*SVR4*/#includesys/ioctl.h>*4.3+BSD*数表示的IO操作通常都能用ioctl的函数代替ioctl进行终端IO操作) 见ioctl例#includevoid*mmap(void*addr,size_tlen,intprot,intflag,intfiledes,off_toff);intmunmap(void*addr,size_tmmapPROT_EXEC表示映射的这一段可执行,例flammap(2)P_SHRED如果aMPLE。mua解除una0。#include<unistd.h>#include<sys/types.h>inttruncate(constchar*path,off_tintftruncate(intfdoff_tlength);#includeintfsync(intfiledes数据和intfdatasync(intfiledes指定文件的数voidsync(void)修改部分排入磁盘写队见文件 操作的系统函101120213031

151625263536

252745476567标准I/O 文件分类按文件的逻辑结构记录文件:由具有一定结构的记录组成(定长和不定长)流式文件:由一个个字符(字节)数据顺序组成 介质普通文件 介质文件(磁盘、磁带等)设备文件: 介质(键盘、显示器 等)按数据的组织形式ASCII文件(文本文件):每个字节存放ASCII码,表示一个字符二进制文件:数据按其在内存中 形式原样存放od-tx1-tc-Ax例:整数

ASCII形内 形

0二进制形 od(octaldump)和xd(hexdump)命令可以以十进制、八进制、十六进制和ASCII码来显示文件或者流,它们对于或可视地检查文件中不能直接显语法:od[选项]Ado八进制(系统默认值xtfo(系统默认值为x#includeFILE*fopen(constchar*path,constchar或者叫句柄(Handle),FILE*指针就像一个把手文件类型结构体缓冲文件系统为每个正使用的文件在内存开辟文件信息区文件信息用系统定义的名为FILE的结构体描述FILE定义在stdio.htypedef{ unsignedflags;charfd;unsignedcharhold;shortbsize;

/*缓冲区满/空程/*若无缓冲区 字符unsignedchar*buffer;/*数据传送缓冲区位unsignedchar*curp;unsignedistemp;shorttoken;}FILE

/*结构体类型名

FILE*文件结构指针 用法 文件关闭操作系C程操作系C程文件类型指磁“rFILEif((fp=fopen("/tmp/file1","r"))=={perror("erroropenfile/tmp/file1");}#includeintfclose(FILE缓冲文件系统磁盘文程序数据磁盘文程序数据输出文件缓冲aUNIX的传统是Everythingisafile fp=fopen("/etc/shadow","r");if(fp==NULL){perror("Open}fopen也可以打开一个,传给fopen的第一个参数名末尾可以加/也可以fp=fopen("/home/zyt/","r+");if(fp==NULL){perror("Open/home/zyt");}#includeintfgetc(FILEint回#includeintfputc(intc,FILEintputchar(int#include<stdio.h>int{FILEintif((fp=fopen("file2","w+"))==NULL)perror("Openfilefile2\n");}while((ch=getchar())!=EOF)fputc(ch,fp);while((ch=fgetc(fp))!=EOF)return0;} $./mycpdir1/fileAdir2/fileB运行这个程序可以#includeintfseek(FILE*stream,longoffset,intlong l(FILEvoidrewind(FILE#includechar*fgets(char*s,intsize,FILE*stream);char*gets(char*s);fgets从指定的文件中读一行字符到调用者提供的缓冲区gets从标准输入读一行字符到调用者提供的缓冲区Warning心一点就可以避免出问题,而gets的输入直接来自程序Warning断缓冲区中的'\0'究竟是从文件读上来的字符还是由fgets#includeintfputs(constchar*s,FILEintputs(constchar用fgets/fputs写一个拷贝文件的程#includesize_tfread(void*ptr,size_tsize,size_tFILEsize_tfwrite(constvoid*ptr,size_tsize,size_tFILE 间中连续存放,共占size*nmemb个字节,fread从文件stream中读出size*nmemb个字节保存到ptr中,而fwrite把ptr中的size*nmemb#includei

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论