unix环境编程 文件操作

1.  文件的打开读写 关闭

int open(const char *pathname,int flag,…)   打开一个文件

成功则返回文件描述符,若出现则返回-1

flag可以取下面的常量

O_RDONLY  只读打开

O_WRONLY  只写打开

O_RDWR    读写打开

其它的常量 O_APPEND,O_CREAT,O_EXCL,O_TRUNC,O_NOCTTY,O_NONBLOCK是可选的。

int create(const char *pathname,mode_t mode)     创建一个文件

若成功则返回为只写打开的而文件描述符,若出现错误则返回-1

int close(int fd)     关闭一个文件

若成功则返回0,若出错则返回-1

ssize_t read(int fd,void *buf,size_tnbytes)    读文件

如果读取成功,则返回读到的字节数,如果出错则返回-1

ssize_t write(int fd,vonst void *buf,size_tnbytes)    写文件

若成功则返回已写的字节数,若出错则返回-1

复制一个现存的文件描述符

int dup(int fd)

int dup2(int fd1,int fd2)

若成功则返回新的文件描述符,若出错返回-1;

改变已经打开的文件的性质

int fcntl(int fd,int cmd,…)

2.文件的信息、类型等

int stat(const char *restrictpathname,struct stat *restrict buf)     显示文件信息

int fstat(intfd,struct stat *buf)

int lstat(constchar *restrict pathname,struct stat *restrict buf)

<sys/stat.h>中的文件类型宏

S_ISREG()  普通文件   S_ISDIR() 目录文件   S_ISCHR() 字符特殊文件  S_ISBLK()  块特殊文件  S_IFIFO() 管道或者FIFO  S_ISLNK()符号链接 S_ISSOCK() 套接字

int utime(constchar *pathname,const struct utimebuf *times)  更改文件的访问和修改时间

若成功则返回0,若出错则返回-1

3文件的访问权限和长度

int access(constchar *pathname,int mode)   测试用户是否具有某种权限

若成功则返回0,若出错则返回-1

mode_tumask(mode_t cmask)  为进程设置文件模式创建屏蔽字,并返回以前的值

chmod(const char*pathname,mode_t mode)   改变文件的访问权限

int fchmod(intfd,mode_t mode)

若成功则返回0,若出错则返回-1

int chown(constchar *pathname,uid_t owner,gid_t group)   改变文件所有者

int fchown(intfd,uid_t owner,gid_t group)

int ichown(constchar *pathname,uid_t owner ,gid_t group)

若成功则返回0,出错则返回-1

inttruncate(const char *pathname,off_t length) 文件截断

int ftruncate(intfd,off_t length)

若成功则返回0,若出错则返回-1

4 文件的链接和删除

int link(constchar *existingpath,const char *newpath)  创建文件的链接

若成功则返回0,若出错则返回-1

int unlink(constchar *pathname)   删除一个目录项

若成功则返回0,若出错则返回-1

int remove(constchar *pathname)   解除对一个文件或者目录的链接

若成功则返回0,若出错则返回-1

int rename(constchar *oldname,const char *newname)  文件或者目录更名

若成功则返回0,若出错则返回-1

int symlink(constchar *actualpath,const char *sympath)  创建一个符号链接

若成功返回0,若出错则返回-1

ssize_treadlink(const char *restrict pathname,char *restrict buf,size_t bufsize) 打开链接本身

若成功则返回读到的字节数,若出错则返回-1

5.下面的程序打开文件的前n个字节

# include<stdio.h>
# include <unistd.h>
int main(int argc,char **argv)
{
int fd;
if(argc!=3)
{
printf("argument error\n");
return -1;
}

int n=atoi(argv[1]);     //字节数存放在 argv[1]
char *buf=(char *)malloc((n+1)*sizeof(char));
if((fd=open(argv[2],O_RDONLY))<0)    //文件名存放在argv[2]
{
perror("open");
return -1;
}
if(read(fd,buf,n)<0)
{
perror("read");
return -1;
}
buf[n]=‘\0‘;
printf("%s\n",buf);
return 0;
}

6.下面的程序判断文件的类型

# include <stdio.h>
# include <unistd.h>
# include <sys/stat.h>
int main(int argc,char **argv)
{
int i;
struct stat buf;
char *ptr;

int err=lstat(argv[1],&buf);   //文件名存放在argv[1]
if(err<0)
{
perror("lstat");
return -1;
}

if(S_ISREG(buf.st_mode))
{
ptr="regular file";
}
else if(S_ISDIR(buf.st_mode))
{
ptr="directory";
}
else if(S_ISCHR(buf.st_mode))
{
ptr="character file";
}
else if(S_ISBLK(buf.st_mode))
{
ptr="block file";
}
else if(S_ISFIFO(buf.st_mode))
{
ptr="fifo";
}
else if(S_ISLNK(buf.st_mode))
{
ptr="sysmbolic link";
}
else if(S_ISSOCK(buf.st_mode))
{
ptr="socket";
}
else
ptr="unkown mode";

printf("%s\n",ptr);

return 0;
}

unix环境编程 文件操作,布布扣,bubuko.com

时间: 2024-10-22 16:59:13

