Linux下系统调用实现文件操作

系统调用(系统调用是操作系统提供给用户程序的一组“特殊”函数接口,用户通过这组接口获得操作系统提供的服务)中操作I/O的函数,都是针对文件描述符的。
系统调用
通过文件描述符可以直接对相应文件进行操作,如:open、close、write、read、ioctl
#define STDIN_FILENO 0 //标准输入的文件描述符
#define STDOUT_FIFENO 1 //标准输出的文件描述符
#define STDERR_FILENO 2 //标准错误的文件描述符
程序运行起来后这三个文件描述符是默认打开的

open:打开文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
参数:
pathname:文件的路径及文件名。
flags:open函数的行为标志。
mode:文件权限(可读、可写、可执行)的设置。
返回值:
成功返回打开的文件描述符。
失败返回-1,可以利用perror去查看原因。


close :关闭文件
#include <unistd.h>

int close(int fd);
参数:
fd是调用open打开文件返回的文件描述符。
返回值:
成功返回0。
失败返回-1,可以利用perror去查看原因。

write:把指定数目的数据写到文件
#include <unistd.h>

ssize_t write(int fd, const void *addr,
size_t count);
参数:
fd:文件描述符。
addr:数据首地址。
count:写入数据的字节个数。
返回值:
成功返回实际写入数据的字节个数。
失败返回-1,可以利用perror去查看原因。

read:把指定数目的数据读到内存
#include <unistd.h>

ssize_t read(int fd, void *addr, size_t count);
参数:
fd:文件描述符。
addr:内存首地址。
count:读取的字节个数。
返回值:
成功返回实际读取到的字节个数。
失败返回-1,可以利用perror去查看原因。

练习:


#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>

int main()
{
	int fd = open("a.txt",O_RDWR);
	if(fd<0)
	{
		perror("open  ");
	}
	printf("fd = %d\n", fd);
	close(fd);
	return 0;
}



#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>

int main()
{
	int fd = open("a.txt",O_RDWR | O_CREAT  | O_TRUNC,0666);
	if(fd<0)
	{
		perror("open  ");
	}
    close(fd);
    return 0;
}


#include <unistd.h>
int main()
{   
	char str[10];
	read(0,str,10);	    //标准输入
	write(1,str,10);   //标准输出
	return 0;
}


#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>

int main()
{
	int fd = open("a.txt",O_RDWR) ;
	if(fd<0)
	{
		perror("open  ");
	}
	printf("fd = %d\n",fd);
	char str[10];
	read(fd, str, 8);
	str[8] = '\0';
	printf("%s\n",str);
        close(fd);
	return 0;
}


#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>

int main()
{
	int fd = open("a.txt",O_RDWR|O_TRUNC|O_CREAT,0666) ;
	if(fd<0)
	{
		perror("open  ");
		return 0;
	}
	char str[20];
	write(fd,"111111111111",12);
	lseek(fd,0,SEEK_SET);   //读写位置移动到文件开头,SEEK_CUR当前位置,SEEK_END,末尾
	read(fd, str,12);
	str[12]='\0';
	printf("%s\n",str);
  	return 0;
}

系统调用实现cp命令(文件打开读写关闭综合应用): 使用系统调用实现cp命令

猜你喜欢

转载自blog.csdn.net/qq_39532558/article/details/85267672