导航:首页 > 操作系统 > 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读取行相关的资料

热点内容
拉卡拉收款宝app叫什么名 浏览:336
c4d动态解压 浏览:709
多个pdf合并为一个 浏览:312
程序中的编译执行 浏览:30
plc控制与单片机控制 浏览:884
如何让安卓手机操控电脑 浏览:187
电脑电销加密电话号码破解 浏览:505
世界史纲pdf 浏览:133
湖北社保年审app叫什么名字 浏览:852
迈达克云服务器 浏览:597
mfc深入浅出从mfc设计到mfc编程 浏览:81
萤石云服务器连接设置 浏览:325
中国名着pdf 浏览:592
华为服务器设备序列号怎么看 浏览:319
跑永辉生活配送用什么app 浏览:149
ug识别符号命令在哪里 浏览:719
pdf文件改文字 浏览:734
查询qq号剑灵服务器地址 浏览:553
国家反诈中心app为什么要刷脸 浏览:305
iphone怎么修改dns服务器地址 浏览:87