
假设你的程序是 myprogram.exe <路径名>
首先根据路径名是不是用“.”或者".."开始的,如果是,那么就是相对路径,首先要获得当前工作目录(windows下用GetCurrentDirectory,unix或者linux下用getcwd),然后将当前工作目录和相对路径名组合成绝对路径。
如果路径名是文件名,在windows下需要查找‘\’字符,替换成"\\",然后才能用fopen打开,如果是unix、linux之类的,可以直接用argv[1]
如果路径名是目录名,那么有两种方式,一种是进strcat将目录名加分隔符(linu下是/,windows下是\\)加文件名,形成文件的绝对路径,然后用fopen(文件据对路径,打开方式)打开;另外一种是切换当前工作目录(windows下用SetCurrentDirectory函数,linux、unix下用chdir),然后fopen(文件名,打开方式)打开
linux中open和fopen的区别主要有以下四点:1、来源
从来源的角度看,两者能很好地区分开,这也是最显而易见的区别:
①open是Unix系统调用函数,返回的是文件描述符,它是文件在文件描述符表里的索引
②fopen是ANSIC标准中的C语言库函数,在不同的系统中应该调用不同的内核api。返回的是一个指向文件结构的指针。
2、移植性
这一点从上面的来源可以推断出来,fopen是C标准函数,因此拥有良好的移植性,而open是Unix系统调用,移植性有限。如Windows下相似的功能使用API函数CreateFile。
3、适用范围
①open返回文件描述符,而文件描述符是Unix系统下的一个重要概念,Unix下的一切设备都是以文件的形式 *** 作。如网络套接字、硬件设备等。当然包括 *** 作普通正规文件。
②fopen是用来 *** 纵普通正规文件。
4、文件IO层次
如果从文件IO的角度来看,前者属于低级IO函数,后者属于高级IO函数。低级和高级的简单区分标准是:谁离系统内核更近。低级文件IO运行在内核态,高级文件IO运行在用户态。
你可以看下,在另一个目录的文件你是否有访问权限,同一个目录下一般来说,你把他复制过来,这个文件的拥有者(owner)就是你了,你是肯定可以访问的。每个程序都有一个当前目录的环境变量,你在shell中执行程序时,shell程序就是你执行的程序的父进程,你的程序从shell程序中继承了当前目录,所以你只给定文件名时,当然打开的就是当前目录下的文件了欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)