Linux-(C)文件读写实例(系统调用/标准I/O库)

本文探讨了Linux下文件读写中系统调用与库函数的区别,包括实现方式、性能影响和代码实现。通过实例展示了如何使用系统调用和库函数进行文件的写入和读取操作,同时也涵盖了文件属性判断和日志写入。
摘要由CSDN通过智能技术生成

文件在Linux中是一个非常重要的概念,几乎一切都是文件(引用Linux程序设计/Beginning Linux ProGramming,那么这次主要学习文件读写。

1、系统调用跟库函数调用区别

从实现的角度:系统调用直接对文件和设备进行访问和控制的的一组底层接口, 而标准I/O库为地城I/O调用提供了一个通用的接口,系统调用直接跟底层打交道,系统调用移植性远不如标准I/O库好。

从性能的角度:使用系统调用会影响系统的性能。与库函数调用相比,系统调用的开销要大些,因为在执行系统调用时,Linux必须从运行用户代码切换到执行内核代码,然后再返回用户代码。减少这种开销的一个好办法是,在程序中尽量减少系统调用的次数,并且让每次系统调用完成尽可能多的工作。比如,每次读写大量的数据而不是每次仅读写一个字符。

从代码的角度:系统调用主要使用函数open打开一个文件,然后再返回一个文件描述符,而write、read等系统调用函数再对这个文件描述符进行操作,库函数调用主要使用函数fopen打开一个文件,然后再返回一个指向文件的指针,而fwrite、fread等库函数再对这个指针进行操作。

它们的代码的实现是非常类似的。


关于对文件的总结,我发现这位仁兄已经总结过,非常不错。(内容基本都来自Linux程序设计)

http://www.cnblogs.com/yanlingyin/archive/2012/08/04/2617209.html

那我展现几个常见的例子吧。

2、系统调用例子

2.1、对文件进行写操作

功能:程序向打开的文件写入字符串“hello world”

/*
 * test.c
 *
 *  Created on: 2016年7月17日
 *      Author: Andy_Cong
 */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int main(int argc,char *argv[])
{
	if(argc<2)
		return 0;
	//用读写追加方式打开一个已经存在的文件
	int fd=open(argv[1],O_RDWR|O_APPEND);
	if(fd==-1)
	{
		printf("error is %s\n",strerror(errno));
	}
	else
	{
		//打印文件描述符号
		printf("success fd = %d\n",fd);
		char buf[100];
		memset(buf,0,sizeof(buf));
		strcpy(buf,"hello world\n");
		write(fd,buf,strlen(buf));
		close(fd);
	}
	return 0;
}
运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值