unix环境编程 文件操作的相关文章

unix环境编程 目录操作

1.目录操作有 mkdir(constchar *pathname,mode_t mode) 创建目录,成功则返回0,若出错则返回-1 int rmdir(const char *pathname) rmdir可以删除一个空目录,成功则返回0,若出错返回-1 DIR *opendir(const *pathname) 成功则返回指针,若出错则返回NULL struct dirent *readdir(DIR *dp) 若成功则返回指针,出处则返回NULL void rewinddir(DIR *

UNIX环境编程学习——反思认识

 学习情况: 有关UNIX系统环境编程的学习时间用来很长的时间,但是感觉效果还是不是太好,在中间经过了期末考试,用来很长的时间用来学习专业课,就将该过程的学习放到了一边上,放假以后又回家造成了中间的学习时间打的很散,又由于自己的水平还是十分有限的,所以该过程的学习效果感觉不太好,时间的观念在脑中还是不够强烈,整个过程中总体来说只是在总体上了解了一个大概,实践还差的很远. 学习期间博客: 1.UNIX环境编程初步认识--编程环境搭建 2.UNIX环境编程初步认识--文件和I/O 3.UNIX环

Linux C高级编程——文件操作之系统调用

Linux C高级编程文件操作之系统调用 宗旨:技术的学习是有限的,分享的精神的无限的! 库函数是一些完成特定功能的函数,一般由某个标准组织制作发布,并形成一定的标准.使用库函数编写的函数一般可以应用于不同的平台而不需要做任何修改,具有很好的可移植性. 系统调用函数与操作系统直接相关,不同的操作系统所使用的系统调用可能不太一样,因此,如果两个操作系统差异很大,系统调用函数的可移植性就不高.例如windows采用的系统调用的应用程序不能直接在Linux下编译运行. 之所以使用系统调用是因为系统资源

unix环境编程 tcp通信

TCP通信的过程为: 一. 服务器端: 1.socket(int domain,int type,int protocol):建立套接字: 2 .bind(int sockid,struct sockaddr *addrp,socklen_t addrlen):绑定端口和地址信息: 3.listen(int sockid,int qsize):监听套接字; 4.fd=accept(int sockid,struct sockaddr *callerid,socklen_t *addrlenp):

unix环境高级编程——文件操作

一.阻塞io操作和非阻塞io操作 对于阻塞io操作:当cpu得不到需要的文件数据的时候,则将自己挂起,直到有了数据,才能执行下面的操作. 非阻塞io:  当cpu得不到文件时候,其一直在轮询cpu,直达得到数据. 二.文件描述符 对于内核而言,所有打开的文件,都用文件描述符来引用.所有的文件操作都是由内核态完成的,当一个用户的进程创建一个文件时候,内核会给其返回一个文件描述符. 而当用户进程,对文件进行各类读写操作的时候,也是给内核传入文件描述符.这样,就可以对其文件进行操作了. 三.open函

Unix环境之文件IO

Unix系统中的大多数文件IO只需用到5个函数:open.read.write.lseek以及close.这些函数是不带缓冲的IO,不带缓冲指的是每个read和write都调用内核中的一个系统调用,它们不是ISO/C的组成部分,而是POSIX和SUS的东西. 文件描述符-- 对于内核而言,所有打开的文件都通过文件描述符引用.文件描述符是一个非负整数,按照惯例,文件描述符0.1.2分别表示的是标准输入.标准输出.标准出错,在依从POSIX的应用程序中,这3个幻数应当替换为符号常量STDIN_FIL

APUE《UNIX 环境编程》读后感

今天终于把APUE前17章全部看完了,基本上主要知识就在这些章节里. 之前看完<unix/linux编程实践教程>时,有一种豁然开朗.心旷神怡的感觉,在代码级别了解了linux很多系统机制,和一直不理解编程细节,而且对UNIX编程的整体知识结构有了很好的把握. APUE是公认的经典,事无巨细的把每个知识讲解很透,还有很多细心的提示.但是看起来的过程并不觉得那么美好,原因有以下几点: 1.译者那糟糕的水平!很多句子根本就不是中国人能说口的.无奈英语烂,顶多能看看man的水平,只能看中文版了.这本

Unix环境之文件和目录

文件结构stat-- 下面三个函数可以获取文件的状态信息: #include <sys/stat.h> int stat(const char *path, struct stat *buf); int fstat(int fd, struct stat *buf); int lstat(const char *path, struct stat *buf); stat函数指定文件路径,fstat指定文件描述符,lstat类似于stat,但对于符号链接文件来说,lstat获取的是符号链接文件本

linux编程---文件操作

文件操作的系统函数: open函数,close函数,read函数,write函数,getcwd函数,access函数,stat函数,fstat函数,getcwd函数 函数原型: 1:open函数 功能:打开现有的文件,或者创建新文件并打开:,成功返回值是文件标识号,失败为-1 参数:parhname是文件路径,flag标识可取如下值 mode表示文件访问权限 2:close函数 功能:关闭文件操作,返回值表示是否成功 参数:文件标识号 3:read函数 功能:读取文件内容,返回值表示实际读取内容