在linux中打开c文件夹,Linux C   目录和文件

Linux C   目录和文件

(2013-04-08 09:43:35)

标签:

it

2013-04-01 打伞的鱼

目录的创建与删除函数

在linux系统中,目录就是一个文件夹,文件可以存放在目录中。目录是一种特殊的文件夹,需要对目录进行权限管理。

————创建目录函数mkdir()

函数的使用方法:

int mkdir(char *pathname,mode_t mode);

在参数列表中,pathname是一个字符型指针,表示需要创建的目录路径,mode表示权限的八进制数字。

如果目录创建成功,则返回证书0,否则返回-1。

要使用这个函数,需要在程序中包含“sys/types.h”和“sys/stat.h”两个头文件。

——————删除目录函数rmdir()

函数的使用方法:

int rmdir(char *pathname);

文件的创建与删除函数

————创建文件函数creat()

函数的使用方法:

int creat(char *pathname,mode_t mode);

函数的参数pathname表示需要建立文件的文件名和目录名,mode表示这个文件的权限。

文件创建成功时返回创建文件的编号,否则返回-1。

使用这个函数需要在程序前面包含下面三个头文件:

#include

#include

#include

——————删除文件函数remove()

函数的使用方法:

int remove(char *pathname);

要使用这个函数需要在程序的最前面包含下面的头文件:

#include

——————建立临时文件函数mkstemp()

所谓临时文件,指的是程序运行时为了存储中间数据而建立的文件。计算机重启时,这写文件会自动删除。如果在程序运行时需要把文件短时间写到磁盘上,可以使用mkstemp函数临时创建一个临时文件。

函数的使用方法:

int mkstemp(char *template);

参数template表示需要建立临时文件的文件名字符串。文件名字符串中最后六个字符必须是XXXXXX。mkstemp函数会以可读写模式和0600权限来打开文件,如果文件不存在会建立这个文件,返回值是打开文件的编号,如果文件建立不成功则返回-1。

注意:参数template所指的文件名称字符串必须声明为数组,用下面的这种声明数组的方法声明:

char template[]="template-XXXXXX";

使用下面这种是不能运行的:char *template="template_XXXXXX";

文件的打开与关闭

文件的打开指的是从磁盘找到一个文件,返回一个整型的打开文件顺序编号。打开的文件处于可读可写状态。

文件的关闭指的是释放打开的文件,使文件处于不可读写的状态。

——————打开文件函数open/文件打开方式的设置

函数的使用方法:

int open(char *pathname,int flags);

int open(char *pathname,int flags,mode_t mode);

用这个函数打开文件时,如果正确的打开了这个文件,则返回这个文件的编号,否则返回0.

使用这个函数时,需要包含下面这些头文件:

#include

#include

#include

参数pathname表示要打开文件的路径字符串。参数flags是系统定义的一些整型常数,表示文件的打开方式。

flags的可选值如下所示:

O_RDONLY:以只读方式打开文件

O_WRONLY:以只写方式打开文件

O_RDWR:以读写方式打开文件

以上三种flags是互斥的,不可同时使用,但是可以和下列flags利用“|”运算符组合。

O_CREAT:若打开的文件不存在则自动建立

O_EXCL:如果O_CREAT已经被设置,此指令回去检查文件是否存在。文件若不存在则建立该文件。若O_CREAT和O_EXCL同时使用时,若打开的文件为一个链接,则会打开失败。

O_NOCTTY:如果要打开的设备为终端设备时,则不会将该终端机当作进程控制终端机。

O_TRUNC:若文件存在并且以可写的方式打开时,此标志会清空文件。这样原来的文件内容会消失。

O_APPEND:以附加的文件打开文件。当读写文件时会从文件尾开始向后移动,写入的数据会以附加的方式加入到文件后面。

O_NONBLOCK:以不可阻断方式打开文件,,也就是无论文件有无数据都去或者等待操作,都会立即打开文件。

O_NDELAY:O_NONBLOCK

O_SYNC:以同步的方式打开文件,所有的文件操作不写入缓存。

O_NOFOLLOW:如果参数pathname所指的文件为一个符号链接,则会打开失败。

