文件编程
一.系统调用~~创建
int creat (const char *filename, mode_t mode);
filename:即要创建的文件名(包含路径,缺省为当前路径)
mode:创建模式
常见的模式:
S_IRUSR 可读
S_IWUSR 可写
S_IXUSR 可执行
S_IRWXU 可读,写,执行
还可以用数字表示:
4 代表可读
2 代表可写
1 代表可执行
7 代表可读,写,执行
例:
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
void creat_file(char *filename)
{
if (creat(filename,0755) < 0)
{
printf("Creat file %s failure!\n",filename);
exit(EXIT_FAILURE);
}
else
{
printf("Creat file %s success!\n",filename);
}
}
void main(int argc,char *argv[])
{
int i;
if (argc < 2)
{
perror("You haven't input the filename.please try again!\n");
exit(EXIT_FAILURE);
}
for (i = 1;i < argc;i++)
{
creat_file(argv[i]);
}
exit(EXIT_SUCCESS);
}
代码编译环境:
系统:Rad Hat 5
编译器:GCC 4.1.2
(以后代码不特意说明都是同样的编译环境)
二.系统调用~~打开
1. int open(const char *pathname, int flags);
2. int open(const char *pathname, int flags,mode_t mode);
pathname: 要打开的文件名(包含路径,缺省为当前路径)
flags:打开文件的标志
常见的打开标志:
O_DONLY 只读方式打开
O_WRONLY 只写方式打开
O_RDWR 读写方式打开
O_APPEND 追加方式打开
O_CREAT 创建一个文件(当要打开的文件不存在的时候)
O_NOBLOCK 非阻塞的方式打开------------------------(这个到现在还不是很明白什么是非阻塞,希望得到大牛指点一下)
注意:
使用O_CREAT标志,需要使用第二种函数 这个函数中的第三个参数是说明要建立什么样的文件
例:
}
三.系统调用~~关闭
int close(int fd);
fd:文件描述符(打开文件时,系统分配的一个标志符)
例子: 上面已经用到了
四.系统调用~~读
int read(int fd,const void *buf,size_t length);
从文件描述符fd所指定的文件中读取length个字节到buf所指向的缓冲区中,返回值为实际读取的字节数。
五.系统调用~~写
int write(int fd,const void *buf ,size_t length);
把length个字节从buf指向的缓冲区中写入到文件描述符fd指向的文件中,返回值为实际写入的字节数。
六.系统调用~~定位
int lseek(int fd,offset_t offset,int whence);
将文件读写指针相对whence移动offset个字节,操作成功时,返回文件指针相对于文件头的位置,whence可使用如下值:
SEEK_SET 相对文件开头
SEEK_CUR 相对文件读写指针的当前位置
SEEK_END 相对文件末尾
offset可取负值,表示想前移动,如: lseek(fd,-5,SEEK_CUR)表示将文件指针相对当前位置向前移动5个字节
用lseek(fd,0,SEEK_END)可以测文件的长度,因为其返回值就是相对于文件头的位置。
七.系统调用~~访问判断
int access(const chat * pathname,int mode);
pathname:文件名称
mode:要判断的访问文件权限,可以 取以下值或是他们的组合,R_OK:文件可读,W_OK:文件可写。X_OK:文件可执行,F_OK:文件存在
返回值:当我们测试成功时,函数返回0,负责如果一个条件不符,返回-1
八.综合实例 ~~copy程序
}
欢迎各位大神指正批评 ·········