Linux 文件管理(系统函数)
//read函数
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> /*
STDIN_FILENO:标准输入,值是0
STDOUT_FILENO:标准输出,值是1
STDERR_FILENO:标准错误,值是2
头文件是 unistd.h read(文件标识符,缓冲区,缓冲区大小)函数是从某个文件中读取缓冲区大小的数据
ssize_t read(int fd, void *buf, size_t count);
read()函数的返回值是输入字符的个数+1(+1是因为系统会为输入的字符串加上'\0')
read()相比于scanf()优势在于read()可以读取空格,而scanf()遇到空格结束
但是read不能将数字字符串直接转化成int型,需要调用atoi()函数
read()函数可以读取键盘上输入的每个字符包括回车换行 atoi()函数的头文件是stdlib.h,功能是将字符串转成数字
*/ int main(int arg,char *args[])
{
char buf[]={};
int numx=;
int index=read(STDIN_FILENO,buf,sizeof(buf));
printf("返回值是%d,输入字符串是%s\n",index,buf);
numx=atoi(buf);
printf("输入的数字是%d\n",numx);
return ;
}
//write函数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h> /*
ssize_t write(int fd, const void *buf, size_t count);
write()函数的返回值是写入字符串的大小(不包含'\0')
write()函数向指定文件标识符输出缓冲区数据
*/ int main(int arg,char *args[])
{
char buf[]={};
strcpy(buf,"fly with you!\n");
int index=write(STDOUT_FILENO,buf,strlen(buf));
printf("返回值是%d,\n",index);
return ;
}
//open函数|close()函数
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <errno.h> /*
int open(const char *pathname, int flags);
Opne试图打开参数pathname中的一个文件。
参数flags指定访问该文件的方式。
必须把flags设置为O_RDONLY,O_WRONLY,O_RDWR,O_CREAT,O_APPEND分别表示只读、只写、读写、如果文件存在就创建、追加。
open成功后会返回一个文件描述符。
open失败后会返回-1,并设置errno变量 errno是int型,表示错误编号,头文件是errno.h
strerror()函数是打印错误信息,头文件是string.h
*/ int main(int arg,char *args[])
{
if(arg<)
{
printf("请输入一个参数!\n");
return ;
}
int fd=open(args[],O_RDONLY);
if(fd==-)
{
printf("错误信息:%s\n",strerror(errno));
}else
{
printf("文件标识符是%d\n",fd);
char buf[]={};
//读取当前文件的内容
read(fd,buf,sizeof(buf)-);
printf("%s\n",buf);
close(fd);
}
return ;
}
使用fstat函数获取文件信息。
int fstat(int fd,struct stat *buf)
参数fd必须使用open()函数调用返回的有效文件描述符
使用stat函数获取文件信息
int stat(const char *path,struct stat *buf)
参数path是路径加文件名的字符串 结构体stat
struct stat
{
dev_t st_dev; /*ID of device containing file*/
ino_t st_ino; /*inode number*/
mode_t st_mode; /*protection*/
nlink_t st_nlink; /*numbers of hard links*/
uid_t st_uid; /*user ID of owner*/
gid_t st_gid; /*group ID of owner*/
dev_t st_rdev; /*device ID (if special file)*/
off_t st_size; /*total size,in bytes*/
blksize_t st_blksize; /*blocksize for filesystem I/O*/
blkcnt_t st_blocks; /*number of blocks allocated*/
time_t st_atime; /*time of last access*/
time_t st_mtime; /*time of last modification*/
time_t st_ctime; /*time of last status change*/
}; 为了正确解释文件类型,有一套宏能够计算stat借口的st_mode成员。
S_ISREG(m) is it a regular file?
S_ISDIR(m) directory?
S_ISCHR(m) character device?
S_ISBLK(m) block device?
S_ISFIFO(m) FIFO (named pipe)?
S_ISLNK(m) symbolic lin?(Not in POSIX.-)
S_ISSOCK(m) socket?(Not in POSIX.-)
//fstat()函数
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <errno.h> int main(int arg,char *args[])
{
if(arg<)
{
printf("请输入一个参数!\n");
return ;
}
//open file
/*
备注:如果是以追加的方式打开文件,必须使用 O_RDWR|O_APPEND;单独的是O_APPEND没有效果!
*/
int fd=open(args[],O_RDONLY);
//Judgment file identifier
if(fd==-)
{
printf("error msg:%s\n",strerror(errno));
}else
{
printf("file identifier:%d\n",fd);
//define struct stat
struct stat buf;
//get file stat
fstat(fd,&buf);
//judge file tyep
if(S_ISREG(buf.st_mode))
{
printf("this is regular file!\n");
}else if(S_ISDIR(buf.st_mode))
{
printf("this id directory!\n");
}
//show file size
printf("file size:%d\n",buf.st_size);
//close file
close(fd);
}
return ;
}
getpass()函数
读写用户输入,屏幕不回显(一般用于输入密码不显示)
char * getpass(const char * prompt);
getpass用于从键盘读取用户输入,但屏幕不回显。
参数prompt为屏幕提示字符。
函数返回值为用户键盘输入字符串
//getpass()函数的使用
#include <stdio.h>
#include <unistd.h> int main(int arg,char *args[])
{
char *s=getpass("input password:");
printf("your password :%s\n",s);
return ;
}
Linux 文件管理(系统函数)的更多相关文章
- Linux常用系统函数
Linux常用系统函数 一.进程控制 fork 创建一个新进程clone 按指定条件创建子进程execve 运行可执行文件exit 中止进程_exit 立即中止当前进程getdtablesize 进程 ...
- 标准c库函数与Linux下系统函数库 区别 (即带不带缓冲区的学习)
我们都知道,C语言在UNIX/Linux系统下有一套系统调用(系统函数),比如文件操作open().close().write().read()等,而标准C语言的库函数中也有一套对文件的操作函数fop ...
- linux文件管理 -> 系统文件属性
-rw-------. 1 root root 4434 May 30 13:58 ks.cfg -rw-------. ①:文件类型与权限 ②:硬链接次数 root ③:所属用户 root ④:所属 ...
- linux文件管理 -> 系统压缩打包
如果希望windows和Linux互相能使用的压缩工具, 建议.zip格式 压缩的好处主要有: 节省磁盘空间占用率 节省网络传输带宽消耗 网络传输更加快捷 Linux系统常见的后缀名所对应的压缩工具 ...
- 【Linux程序设计】之环境系统函数综合实验
这个系列的博客贴的都是我大二的时候学习Linux系统高级编程时的一些实验程序,都挺简单的.贴出来纯粹是聊胜于无. 实验题目:Linux环境下系统函数综合实验 实验目的:熟悉并掌握Linux环境下数学函 ...
- Linux下系统时间函数、DST等相关问题总结(转)
Linux下系统时间函数.DST等相关问题总结 下面这个结构体存储了跟时区相关的位移量(offset)以及是否存在DST等信息,根据所在的时区信息,很容易找到系统时间与UTC时间之间的时区偏移,另外根 ...
- linux 系统函数之 (dirname, basename)【转】
转自:http://blog.csdn.net/peter_cloud/article/details/9308333 版权声明:本文为博主原创文章,未经博主允许不得转载. 除非你的原件考虑跨平台. ...
- linux 系统函数 basename和dirname
在linux系统中有这样两个系统函数,basename 和 dirname 1.basename 用于 获取文件名, 1.1 当给定扩展名作为参数之后,甚至可以直接获取文件名 2.与basename ...
- Linux网络编程2——系统函数
socket信息数据结构 #include <netinet/in.h> struct sockaddr { unsigned short sa_family; /*地址族*/ ]; /* ...
- 标准c库函数和linux系统函数的关系
c库IO函数的工作流程 c库函数与系统函数的关系 虚拟地址空间 文件描述符
随机推荐
- 再谈 Promise
读完这篇文章,预计会消耗你 40 分钟的时间. Ajax 出现的时候,刮来了一阵异步之风,现在 Nodejs 火爆,又一阵异步狂风刮了过来.需求是越来越苛刻,用户对性能的要求也是越来越高,随之而来的是 ...
- 调试手机上网页 (断点 console timeline 选择dom)
用手机看网页,越来越多,手机app套个webview的也很多,那该如何调试手机上的页面了?比如 断点,选dom,console,控制台输出,查看内存,== 嗯,万能的的chrome和safari还是帮 ...
- Task-based Asynchronous Operation in WCF z
Download source - 93.5 KB Introduction Though performance blocking and sluggishness are the tailback ...
- sqlserver 删除临时表
sqlserver 删除临时表 if object_id('tempdb..#tempTable') is not null Begin drop table #tempTable End
- String的解析
String作为Java中最常用的引用类型,相对来说基本上都比较熟悉,无论在平时的编码过程中还是在笔试面试中,String都很受到青睐,然而,在使用String过程中,又有较多需要注意的细节之处. 1 ...
- Android--使用XMLPull解析xml
在Android中极力推荐的xmlpull方式解析xml.xmlpull不只能够使用在Android上.相同也适用于javase,但在javase环境下.你须要自己去获取xmlpull所依赖的类库. ...
- 微信跳一跳 可以直接更改分数, POST 请求没有校验
这两天逛 v 站出现了一众微信跳一跳 'AI',已经被刷屏了…… https://www.v2ex.com/t/418833 https://www.v2ex.com/t/418775 https:/ ...
- Windows如何定时关机
方法一:首先在"开始"菜单点击"运行",输入"at xx:xx shoutdown -s" 可以实现定时关机,xx:xx指的是具体关机时间. ...
- C++11 Lambda表达式简单解析
C++11 新增了非常多特性,lambda 表达式是当中之中的一个.假设你想了解的 C++11 完整特性, 建议去http://www.open-std.org/看看新标准! 非常多语言都提供了 la ...
- 一张图片教会你写mysql 语句
MySQL的语句执行顺序 MySQL的语句一共分为11步,如下图所标注的那样,最先执行的总是FROM操作,最后执行的是LIMIT操作.其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入 ...