O_DIRECTORY:如果参数pathname所指的文件的目录不存在,则打开文件失败。

——————打开文件的权限

在新建文件时需要设置新文件权限。参数mode定义了下面这些参数,可以直接使用这些常数来设置文件的权限,这些权限设置只有在建立新文件时才会有效。

S_IRWXU:00700权限,该文件所有者具有可读可写可执行的权限。

S_IRUSR或S_IREAD:00400权限,该文件所有者具有可读权限。

S_IWUSR或S_IWRITE:00200权限,该文件所有者具有可写权限。

S_IXUSR或S_IEXEC:00100权限,该文件所有者具有可执行权限。

S_IRWXG:00070权限,该文件用户组具有可读可写可执行权限。

S_IRDRP:00040权限,该文件用户组具有可读权限。

S_IWGRP:00020权限,该文件用户组具有可写权限。

S_IXGRP:00010权限,该文件用户组具有可执行权限。

S_IRWXO:00007权限,其他用户具有可读可写可执行权限。

S_IROTH:00004权限,其他用户具有可读权限。

S_IWOTH:00002权限,其他用户具有可写权限。

S_IXOTH:00001权限,其他用户具有可执行权限。

注意:记忆时候可以找到规律~

——————关闭文件函数close()

函数close的作用是关闭一个已经打开的文件。使用完文件后需要使用close函数关闭i该文件,这个操作会让数据写回磁盘,并释放该文件所占用的资源。

该函数的使用方法是:

int close(int fd);

参数fd是用open函数打开文件时返回的打开序号。如果成功关闭文件则返回0,否则返回-1.在关闭文件时,可能返回EBADF错误,表示需要关闭的文号不存在。

在使用这个函数时,需要包含下列头文件:

#include

2013年4月2日

文件读写

在进行文件写入操作时,只是在文件的缓冲区中操作,可能没有立即写到文件中。需要使用sync或者fsynx函数将缓冲区中的数据写入到文件中。

————在文件中写字符函数write

函数write可以把一个字符串写入到一个已经打开的文件中。这个函数的使用方法为:

ssize_t write(int fd,void *buf,size_t count);

在参数的列表中,fd表示已经打开的文件号,buf是需要写入的字符串,count是一个整型数,表示需要写入的字符个数。size_t是一个相当于整型的数据类型,表示需要写入字节的数目。将字符串写入文件以后,文件的写位置也会随之移动。

如果写入成功,write函数会返回实际写入的字节数,发生错误则返回-1。

————读取文件函数read

函数read()可以从一个打开的文件读取字符串,这个函数的使用方法是:

ssize_t read(int fd,void *buf,size_t count);

在参数列表中,fd表示已经打开的文件编号。buf是一个空指针,读取的内容会返回到这个指针指向的字符串。count表示需要读取的字符的个数。返回值表示取到的字符串的个数,如果返回0,则表示已经到达文件末尾或者文件中没有内容可以读取。在读文件的时候,文件的读位置随着读取到的字节移动。当发生到错误时,返回值-1。

———————文件读写位置的移动

每一个已经打开的文件都有一个读写位置。当打开文件的时候通常读写位置是指向文件开头,若是以附加的形式打开文件,则读写位置会指向文件末尾。read或write函数读写文件的时候,读写位置会随读写的字节相应移动。可以用lseek函数在文件内容中的位置上面移动,这样就可以在文件中的不同位置进行读写。这个函数的使用方法:

off_t lseek(int fd,off_t offset,int whence);

在参数列表中,fd表示用open函数打开的文件返回编号,参数offset表示根据参数whence来读写位置的位移数,whence表示系统定义的常量,可能有下面这些赋值:

SEEK_SET:参数offset即为新的读写位置。

SEEK_CUR:以目前的读写位置往后增加offset个位移量。

SEEK_END:将读写位置指向文件末尾后再增加offset个位移量。

当whence值为SEEK_CUR或SEEK_END时,参数offset允许负值的出现,这是表示在当前位置或者文件末尾位置上向前移动若干个字节。下面是一些常用的文件位置移动:

