导航:首页 > 文件类型 > linuxc读文件操作

linuxc读文件操作

发布时间:2023-07-05 21:16:52

1. linux C 缓冲文件和非缓冲文件读写方式用法

1.用write, read, open等系统调用编写分别实现如下功能的程序(要求进行必要的出错检查版):
(1)创建一个权文件testfile.txt,文件内容从键盘输入;
(2)将testfile.txt的内容显示在屏幕上,并将testfile.txt的内容复制到一个新的文件file2.txt中。
实验代码
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main()

2. Linux C/C++文本文件操作

你用gcc编译器么。

3. Linux下C编程读取文件中每行的数据

实话是,使用C如此操作是比较复杂的,步骤如下:
1、自我实现
首先需要将所有的文件读专取到属内存中,之后进行适当的处理,可以定义一个函数,函数的形参是四个三维数组,或者一个4*3的二维数组,之后的操作相当于矩阵的转矩3 * 4。
2、借助三方包
上面说了这其实就是一个矩阵的转矩,那么可以使用第三方的实现矩阵相关运算的库文件。

4. linux c怎么实现从文件的最后一行一行向前读文件

下面的例子使用mmap读最后20行(假设最后20行不会超过字节)
/*-
* Copyright (C), 1988-2014, mymtom
*
* vi:set ts=4 sw=4:
*/
#ifndef lint
static const char rcsid[] = "$Id$";
#endif /* not lint */
/**
* @file last20.c
* @brief
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <unistd.h>
#include <limits.h>
#include <stdio.h>
#include <string.h>
char *memchrr(const void *v1, const char *v2, int c)
{
char *s1, *s2;
char *p;
s1 = (char *)v1;
s2 = (char *)v2;
for (p = s2; p >= s1; --p) {
if (*p == c)
return p;
}
return NULL;
}
#define READSIZE 1024
int main(int argc, char *argv[])
{
int ret;
FILE *fp;
char *addr;
size_t len;
int prot;
int flags;
int fd;
off_t off;
off_t rem;
long pagesize;
struct stat buf;
pagesize = sysconf(_SC_PAGESIZE);
fp = fopen("last20.c", "rb");
fd = fileno(fp);
ret = fstat(fd, &buf);
if (buf.st_size <= READSIZE || buf.st_size <= pagesize) {
off = 0;
len = buf.st_size;
} else {
off = buf.st_size - READSIZE;
rem = off % pagesize;
off = off - rem;
len = READSIZE + rem;
}
/*
printf("size=%d READSIZE=%d off=%d len=%d\n",
(int)buf.st_size, (int)READSIZE, (int)off, (int)len);
*/
prot = PROT_READ;
flags = MAP_PRIVATE;
addr = mmap(NULL, len, prot, flags, fd, off);
fclose(fp);
{
int i, n;
char *head, *tail;
size_t size;
char line[1024];
tail = addr + len - 1;
n = 20;
for (i = 0; i < n; ++i) {
head = memchrr(addr, tail - 1, '\n');
if (head == NULL) {
size = tail - addr;
memcpy(line, addr, size);
line[size] = '\0';
} else {
size = tail - head - 1;
memcpy(line, head + 1, size);
line[size] = '\0';
tail = head;
}
printf("%s\n", line);
if (head == NULL) {
break;
}
}
}
munmap(addr, len);
return 0;
}
运行结果为:
./last20 | tac | cat -n
line[size] = '\0';
} else {
size = tail - head - 1;
memcpy(line, head + 1, size);
line[size] = '\0';
tail = head;
}
printf("%s\n", line);
if (head == NULL) {
break;
}
}
}
munmap(addr, len);
return 0;
}

5. Linux系统中如何操作文件

Linux里主要有两自种文件操作方式:系统调用、ANSI C文件操作.

(1) Linux系统调用

一个非负整数,索引值,通常使用宏来表示。代表指向内核中每个进程打开文件的记录表。

即底层操作。文件底层I/O操作的系统调用主要有open、close、read、write、lseek、ulink函数来直接操作文件。

其实ZLG那有很多的,你可以去看一下的。

6. C语言文件读取问题 linux

