1.低级文件编程
- /*
- * 低级文件编程
- * 打开创建一个文件并设定其权限
- * Lzy 2011-6-9
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <fcntl.h>
- #include <sys/stat.h>
-
- int main(void)
- {
- int fd; //定义文件描述符
-
- /*创建文件设置权限为777,但最后并不是777,这是因为umask*/
- fd = open("lzy.txt", O_RDWR | O_CREAT, S_IRWXU | S_IRWXG | S_IROTH); //创建lzy文件,可读写打开文件
- if(fd < 0) //打开是否成功
- {
- perror("open error"); //在标准输出打印出错误信息
- exit(-1);
- }
-
- close(fd); //关闭文件
- return 0;
- }
- /*
- * 低级文件编程
- * 写入字符串至文件
- * Lzy 2011-6-9
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <fcntl.h>
- #include <sys/stat.h>
- #include <error.h>
-
- int main(void)
- {
- int fd_1; //定义文件描述符
- char buf[100]; //临时缓冲区
-
- fd_1 = open("lzy_1.txt", O_RDWR | O_CREAT, S_IRWXU | S_IRWXG | S_IROTH); //可读写打开文件
- if(fd_1 < 0) //打开是否成功
- {
- perror("open fd_1 error"); //在标准输出打印出错误信息
- exit(-1);
- }
-
-
- printf("输入字符:");
- scanf("%s",buf);
-
- if(write(fd_1, buf, strlen(buf)) == -1) //把字符串写入文件
- {
- perror("write error");
- exit(-1);
- }
-
- close(fd_1); //关闭文件
- return 0;
- }
- /*
- * 低级文件编程
- * 文件复制
- * Lzy 2011-6-9
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <fcntl.h>
- #include <sys/stat.h>
- #include <error.h>
-
- int main(int argc, char *argv[])
- {
- int fd_1, fd_2; //定义文件描述符
- char buf[100]; //临时缓冲区
- int ctr, ctw;
-
- if(argc != 2) //检查命令行参数个数
- {
- printf("参数太少\n");
- exit(0);
- }
-
- fd_1 = open("lzy_1.txt", O_RDONLY); //可读方式打开源文件
- if(fd_1 < 0) //打开是否成功
- {
- perror("open fd_1 error"); //在标准输出打印出错误信息
- exit(-1);
- }
-
- fd_2 = open(argv[1],O_WRONLY | O_CREAT, 00766); //打开目标文件,不存在创建
- if(fd_2 < 0)
- {
- perror("open fd_2 error"); //在标准输出打印出错误信息
- exit(0);
- }
-
-
- /*文件拷贝*/
- while((ctr = read(fd_1, buf, sizeof(buf))) != 0) //读文件直至文件结束
- {
- if(ctr == -1) //读发生错误
- {
- perror("read fd_1 error");
- exit(0);
- }
- else
- {
- ctw = write(fd_2, buf, ctr); //写入文件
- if(ctw == -1)
- {
- perror("write fd_2 error");
- exit(0);
- }
- }
- }
-
- close(fd_2);
- close(fd_1); //关闭文件
- return 0;
- }
2. 低级IO映射到高级IO
分类: LINUX
/*
* FILE * fdopen(int FD, const char * MODE)
* 将标准输入的内容保存到磁盘文件中
* Lzy 2011-6-8
*/
#include
#include
#include
int main(void)
{
char buf[100]; //自定义缓冲区
FILE *fpr, *fpw; //定义两个文件指针
fpr = fdopen(STDIN_FILENO,"r"); //打开低级标准输入文件
if(!fpr) //打开文件是否成功
{
printf("打开低级标准输入文件失败!\n");
exit(-1);
}
fpw = fopen("lzy.txt","w+"); //打开文件
if(!fpw)
{
printf("打开文件失败!\n");
exit(-1);
}
while(fgets(buf,99,fpr)) //读低级标准输入文件直至文件结束
{
fputs(buf,fpw); //写入要保存的文件
}
fclose(fpr); //关闭文件
fclose(fpw);
return 0;
}
3.文件目录操作
- /*
- * 目录操作
- * 创建文件
- * Lzy 2011-6-10
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <fcntl.h>
-
- int main(int argc, char *argv[])
- {
- int ret;
-
- if(argc != 2) //检查命令行参数个数
- {
- printf("参数太少\n");
- exit(0);
- }
-
- ret = mkdir(argv[1], 00766); //创建目录
- if(ret == -1)
- {
- perror("mkdir fail");
- exit(0);
- }
-
- return 0;
- }
- /*
- * 目录操作
- * 删除文件
- * Lzy 2011-6-10
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <fcntl.h>
-
- int main(int argc, char *argv[])
- {
- int ret;
-
- if(argc != 2) //检查命令行参数个数
- {
- printf("参数太少\n");
- exit(0);
- }
-
- ret = rmdir(argv[1]); //删除目录
- if(ret == -1)
- {
- perror("rmdir fail");
- exit(0);
- }
-
- return 0;
- }
- /*
- * 目录操作
- * 列出指定目录下的所有文件和目录
- * Lzy 2011-6-10
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <dirent.h>
- #include <sys/types.h>
-
- int main(int argc, char *argv[])
- {
- DIR *dp; //定义指向DIR结构的指针
- struct dirent *dirp;
-
- if(argc != 2) //检查命令行参数个数
- {
- printf("参数太少\n");
- exit(0);
- }
-
- dp = opendir(argv[1]); //打开目录
- if(dp == NULL) //检查打开是否成功
- {
- perror("opendir fail");
- exit(0);
- }
-
- while((dirp = readdir(dp)) != NULL) //读取目录文件
- {
- if((strcmp(dirp->d_name,".") == 0) || (strcmp(dirp->d_name,"..") == 0)) //跳过当前目录和父目录
- continue;
-
- if(dirp->d_type == DT_DIR) //目录文件
- {
- printf("%s
\t" ,dirp - >d_name ) ;
- }
- else //普通文件
- printf("%s\t",dirp->d_name);
-
- }
-
- closedir(dp); //关闭目录
- return 0;
- }
- /*
- * 目录操作
- * 获取更改当前工作目录
- * Lzy 2011-6-10
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <dirent.h>
- #include <sys/types.h>
-
- int main(void)
- {
- char buf[256];
- int ret;
-
- getcwd(buf,sizeof(buf)); //获取当前工作目录
- printf("当前工作目录%s\n",buf);
-
- ret = chdir(".."); //更改工作目录
- if(ret == -1)
- {
- perror("chdir fail");
- exit(0);
- }
-
- getcwd(buf,sizeof(buf)); //获取工作目录
- printf("工作目录%s\n",buf);
-
- return 0;
- }
4.文件测试
- /*
- * 文件类型测试
- * 查看文件所有者,所属组
- * Lzy 2011-6-10
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/stat.h>
- #include <pwd.h>
- #include <grp.h>
-
- int main(int argc, char *argv[])
- {
- int ret;
- struct stat sbuf; //定义文件类型结构体
- struct passwd *pwd;
- struct group *grp;
-
- if(argc != 2) //检查命令行参数
- {
- printf("应输入测试文件或目录名\n");
- exit(0);
- }
-
- ret = stat(argv[1], &sbuf); //取文件状态信息
- if (ret == -1)
- {
- perror("stat error");
- exit(0);
- }
-
- /*测试文件类型*/
- if(S_ISREG(sbuf.st_mode)) //测试是否是普通文件
- printf(":%s\n",argv[1]);
-
- if(S_ISDIR(sbuf.st_mode)) //测试是否是目录
- printf("
:%s\n" ,argv [1 ] ) ;
-
- /*查看文件所有者,所属组*/
- pwd = getpwuid(sbuf.st_uid); //文件所有者
- if(pwd)
- printf("File Ower:%s\n",pwd->pw_name);
-
- grp = getgrgid(sbuf.st_gid); //文件所属组
- if(grp)
- printf("File Group:%s\n",grp->gr_name);
-
- return 0;
- }
- /*
- * 列举目录
- * Lzy 2011-6-10
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <dirent.h>
-
- int main(int argc, char *argv[])
- {
- DIR *dp;
- struct dirent *dirp;
-
- if(argc != 2) //检查命令行参数
- {
- printf("应输目录名\n");
- exit(0);
- }
-
- dp = opendir(argv[1]); //打开目录
- if(dp == NULL)
- {
- perror("opendir fail");
- exit(0);
- }
-
- while((dirp = readdir(dp)) != NULL) //列举所有文件和目录
- {
- printf("%s\t",dirp->d_name);
- }
-
- closedir(dp); //关闭目录
- return 0;
- }
5.文件属性
- /*
- * 文件类型测试
- * 查看文件所有者,所属组
- * Lzy 2011-6-10
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/stat.h>
- #include <pwd.h>
- #include <grp.h>
-
- int main(int argc, char *argv[])
- {
- int ret;
- struct stat sbuf; //定义文件类型结构体
- struct passwd *pwd;
- struct group *grp;
-
- if(argc != 2) //检查命令行参数
- {
- printf("应输入测试文件或目录名\n");
- exit(0);
- }
-
- ret = stat(argv[1], &sbuf); //取文件状态信息
- if (ret == -1)
- {
- perror("stat error");
- exit(0);
- }
-
- /*测试文件类型*/
- if(S_ISREG(sbuf.st_mode)) //测试是否是普通文件
- printf(":%s\n",argv[1]);
-
- if(S_ISDIR(sbuf.st_mode)) //测试是否是目录
- printf("
:%s\n" ,argv [1 ] ) ;
-
- /*查看文件所有者,所属组*/
- pwd = getpwuid(sbuf.st_uid); //文件所有者
- if(pwd)
- printf("File Ower:%s\n",pwd->pw_name);
-
- grp = getgrgid(sbuf.st_gid); //文件所属组
- if(grp)
- printf("File Group:%s\n",grp->gr_name);
-
- return 0;
- }
- /*
- * 测试文件属性
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/stat.h>
- #include <sys/types.h>
- #include <pwd.h>
- #include <grp.h>
-
- int main(int argc, char * argv[])
- {
- struct stat sbuf;
-
- if(argc < 2)
- {//测试命名行是否输入要测试的文件名
- printf("Usage: %s filename\n", argv[0]);
- return 0;
- }
-
- //获取文件信息
- if(lstat(argv[1], &sbuf) < 0)
- {
- perror("lstat");
- exit(-1);
- }
-
- //测试文件类型
- if(S_ISDIR(sbuf.st_mode))
- {//目录
- printf("%s is dircetory.\n", argv[1]);
- }else if(S_ISCHR(sbuf.st_mode))
- {//字符设备节点
- printf("%s is char device.[%d %d]\n",
- argv[1],
- sbuf.st_dev,
- sbuf.st_rdev);
- }else if(S_ISBLK(sbuf.st_mode))
- {//块设备节点
- printf("%s is block device.[%d %d]\n",
- argv[1],
- sbuf.st_dev,
- sbuf.st_rdev);
- }else if(S_ISLNK(sbuf.st_mode))
- {//符号链接文件
- printf("%s is symbol link file.\n", argv[1]);
- }else if(S_ISREG(sbuf.st_mode))
- {//普通文件
- struct passwd * pwd;
- struct group * grp;
-
- pwd = getpwuid(sbuf.st_uid);
- grp = getgrgid(sbuf.st_gid);
- printf("%s is normal file.\n", argv[1]);
- printf("\tsize=%d Bytes\n", sbuf.st_size);
- printf("\tuser is %s\n",
- pwd ? pwd->pw_name : "");
- printf("\tgroup is %s\n",
- grp ? grp->gr_name : "");
- printf("\t%c%c%c%c%c%c%c%c%c\n",
- (sbuf.st_mode & S_IRUSR) ? 'r' : '-',
- (sbuf.st_mode & S_IWUSR) ? 'w' : '-',
- (sbuf.st_mode & S_IXUSR) ? 'x' : '-',
- (sbuf.st_mode & S_IRGRP) ? 'r' : '-',
- (sbuf.st_mode & S_IWGRP) ? 'w' : '-',
- (sbuf.st_mode & S_IXGRP) ? 'x' : '-',
- (sbuf.st_mode & S_IROTH) ? 'r' : '-',
- (sbuf.st_mode & S_IWOTH) ? 'w' : '-',
- (sbuf.st_mode & S_IXOTH) ? 'x' : '-');
- printf("\tblock size=%d\n", sbuf.st_blksize);
- printf("\tblock number=%d\n", sbuf.st_blocks);
- }
-
- return 0;
- }
- /*
- * access函数获取文件的权限
- * Lzy 2011-6-12
- */
-
- #include <stdlib.h>
- #include <stdio.h>
- #include <unistd.h>
- #include <sys/stat.h>
-
- int main(int argc, char *argv[])
- {
- if(argc != 2) //检查命令行参数
- {
- printf("参数太少\n");
- return 0;
- }
-
- if(access(argv[1], F_OK) == 0) //判断文件是否存在
- {
- if(access(argv[1], R_OK) == 0) //文件可读
- printf("read\n");
-
- if(access(argv[1], W_OK) == 0) //文件可写
- printf("write\n");
-
- if(access(argv[1], X_OK) == 0) //文件可执行
- printf("execute\n");
- }
- else
- {
- printf("文件不存在\n");
- }
-
- return 0;
- }
- /*
- * chmod函数修改文件的权限
- * Lzy 2011-6-12
- */
-
- #include <stdlib.h>
- #include <stdio.h>
- #include <unistd.h>
- #include <sys/stat.h>
-
- int main(int argc, char *argv[])
- {
- int ret;
- if(argc != 2) //检查命令行参数
- {
- printf("参数太少\n");
- return 0;
- }
-
- ret = chmod(argv[1], 00777); //修改文件访问权限
- if(ret == -1)
- {
- perror("chmod error");
- exit(0);
- }
-
- printf("Done\n");
- return 0;
- }
- /*
- * 列举目录
- * Lzy 2011-6-10
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <dirent.h>
-
- int main(int argc, char *argv[])
- {
- DIR *dp;
- struct dirent *dirp;
-
- if(argc != 2) //检查命令行参数
- {
- printf("应输目录名\n");
- exit(0);
- }
-
- dp = opendir(argv[1]); //打开目录
- if(dp == NULL)
- {
- perror("opendir fail");
- exit(0);
- }
-
- while((dirp = readdir(dp)) != NULL) //列举所有文件和目录
- {
- printf("%s\t",dirp->d_name);
- }
-
- closedir(dp); //关闭目录
- return 0;
- }