lseek(int fd,0,SEEK_SET):将读写位置移动到文件开头。

lseek(int fd,0,SEEK_END):将读写位置移动到文件结尾。

lseek(int fd,0,SEEK_CUR):取得当前文件的位置。

函数调用成功时会返回这个文件当前的读写位置,即距离开头多少个字节。若有错误则返回-1.

要使用这个函数需要包含下列头文件:

#include

#include

2013年4月8日

——————将缓冲区数据写入到磁盘函数sync

所谓缓冲区,是Linux系统对文件的一种处理方式。在对文件进行写操作的时候,并没有立即把数据写入磁盘,而是把数据写入到缓冲区中。如果需要把数据立即写入到吸盘,可以使用sync函数。用这个函数强制写入缓冲区数据的好处的话i保证数据有同步。这个函数的使用方法如下:

int sync(void)

这个函数会对当前程序打开的所有文件进行处理,韩寒苏没有参数,返回值为0.

要使用这个函数需要包含下列头文件

#include

————————将缓冲区数据写入到磁盘函数fsync

函数fsync的从用是将缓冲区数据写入到磁盘。与sync函数不同的是,这个函数可以制定打开文件的编号。这个函数的使用方法如下:

int fsync(int fd);

参数fd是open函数打开文件时返回的编号。函数如果执行成功则返回0,否则返回-1.

要使用这个函数需要包含下列头文件

#include

文件的锁定

所谓文件的锁定,指的是以独占的方式打开文件。一个程序打开文件以后,其它的程序不能读取或者写入文件。文件的锁定有利于文件的一致性。

————————文件锁定函数flock

在访问一个文件时,可以用flock函数对文件进行锁定,防止其他用户同时访问这个文件发生数据不一致的情况。这个函数的使用方法如下:

int flock(int fd,int operation);

在参数列表中,fd是open函数打开文件时返回的打开序号。operation是系统定义的一些整型常量,可能的取值如下:

LOCK_SH:建立共享锁定。其他程序可以同时访问这一个文件夹。多个程序可以同时对一个文件建立共享锁定。

LOCK_EX:建立互斥锁定。其他用户不能同时访问这一个文件,一个文件同时只有一个互斥锁定。单一文件不能同时建立共享锁定与互斥锁定。

LOCK_UN:解除文件锁定状态。

LOCK_NB:无法建立锁定时,此操作不可阻断,马上返回进程。通常与LOCK_SH或LOCK_EX做OR(|)组合。

——————————文件锁定函数fcntl

函数fcntl的作用是对一个文件进行锁定。与flock函数不同的是,fcntl可以设定对文件的某一部分进行锁定,该函数的使用方法如下所示:

int fcntl(int fd);

int fcntl(int fd,int cmd,long arg)

int fcntl(int fd,int cmd,struct flock *lock);

参数fd是open

函数打开文件时返回的文件编号,cmd是系统定义的一些整型常量,用来设置文件的打开方式。参数lock指针为flock类型结构体指针,用来设置锁定文件的一个区域。

flock结构体的定义方式如下所示:

struct flock

{

short int l_type;//文件的锁定状态

short int l_whence;//设置l_start位置

off_t l_start;//锁定区域的开头位置,从这个位置开始锁定文件的内容

off_t l_len;//锁定文件区域的大小

pid_t l_pid;//锁定文件的进程

};

使用这个函数需要包含下列头文件:

#include

#include

文件的移动和复制

——————文件的移动函数rename

在同一个分区中移动函数可以用rename函数。该函数的使用方法如下所示:

int rename(char *oldpath,char *newpath);

在参数列表中,oldpath表示原文件的路径,newpath表示新文件的路径。文件移动成功将返回0,不成功返回-1.

该函数需用下列头文件:

#include

在C程序中,没有直接复制一个文件的函数。如果需要复制一个文件,可以分别打开源文件和目标文件。依次从源文件中读取一定长度的内容,然后写入到目标文件中。

//需要掌握的知识包括目录的创建与删除,文件的创建与删除,文件的移动和复制,文件的锁定和权限,文件的缓冲区操作和文件的读写。难点在于文件的读写。

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值