#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
int main(int argc,char *argv[]){
//读取文件路径
char *filepath = argv[1];
//保存文件路径
char *savepath = argv[2];
int fd,savefd,size;
char buffer[1024];
struct stat fstat;
mode_t mode;
//打开文件
fd = open(filepath,O_RDWR);
if((stat(filepath,&fstat)) < 0){
perror("run fstat error");
}
//判断文件类型
mode = fstat.st_mode;
if(S_ISREG(mode)){
printf("Type:regular file\n");
}else if(S_ISDIR(mode)){
printf("Type:direcory\n");
return 0;
}
if(fd != -1){
//在文件不存在新建时生效,使用8进制设置新建文件的权限
savefd = open(savepath,O_RDWR|O_CREAT,0777);
//读取文件内容
while((size=read(fd,buffer,sizeof(buffer))) > 0){
printf("%s",buffer);
//写文件
if(savefd != -1){
//注意:读取多少,则写入多少,此处为size
if((write(savefd,buffer,size)) == -1){
perror("Write error!");
}
}
}
}
exit(0);
}
实例二:
/*
**功能:文件读写实例
*/
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<sys/file.h>
#include<string.h>
#include "lockset.h"
void lock_set(int fd,int type);
int main(int argc,char *argv[]){
char *input = argv[1];
char *filepath = argv[2];
//注意一定需要先清零,否则读取的时候就会多读出无效的字符
char rdbuff[100] = {0};
printf("input:%s\n",input);
printf("filepath:%s\n",filepath);
int opfd,wrsize,rdsize,len;
opfd = open(filepath,O_RDWR|O_CREAT,0777);
if(opfd == -1){
perror("Open Error!\n");
exit(1);
}
//加上写入锁
lock_set(opfd,F_WRLCK);
if((wrsize = write(opfd,input,strlen(input))) == strlen(input)){
printf("Write Success!\n");
}
//等待输入字符,起到暂停的作用
getchar();
//解锁
lock_set(opfd,F_UNLCK);
getchar();
//加上读取锁
lock_set(opfd,F_RDLCK);
lseek(opfd,0,SEEK_SET);
//当读取的rdsize == 0时表示读取完,-1表示读取失败
if((rdsize = read(opfd,rdbuff,sizeof(rdbuff))) > 0){
printf("Read:%s\n",rdbuff);
}else{
printf("Read Error!\n");
}
//解锁
lock_set(opfd,F_UNLCK);
getchar();
close(opfd);
exit(0);
}
lockset.h头文件
void lock_set(int fd,int type){
struct flock lock;
lock.l_whence = SEEK_SET;
lock.l_start = 0;
lock.l_len = 0;
while(1){
lock.l_type = type;
if((fcntl(fd,F_SETLK,&lock)) ==0){
if(lock.l_type == F_RDLCK){
printf("read lock set by %d\n",getpid());
}else if(lock.l_type == F_WRLCK){
printf("write lock set by %d\n",getpid());
}else if(lock.l_type == F_UNLCK){
printf("release lock set by %d\n",getpid());
}
return;
}
fcntl(fd,F_GETLK,&lock);
if(lock.l_type != F_UNLCK){
if(lock.l_type == F_RDLCK){
printf("Read lock already set by %d\n",lock.l_pid);
}else if(lock.l_type == F_WRLCK){
printf("Write lock already set by %d\n",lock.l_pid);
}
getchar();
}
}
}
分享到:
相关推荐
标题 "纯C语言读写ini配置文件" 描述的是一个使用C语言编写的程序,能够处理常见的ini配置文件。ini文件是一种简单的文本格式,通常用于存储应用程序的设置和配置信息。这种格式易于阅读和编辑,适合小型应用或系统...
c语言文件读写操作代码基本的C语言文件读写操作的代码示例基本的C语言文件读写操作的代码示例基本的C语言文件读写操作的代码示例基本的C语言文件读写操作的代码示例基本的C语言文件读写操作的代码示例基本的C语言...
在提供的PDF文档《用C语言读写SGY格式的地震数据文件-苏》中,应该详细介绍了以上步骤,并可能提供了具体的代码示例。通过阅读和理解这份文档,你可以获得更深入的指导,学习如何实际操作C语言来处理SGY文件。这是一...
C语言读写文件操作是C语言编程中的一个重要部分,主要涉及到文件的打开、读取、写入和关闭等操作。在C语言中,对文件的操作是通过标准库函数实现的,包含在头文件中。下面我将详细阐述C语言在文件操作方面的知识点:...
在C语言中,读写INI文件是一个常见的任务,特别是在配置文件处理方面。INI文件是一种简单的文本格式,用于存储用户配置信息或程序设置。由于题目提到不使用Win32系统的DLL,我们将探讨如何纯C语言实现读写INI文件的...
这篇博客“C语言读写配置文件”将深入探讨如何在C语言中实现这个功能。 配置文件通常是文本文件,如.ini或.cfg文件,它们包含键值对,用于存储应用程序的设置。C语言没有内置的库函数来直接处理这些文件,但我们...
此外,文档还提供了一段示例代码,说明如何使用C语言的函数读取SEGY格式文件。在这段代码中,首先使用`fopen`函数以二进制读取模式打开SEGY文件,然后使用`fread`函数读取文件头的3200字节内容,紧接着使用`fclose`...
在C语言中,读写文件到磁盘是程序与外部存储交互的基本操作,这对于数据的保存和恢复至关重要。本文将详细讲解如何使用C语言进行文件的读写操作,并通过具体的代码示例帮助理解。 首先,要进行文件操作,我们需要...
该资源提供了一个完整的示例代码,展示了如何使用C语言读写DWG文件。 DWG文件格式 DWG是一种二进制文件格式,用于存储CAD设计图像。DWG文件由一个头文件和多个数据块组成。头文件包含了文件的基本信息,如文件版本...
### C语言文件的读写操作 #### 知识点概览 本文将详细介绍C语言中文件的基本读写操作。在C语言中,文件是通过`<stdio.h>`库中的`FILE`结构体来处理的。文章中的代码示例展示了如何打开文件、向文件中写入数据以及...
### C语言文件读写操作详解 #### 一、前言 C语言作为一种广泛使用的编程语言,在文件处理方面提供了丰富的功能。对于初学者来说,掌握如何在C语言中进行文件的读写操作至关重要。本文将详细介绍如何使用C语言来...
### C语言读写文件的基本概念 #### 文件的打开与关闭 在C语言中,文件的读写操作通常涉及以下几个步骤: 1. **打开文件**:使用`fopen`函数,传入文件路径和模式(例如只读"r",写入"w",追加"a"等)。 2. **文件...
在本主题中,我们将深入探讨如何在C语言中实现文件的随机读写,并通过实际示例来理解这一过程。 首先,我们需要了解C语言中打开文件的基本方法。`fopen()`函数用于打开一个文件,它接受两个参数:文件名和模式。...
这里我们将深入探讨标题和描述中提到的C语言文件读写示例,以及如何实现这些功能。 首先,我们要了解C语言中的基本文件操作函数,如`fopen()`, `fclose()`, `fread()`, `fwrite()`, `fgets()`, `fputs()`等。这些...
c语言文件读写操作代码c语言文件读写操作代码,包含实例及解释.rarc语言文件读写操作代码,包含实例及解释.rarc语言文件读写操作代码,包含实例及解释.rarc语言文件读写操作代码,包含实例及解释.rarc语言文件读写操作...
本文将深入探讨C语言中的文件读写,并通过实例讲解如何实现。 首先,我们要知道C语言中文件操作涉及的主要函数,它们位于`<stdio.h>`头文件中。主要有`fopen()`、`fclose()`、`fprintf()`、`fscanf()`、`fread()`、...
在C语言中读写TDMS文件,通常需要使用NI提供的库函数,例如TDM C DLL。这个库提供了API接口,使得开发者能够方便地将数据写入TDMS文件或从TDMS文件中读取数据。 1. **TDMS文件结构**: TDMS文件由一系列的“对象”...
在提供的压缩包中,我们看到了`iniFileRW.C`和`maintest.c`两个源文件以及`IniFile.h`头文件,这表明示例代码可能使用了INI文件作为配置文件。INI文件是一种简单、易于理解的结构,通常由节(section)、键(key)和...
在C语言中,读写文件是程序与外部数据交互的基本操作。这主要涉及到标准库中的`stdio.h`头文件,其中定义了一系列的函数接口来实现文件的读写操作。本教程将详细介绍C语言中如何进行文件的读写,并提供一些实践性的...