刚按你的需求写了个小程序,看看这个能满足你的要求不,
遍历一个目录,查找不是隐藏的文件,然后输出出来,
至于你要干什么嘛,名都给你遍历出来,估计你自己就会做了吧.
这个遍历不是深度的,只遍历你输入的目录的当前目录.
编译的话,带gcc的环境,把这个随便起个名
gcc
xxx.c
就行了..
运行时要加个参数
比如,生成的可执行程序是a.out
./a.out
/root/--->加的参数就是你要遍历的路径.
#include
<sys/types.h>
#include
<sys/stat.h>
#include
<time.h>
#include
<stdio.h>
#include
<stdlib.h>
#include
<dirent.h>
int
main(int
argc,char
**argv)
{
struct
stat
s;
struct
stat
ss;
DIR
*dir
=
NULL;
struct
dirent
*dt
=
NULL;
if
(argc
!=
2)
{
printf("./xxx
dirpath
to
run
this
proc\n");
return
1;
}
if(lstat(argv[1],&s)
<
0)
{
printf("lstat
error\n");
return
1;
}
if(S_ISDIR(s.st_mode))
{//确定path是dir
dir
=
opendir(argv[1]);
if
(dir
==
NULL)
{
printf("open
dir
error\n");
return
1;
}
if
(chdir(argv[1])
<
0)
{//进入目录
printf("chdir
error\n");
return
1;
}
while((dt
=
readdir(dir))
!=
NULL)
{
if(dt->d_name[0]
==
'.')
{//隐藏文件或./..目录不进行查找
continue;
}
if(lstat(dt->d_name,
&ss)
<
0)
{
continue;
}
if
(S_ISREG(ss.st_mode))
{//打印普通文件
printf("file:%s\n",dt->d_name);
}
}
}
return
0;
}

7. linux下c语言 读取文件内容

没测试过,不过问题应该是fgetc这里
fgetc获取到第一个字符,比如第一行的'#'号,然后fgets获取到后面的字符,打印版当然就没有权第一个字符了,解决方式要么只用fgets,要么把fgetc获取的字符也打印出来

8. 关于linux C的文件读写

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX 1024

void lower1(char *p)
{
int i,len;
len = strlen(p);
for(i=0;i<len;i++)
if(p[i] >= 'A' && p[i] <= 'Z')
p[i] += 32;
}

int main(void)
{
FILE *fp,*fpw;
char *p;
char buf[MAX],buf1[MAX]="GAME OVER";
int n,m;
fp = fopen("txt","rw");
if(fp == NULL)
{
perror("Fail to open");
exit(1);
}

while((n = fread(buf,sizeof(char),MAX-1,fp)) > 0)
{
buf[n]='\0';
lower1(buf);
printf("%s",buf);
printf("%d",n);
}
rewind(fp);
while((n = fread(buf,sizeof(char),MAX-1,fp)) > 0) //你这里什么意思?你这里有问题
{
fputs(buf,fp);
}

if(n < 0){
perror("Fail to read");
exit(1);
}

fclose(fp);
return 0;
}

顺便,看样子你也知道,读写无法同时进行的,所以,你读万,一定要rewind一下

9. linux下如何用C程序读写本地文件

是一样来的。如果是同目自录则直接写文件名,如果是不同的目录,可以写明路径。

如:
读同目录文件local.txt
fopen("local.txt","r");

读不同目录文件 /home/yourname/otherdir/other.txt
fopen("/home/yourname/otherdir/other.txt","r");

你可以使用pwd命令来获得文件路径

10. c语言如何读写 linux文本文件

Linux下C语言的文件(fputc,fgetc,fwrite,fread对文件读写操作)

//

fputc 向文件写入字符

#include <stdio.h>

#include <stdlib.h>

main()

{

FILE *fp;

char ch;

if((fp=fopen("test.txt","w"))==NULL)

{

printf("不能打开文件 ");

exit(0);

}

while ((ch=getchar())!=' ')

fputc( ch, fp );

fclose(fp);

}

-------------

小提示:

fp=fopen("test.txt","w") ,把"w"改为 "a" 可以创建文件并且追加写入内容

exit(0); 需要包含 stdlib.h 头文件,才能使用

//

fgetc 读取字符

#include <stdio.h>

#include <stdlib.h>

main( int argc, char *argv[] )

{

char ch;

FILE *fp;

int i;

if((fp=fopen(argv[1],"r"))==NULL)

{

printf("不能打开文件 ");

exit(0);

}

while ((ch=fgetc(fp))!=EOF)

putchar(ch);

fclose(fp);

}

文件结尾,通过判断 EOF

//

fwrite 的使用

使数组或结构体等类型可以进行一次性读写

#include <stdio.h>

#include <stdlib.h>

main()

{

FILE *fp1;

int i;

struct student{

char name[10];

int age;

float score[2];

char addr[15];

}stu;

if((fp1=fopen("test.txt","wb"))==NULL)

{

printf("不能打开文件");

exit(0);

}

printf("请输入信息,姓名 年龄 分数1 分数2 地址: ");

for( i=0;i<2;i++)

{

scanf("%s %d %f %f %s",stu.name,&stu.age,&stu.score[0],&stu.score[1], stu.addr);

fwrite(&stu,sizeof(stu),1,fp1);

}

fclose(fp1);

}

//

fread 的使用

#include <stdio.h>

#include <stdlib.h>

main()

{

FILE *fp1;

int i;

struct student{

char name[10];

int age;

float score[2];

char addr[15];

}stu;

if((fp1=fopen("test.txt","rb"))==NULL)

{

printf("不能打开文件");

exit(0);

}

printf("读取文件的内容如下: ");

for (i=0;i<2;i++)

{

fread(&stu,sizeof(stu),1,fp1);

printf("%s %d %7.2f %7.2f %s ",stu.name,stu.age,stu.score[0],stu.score[1],stu.addr);

}

fclose(fp1);

}

//

fprintf , fscanf, putw , getw , rewind , fseek 函数

这些函数的话我就不演示了 ,

这些函数基本都一对来使用,例如 fputc 和 fgetc 一起来用.

阅读全文

与linuxc读文件操作相关的资料

热点内容
angularjs表头固定 浏览:43
怎么样对excel设密码 浏览:108
光纤移动拨号连接错误代码651 浏览:165
什么网站买票订酒店便宜 浏览:317
天涯摄影小说网站怎么找 浏览:915
搜索不到视频文件 浏览:560
求生之路2哪个版本可以联机 浏览:472
word2010关闭页眉横线 浏览:626
db在数据结构里什么意思 浏览:29
室内效果图建模教程 浏览:364
A类地址网络号为什么不能全0 浏览:466
上古卷轴ol目前版本 浏览:420
黑蝴蝶的app是什么软件 浏览:456
程序批量查询网站信息 浏览:57
丽枫酒店订房间app是什么 浏览:241
拾零工具箱官网下载 浏览:49
房地产估价师视频哪个网站有 浏览:836
cad图形工具在哪 浏览:487
mastercamx哪个版本好 浏览:539
微信数据如何全部导出 浏览:781

友情链接