access()
函数根据参数中给定的模式(位的形式)来检查调用进程对文件的权限。
头文件:
函数原型:
int access(const char* path, int mode);
参数:
返回值:
允许返回0,否则返回-1,并设置errno来指示错误原因,errno有如下几个值:
示例:
#include
#include
#include //errno所在头文件
#define FILEPATH "testfile"
int main()
{
if (access(FILEPATH,R_OK|F_OK|X_OK) == 0) {
printf("file exists, ready to read.\n");
} else {
if (errno == EACCES) {
printf("No permission. \n");
} else if (errno == EINVAL) {
printf("Mode is invalid. \n");
} else {
printf("Other reason. \n");
}
}
return 0;
}
参考资料:https://linux.die.net/man/2/access
snprintf()
函数用于格式化并存储一个系列的字符或者值到char数组缓冲区中。
头文件:
函数原型:
int snprintf(char *str, size_t size, const char *format, ...);
参数:
\0
);返回值:
格式化成功时,返回格式化字符串的长度,失败时,返回-1,并设置errno来指示错误原因。
示例:
#include
int main()
{
char buffer[10];
const char* name = "zhangsan01234";
int bytes;
bytes = snprintf(buffer,sizeof(buffer),name);
printf("buffer:%s\nbytes:%d\n",buffer,bytes);
bytes = snprintf(buffer,4,"%d",123456);
printf("new buffer:%s\nnew bytes:%d\n",buffer,bytes);
return 0;
}
/*
$ ./test
buffer:zhangsan0
bytes:13
new buffer:123
new bytes:6
*/
open函数用来打开或者创建新的文件。
头文件:
函数原型:
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
参数:
返回值:
如果打开文件成功,将返回一个新的文件描述符(非负整数),否则将返回-1,并且将失败原因设置给errno.
示例:
#include
#include
#define FILE "text.txt"
int main()
{
int fd;
fd = open(FILE,O_RDWR|O_CREAT,S_IRWXU);
if (fd != -1) {
printf("Successful.\n");
} else {
printf("Error.\n");
}
return 0;
}
write()
函数用来向文件中写数据。
头文件:
函数原型:
ssize_t write(int fd, const void *buf, size_t count);
函数参数:
返回值:
写入成功,将返回写入的字节数,否则返回-1,并将失败原因设置给errno
。
综合示例
#include
#include
#include
#include
const char *file = "test.txt";
int main()
{
//先判断文件是否存在
if (access(file,F_OK)) {
printf("File is not exist,please creat it.\n");
} else {
//文件存在,以只写方式打开文件
int fd;
fd = open(file,O_WRONLY|O_APPEND);
if (fd > 0) {
//打开文件成功,开始写入文件
char message[40];
char fmt_msg[10];
printf("please enter a message:\n");
scanf("%s",message);
//格式化输入内容,只写入前10个字符
snprintf(fmt_msg, sizeof(fmt_msg),message);
//开始写入文件
int size = write(fd,fmt_msg,sizeof(fmt_msg));
if (size != -1)
printf("write sucessful.\n");
else
printf("write error, reason:%d\n",errno);
} else {
printf("open failed: %d\n",errno);
}
}
return 0;
}