导航:首页 > 操作系统 > linuxc读取行

linuxc读取行

发布时间:2023-10-05 09:17:31

‘壹’ linux 下如何编写c程序,获得命令行结果


void executeShell(const char *shell){

FILE *stream;

char buf[1024];

memset( buf, '', sizeof(buf) );//初始化buf,以免后面写如乱码到文件中

stream = popen( shell , "r" ); //将命令的输出 通过管道读取(“r”参数)到FILE* stream

fread( buf, sizeof(char), sizeof(buf), stream); //将刚刚FILE* stream的数据流读取到buf中

pclose( stream );

printf("%s ",buf);//打印输出结果

}

‘贰’ 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;
}

‘叁’ linux c怎么实现从文件的最后一行一行向前读文件

下面的例子使用mmap读最后20行(假设最后20行不会超过1024字节)
/*-
* 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;
}

‘肆’ 如何用C语言在linux上统计文件行数

统计行数可以通过统计换行符 来实现。不过需要注意的是,有些文件最后一行并不存在换行符,所以代码中需要对此作处理。

可以在达到文件结尾后,判断前一个字符,如果不是换行符,那么应补加最后一行统计。

代码如下:

假定输入文件为in.txt,该文件存在且可读。

#include<stdio.h>
intmain()
{
FILE*fp=NULL;//文件指针。
intc,lc=0;//c为文件当前字符,lc为上一个字符,供结尾判断用。
intline=0;//行数统计
fp=fopen("in.txt","r");//以只读方式打开文件。
while((c=fgetc(fp))!=EOF)//逐个读入字符直到文件结尾
{
if(c==' ')line++;//统计行数。
lc=c;//保存上一字符。
}
fclose(fp);//关闭文件
if(lc!=' ')line++;//处理末行

printf("文件共有%d行。 ",line);

return0;
}

样例输入输出:

如in.txt有如下内容:

testline1
testline2

则会输出:

文件共有2行。

‘伍’ linux下c语言 读取文件内容

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

阅读全文

与linuxc读取行相关的资料

热点内容
打印服务器是什么打印队列 浏览:355
网上怎么用app办理营业执照 浏览:855
sql如何查看服务器地址 浏览:775
编译速度和系统有关吗 浏览:56
复盛制冷压缩机 浏览:980
云服务器共享手机流量 浏览:833
星界边境像素压缩 浏览:459
算法分析与设计二手 浏览:983
学编程如何配电脑 浏览:971
怎么看特征找卡密的加密方式 浏览:526
方舟非官方服务器怎么赚钱 浏览:516
明日之后服务器无效是怎么回事 浏览:270
蛋壳公寓app如何查水电表 浏览:718
ad20库中的51单片机怎么找 浏览:624
阿里云服务器有点卡吗 浏览:215
苹果7如何让app后台运行 浏览:170
耐克app预售产品哪里看 浏览:209
补全算法一年级 浏览:131
evd数据调校软件加密 浏览:442
app听课与微信如何设置分屏 浏览:911