- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
chmod 1*** file-list chmod +t file-list 如: $ chmod 1751 cp.new $ ls -l cp.new -rwxr-x--t 1 ……. -rwxr-x--T 1 …… (当“其他用户”执行位未被设置时) 小结: chmod 命令中使用的文件访问保护位: SUID SGID Sticky Owner Group Other 1 4 7 10 11 12 1)creat系统调用 creat 创建一个空文件或将已有文件截为空文件 调用格式:fd=creat(name,pmode) 这里pmode指定新建文件许可位;例如: fd=creat(“newfile”,0744); 表示指定新建文件许可位为:rwxr- - r - - 而若前面已做了umask(022); 则核心程序做:( ~022)0744=0744 2. 文件管理系统调用 2)link 建立文件的连接 调用格式:status=link(name1,name2) status可以为0,-1 系统的全局变量errno记录着出错代码 3)unlink 删除连接文件 调用格式为:status=unlink(name) 状态与上条类似。 作用是:从目录文件中删除一个登记项 4)open/ close系统调用 。Open 打开文件 调用格式:fd=open(name,rw-mode[,pmode]) 正常fd=3,表示打开文件的描述符; rw-mode是读写方式:0,1,2或O_RDONLY ,O_WRONLY O_RDWR; Pmode是指用open创建一个新文件时的访问权限。 。close 关闭文件 调用格式:status=close(fd) 用fd指明欲关闭的文件。 5) read/ write系统调用 完成对文件的读写操作。 调用格式: n=read(fd,buffer,size); n=write(fd,buffer,size); 它们与高级语言中库函数很相似: n=fread(buffer,byte,record,fp); n=fwrite(buffer,byte,record,fp); 区别: 1)前者是对文件描述符fd操作,后者对指针fp操作 2)前者没有记录的概念,后者有 3)前者是底层服务,后者是高层服务,提供缓冲机制。 系统调用举例: 写一段c程序,完成下列命令的功能: % cp file1 file2 无论文件是何种类型(字符可见、二进制不可见)。 注意:对文件的读/写中使用不同的size值,其访问速度会受到影响,请编写程序感受这一点。 Main( argc,argv) int argc; char *argv[ ]; { int fd1,fd2, n; char buf[512],ch=‘\n’ if (argc=2) {printf(“you forgot the enter a filename\n”); exit(1); } fd1=open(argv[1],0); fd2=creat(argv[2],0644); While((n=read(fd1,buf,512))0) write(fd2,buf,n); close(fd1); close(fd2); } 编写一个简单的cp命令程序: 6.7 文件随机存取技术 1.改变文件指针位置 lseek 系统调用,调用格式: newpos=lseek(fd,offset,origin); fd: 打开文件描述符 offset: 从指定位置开始的位移量 Origin:是offset参数的基点。 2. 获取当前文件指针位置 系统调用tell可报告当前文件指针位置 调用格式: pos=tell(fd) pos: 长整数,文件指针位置 fd: 文件描述符 tell与lseek连用可对文件中的内容做随即访问,举例说明如下: #includestdio.h #includeunistd.h char buf1[]=the is test text; char buf2[]=12345; main( ) { int fid; if((fid=creat(Test,0644))0) { printf(creat file error\n); exit(1); } else { if(write(fid,buf1,16)==-1) { printf(buf1 write error\n); exit(1);} post=tell(fid); printf(“file postis_1:%d”,post); if(lseek(fid,30,
文档评论(0)