在linux中编程,怎么判断打开一个文件是以读、写还是读写模式打开的?求c语言实现代码
如果当前进程要对一个文件进行操作肯定要先将文件大开,形成自己的structfile*file,现在已知这个file指针,怎么判断是以什么模式打开的?还有如果是读写模式打开...
如果当前进程要对一个文件进行操作肯定要先将文件大开,形成自己的struct file *file,现在已知这个file指针,怎么判断是以什么模式打开的?还有如果是读写模式打开的,怎么判断以后的操作到底是读还是写?我看struct file中有一个f_mode的参数,不知道这个参数与我的问题有什么关系
简单的说就是判断我当前文件是以什么模式打开的,还有判断当前的操作是在对这个文件读还是对这个文件写。怎么用c实现? 展开
简单的说就是判断我当前文件是以什么模式打开的,还有判断当前的操作是在对这个文件读还是对这个文件写。怎么用c实现? 展开
3个回答
展开全部
既然得到了这文件指针,你想怎么打开都行,无需知道以前是什么模式。
用open更新你想要的打开方式。
O_RDONLY 以只读方式打开文件
O_WRONLY 以只写方式打开文件
O_RDWR 以可读写方式打开文件。上述三种旗标是互斥的, 也就是不可同时使用, 但可与下列的旗标利用OR(|)运算符组合。
O_CREAT 若欲打开的文件不存在则自动建立该文件。
O_EXCL 如果O_CREAT 也被设置, 此指令会去检查文件是否存在。文件若不存在则建立该文件, 否则将导致打开文件错误。此外, 若O_CREAT与O_EXCL同时设置, 并且欲打开的文件为符号连接, 则会打开文件失败。
O_NOCTTY 如果欲打开的文件为终端机设备时, 则不会将该终端机当成进程控制终端机。
O_TRUNC 若文件存在并且以可写的方式打开时, 此旗标会令文件长度清为0, 而原来存于该文件的资料也会消失。
O_APPEND 当读写文件时会从文件尾开始移动, 也就是所写入的数据会以附加的方式加入到文件后面。
O_NONBLOCK 以不可阻断的方式打开文件, 也就是无论有无数据读取或等待, 都会立即返回进程之中。
O_NDELAY 同O_NONBLOCK。
O_SYNC 以同步的方式打开文件。
O_NOFOLLOW 如果参数pathname 所指的文件为一符号连接, 则会令打开文件失败。
O_DIRECTORY 如果参数pathname 所指的文件并非为一目录, 则会令打开文件失败。
这是你要的
r 打开只读文件, 该文件必须存在。
r+ 打开可读写的文件, 该文件必须存在。
w 打开只写文件, 若文件存在则文件长度清为0, 即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件, 若文件存在则文件长度清为零, 即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在, 则会建立该文件, 如果文件存在, 写入的数据会被加到文件尾, 即文件原先的内容会被保留。
a+ 以附加方式打开可读写的文件。若文件不存在, 则会建立该文件, 如果文件存在, 写入的数据会被加到文件尾后, 即文件原先的内容会被保留。
用open更新你想要的打开方式。
O_RDONLY 以只读方式打开文件
O_WRONLY 以只写方式打开文件
O_RDWR 以可读写方式打开文件。上述三种旗标是互斥的, 也就是不可同时使用, 但可与下列的旗标利用OR(|)运算符组合。
O_CREAT 若欲打开的文件不存在则自动建立该文件。
O_EXCL 如果O_CREAT 也被设置, 此指令会去检查文件是否存在。文件若不存在则建立该文件, 否则将导致打开文件错误。此外, 若O_CREAT与O_EXCL同时设置, 并且欲打开的文件为符号连接, 则会打开文件失败。
O_NOCTTY 如果欲打开的文件为终端机设备时, 则不会将该终端机当成进程控制终端机。
O_TRUNC 若文件存在并且以可写的方式打开时, 此旗标会令文件长度清为0, 而原来存于该文件的资料也会消失。
O_APPEND 当读写文件时会从文件尾开始移动, 也就是所写入的数据会以附加的方式加入到文件后面。
O_NONBLOCK 以不可阻断的方式打开文件, 也就是无论有无数据读取或等待, 都会立即返回进程之中。
O_NDELAY 同O_NONBLOCK。
O_SYNC 以同步的方式打开文件。
O_NOFOLLOW 如果参数pathname 所指的文件为一符号连接, 则会令打开文件失败。
O_DIRECTORY 如果参数pathname 所指的文件并非为一目录, 则会令打开文件失败。
这是你要的
r 打开只读文件, 该文件必须存在。
r+ 打开可读写的文件, 该文件必须存在。
w 打开只写文件, 若文件存在则文件长度清为0, 即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件, 若文件存在则文件长度清为零, 即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在, 则会建立该文件, 如果文件存在, 写入的数据会被加到文件尾, 即文件原先的内容会被保留。
a+ 以附加方式打开可读写的文件。若文件不存在, 则会建立该文件, 如果文件存在, 写入的数据会被加到文件尾后, 即文件原先的内容会被保留。
追问
非常感谢您的回答。不过我现在的主要目的还是通过file指针来判断这个文件原本是以什么模式打开的,以及当前的操作是读操作还是写操作,这两点是最主要的。
追答
看代码,一个文件放在那里,只有用户权限而已,如果你是root/admin,它就只是一个文件,你想怎么处理都可以。你的思维出了问题,所以没人答你。
2012-05-08
展开全部
man __freading
int __freadable(FILE *stream);
int __fwritable(FILE *stream);
int __freading(FILE *stream);
int __fwriting(FILE *stream);
The __freadable() function returns a nonzero value if the stream allows
reading, and zero otherwise.
The __fwritable() function returns a nonzero value if the stream allows
writing, and zero otherwise.
The __freading() function returns a nonzero value if the stream is
read-only, or if the last operation on the stream was a read operation,
and zero otherwise.
The __fwriting() function returns a nonzero value if the stream is
write-only (or append-only), or if the last operation on the stream was
a write operation, and zero otherwise.
int __freadable(FILE *stream);
int __fwritable(FILE *stream);
int __freading(FILE *stream);
int __fwriting(FILE *stream);
The __freadable() function returns a nonzero value if the stream allows
reading, and zero otherwise.
The __fwritable() function returns a nonzero value if the stream allows
writing, and zero otherwise.
The __freading() function returns a nonzero value if the stream is
read-only, or if the last operation on the stream was a read operation,
and zero otherwise.
The __fwriting() function returns a nonzero value if the stream is
write-only (or append-only), or if the last operation on the stream was
a write operation, and zero otherwise.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
access可以用来判定用什么样的模式打开文件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |