① 如何在linux c 实现list
C语言没有类的概念。C++有现成的List类, #include<list>即可。
如果要自己实现可以参考C++数据结构的书籍,是最基本的练习。
这里实现一个简单的例程,请参考:
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <string.h>
using namespace std;
#include<stdio.h>
#include<string>
#include "math.h"
template<class T> class List{
public:
List() //构造函数
{
pFirst = NULL;
}
void Add(T& t) //在Link表头添加新结点
{
if(pFirst == NULL)
{
pFirst = new Node;
*(pFirst->pT) = t;
}
else
{
Node* pNewNode = new Node;
*(pNewNode->pT) = t;
pNewNode->pNext = pFirst;
pFirst = pNewNode;
}
}
void Remove(T& t) //在Link中删除含有特定值的元素
{
Node* pNode = pFirst;
if(*(pNode->pT) == t)
{
pFirst = pFirst->pNext;
delete pNode;
return;
}
while(pNode != NULL)
{
Node* pNextNode = pNode->pNext;
if(pNextNode!=NULL)
{
if(*(pNextNode->pT) == t)
{
pNode->pNext = pNextNode->pNext;
delete pNextNode;
return;
}
}
else
return;//没有相同的
pNode = pNode->pNext;
}
}
T* Find(T& t) //查找含有特定值的结点
{
Node* pNode = pFirst;
while(pNode != NULL)
{
if(*(pNode->pT) == t)
{
return pNode->pT;
}
pNode = pNode->pNext;
}
return NULL;
}
void PrintList() // 打印输出整个链表
{
if(pFirst == NULL)
{
cout<<"列表为空列表!"<<endl;
return;
}
Node* pNode = pFirst;
while(pNode != NULL)
{
cout<<*(pNode->pT)<<endl;
pNode = pNode->pNext;
}
}
~List()
{
Node* pNode = pFirst;
while(pNode != NULL)
{
Node* pNextNode = pNode->pNext;
delete pNode;
pNode = pNextNode;
}
}
protected:
struct Node{
Node* pNext;
T* pT;
Node()
{
pNext = NULL;
pT = new T;
}
~Node()
{
delete pT;
}
};
Node *pFirst; //链首结点指针
};
class Student
{
public:
char id[20]; //学号
char name[20]; //姓名
int age; //年龄
Student()
{
}
~Student()
{
}
Student(const char* pid, const char* pname, int _age)
{
strcpy(id, pid);
strcpy(name, pname);
age = _age;
}
bool operator==(const Student& stu)
{
return strcmp(id, stu.id) == 0 && strcmp(id, stu.id) == 0 && age==stu.age;
}
Student& operator=(const Student& stu)
{
strcpy(id, stu.id);
strcpy(name, stu.name);
age = stu.age;
}
friend ostream& operator<< (ostream &out,const Student& stu);
};
ostream & operator<< (ostream &out,const Student& stu)
{
out<<"id:"<<stu.id<<"\tname:"<<stu.name<<"\tage:"<<stu.age<<endl;
}
int main()
{
List<Student> stuList;
cout<<"添加学生前:"<<endl;
stuList.PrintList();
Student stu1("1", "张三", 18);
Student stu2("2", "李四", 18);
Student stu3("3", "王五", 18);
Student stu4("4", "至尊宝", 18);
Student stu5("5", "猪八戒", 18);
Student stu6("6", "唐僧", 18);
Student stu7("7", "沙和尚", 18);
Student stu8("8", "观音", 18);
stuList.Add(stu1);
stuList.Add(stu2);
stuList.Add(stu3);
stuList.Add(stu4);
stuList.Add(stu5);
stuList.Add(stu6);
stuList.Add(stu7);
stuList.Add(stu8);
cout<<"添加学生后:"<<endl;
stuList.PrintList();
Student stu11("1", "张三", 18);
Student* pStu = stuList.Find(stu11);
cout<<"查找到的同学是:"<<*pStu;
stuList.Remove(stu11);
cout<<"\n\n删除第一个后:"<<endl;
stuList.PrintList();
return 0;
}
② linux怎样引入list.h
不是标准代码
可以自己写一个
或者试试用内核代码的list.h
看起来接口差不多
struct list_head {
struct list_head *next, *prev;};
#define LIST_HEAD_INIT(name) { &(name), &(name) }
#define LIST_HEAD(name)
struct list_head name = LIST_HEAD_INIT(name)
网页链接
③ 如何学习linux命令之ls的使用
1 输入 ls -a 或 ls -A
-a:显示所有文件及目录(ls内定将档案名或目录名称为“.”的视为隐藏,不会列出);
-A:显示除隐藏文件“.”和“..”以外的所有文件列表;
2 输入 ls -C 或 ls -F
-C:多列显示输出结果。这是默认选项; -l:与“-C”选项功能相反,所有输出信息用单列格式输出,不输出为多列;
-F:在每个输出项后追加文件的类型标识符,具体含义:“*”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“|”表示命令管道FIFO,“=”表示sockets套接字。当文件为普通文件时,不输出任何标识符;
3 输入 ls -b 或 ls -d
-b:将文件中的不可输出的字符以反斜线“”加字符编码的方式输出; -c:与“-lt”选项连用时,按照文件状态时间排序输出目录内容,排序的依据是文件的索引节点中的ctime字段。与“-l”选项连用时,则排序的一句是文件的状态改变时间;
-d:仅显示目录名,而不显示目录下的内容列表。显示符号链接文件本身,而不显示其所指向的目录列表;
4 输入 ls -f 或 ls -i
-f:此参数的效果和同时指定“aU”参数相同,并关闭“lst”参数的效果;
-i:显示文件索引节点号(inode)。一个索引节点代表一个文件; --file-type:与“-F”选项的功能相同,但是不显示“*”;
5 输入 ls -k 或 ls -l 或 ls -m
-k:以KB(千字节)为单位显示文件大小;
-l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等;
-m:用“,”号区隔每个文件和目录的名称;
6 输入 ls -n 或 ls -r
-n:以用户识别码和群组识别码替代其名称;
-r:以文件名反序排列并输出目录内容列表;
7 输入 ls -s 或 ls -t 或 ls -t --full-time:列出完整的日期与时间
-s:显示文件和目录的大小,以区块为单位;
-t:用文件和目录的更改时间排序;
8 输入 ls -L 或 ls -R
-L:如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录;
-R:递归处理,将指定目录下的所有文件及子目录一并处理;
④ linux命令,chkconfig --list,这个为什么要用两个-,用一个-不行吗
不行,因为list这个命令选线是一个多字符串的,所以必须使用--,如果是单字符串命令选项(例如ls -l ),那么就需要一个了。
同时,如果一个命令字后面有多个单字符串选项,可以合并使用,例如ls -a -l ,就可以写成ls -al
⑤ 请教在Red Hat Linux9.0下,gdb命令中list无法使用的问题
在别的搜索网站上查
⑥ Linux kernel中的list怎么使用
为什么一定要别人说的才是权威呢?
你可以再LKM编程中自己验证一下,构造几个包含struct list_head的结构体元素,初始化一个头,然后依次调用list_add_tail入链表,然后在list_for_each_entry打印出来看,你就可以知道它到底是怎么插的了!
多动手,你查遍所有资料还不如3分钟的几行代码
⑦ linux命令 ls的使用
可以用ls
–al命令来观察文件的权限,每个文件的权限都用10位表示,并分为四段,其中第一段占1
位,表示文件类型,第二段占3位,表示文件所有者对该文件的权限。
⑧ linux cmakelist 怎么用
由于调试需要因此研究了一下cmake这个夸平台的编译工具的使用方法.
1.本人的机器为ubuntu 10.04,在连网的情况下直接在终端输入:
[cpp] view plain 在CODE上查看代码片派生到我的代码片
root@zsh-linux:~#apt-get install cmake
安装完毕之后可以在/var/cache/apt/archives看到安装的.deb文件
或者在cmake官网下载cmake for linux
此时有个注意点是建议下载 cmake-2.8.4.tar.gz 而不是
cmake-2.8.4-Linux-i386.tar.gz
下载完成后解压
[cpp] view plain 在CODE上查看代码片派生到我的代码片
root@zsh-linux:/opt#tar -zxvf cmake-2.8.4.tar.gz
然后 cd 到cmake-2.8.4目录下
root@zsh-linux:/opt/cmake-2.8.4#
root@zsh-linux:/opt/cmake-2.8.4# ./bootstrap
root@zsh-linux:/opt/cmake-2.8.4# make
root@zsh-linux:/opt/cmake-2.8.4# make install
安装完毕后查看是否安装成功:
root@zsh-linux:/opt/cmake-2.8.4# cmake --version
cmake version 2.8.4
有以上信息表示安装cmake成功。
2.cmake 的使用
(1)创建一个工程目录文件夹,然后创建一个hello.c
[cpp] view plain 在CODE上查看代码片派生到我的代码片
#include<stdio.h>
int main()
{
printf(“hello,this is my first using cmake project/n”);
return 0;
}
(2)然后创建一个build目录(用于编译生成的相应文件),与hello.c目录同级
(3)编写CMakeLists.txt内容如下:(于hello.c目录同级)
[cpp] view plain 在CODE上查看代码片派生到我的代码片
cmake_minimum_required(VERSION 2.8)
PROJECT(cmake_test)
SET(SRC_LIST main.c)
INCLUDE_DIRECTORIES(/usr/include/glib)
MESSAGE(STATUS "This is BINARY dir "${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir "${HELLO_SOURCE_DIR})
ADD_EXECUTABLE(hello ${SRC_LIST})
(4)进入build目录输入 cmake ..
[cpp] view plain 在CODE上查看代码片派生到我的代码片
root@zsh-linux:/home/cmake_test/build# cmake ..
若编译成功在build目录下会生成相应文件,其中有个makefile文件
有可能会出现问题:
CMAKE_CXX_COMPILER-NOTFOUND" was not found
解决方法:
[cpp] view plain 在CODE上查看代码片派生到我的代码片
root@zsh-linux:/home/cmake_test/build# apt-get install g++
(可选)cmake -D CMAKE_CXX_COMPLIER=”g++”CMAKE -D CMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=”/usr/local”
(5)输入make 命令执行成功后在build目录下会看到可执行的hello
(6)./hello
输出 hello,this is my first usingcmake project。
注:这只适用于简单的工程,若复杂的工程项目请参考www.cmake.org
⑨ linux 中的list.h
linux下要用一般C语言写,用结构体来建立链表。c++和linux配不起来
⑩ linux 使用方法
楼主如果不专门学习一下Linux是不会懂的,英语也要过三级才能基本操作。 LINUX使用方法!!! linux目录架构
/ 根目录
/bin 常用的命令 binary file 的目录
/boot 存放系统启动时必须读取的档案,包括核心 (kernel) 在内
/boot/grub/menu.lst GRUB设置
/boot/vmlinuz 内核
/boot/initrd 核心解压缩所需 RAM Disk
/dev 系统周边设备
/etc 系统相关设定文件
/etc/DIR_COLORS 设定颜色
/etc/HOSTNAME 设定用户的节点名
/etc/NETWORKING 只有YES标明网络存在
/etc/host.conf 文件说明用户的系统如何查询节点名
/etc/hosts 设定用户自已的IP与名字的对应表
/etc/hosts.allow 设置允许使用inetd的机器使用
/etc/hosts.deny 设置不允许使用inetd的机器使用
/etc/hosts.equiv 设置远端机不用密码
/etc/inetd.conf 设定系统网络守护进程inetd的配置
/etc/gateways 设定路由器
/etc/protocols 设定系统支持的协议
/etc/named.boot 设定本机为名字服务器的配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0 设置IP
/etc/resolv.conf 设置DNS
/etc/X11 X Window的配置文件,xorg.conf 或 XF86Config 这两个 X Server 的设定档
/etc/fstab 记录开机要mount的文件系统
/etc/inittab 设定系统启动时init进程将把系统设置成什么样的runlevel
/etc/issue 记录用户登录前显示的信息
/etc/group 设定用户的组名与相关信息
/etc/passwd 帐号信息
/etc/shadow 密码信息
/etc/sudoers 可以sudo命令的配置文件
/etc/securetty 设定哪些终端可以让root登录
/etc/login.defs 所有用户登录时的缺省配置
/etc/exports 设定NFS系统用的
/etc/init.d/ 所有服务的预设启动 script 都是放在这里的,例如要启动或者关闭
/etc/xinetd.d/ 这就是所谓的 super daemon 管理的各项服务的设定档目录
/etc/modprobe.conf 内核模块额外参数设定
/etc/syslog.conf 日志设置文件
/home 使用者家目录
/lib 系统会使用到的函数库
/lib/moles kernel 的相关模块
/var/lib/rpm rpm套件安装处
/lost+found 系统不正常产生错误时,会将一些遗失的片段放置于此目录下
/mnt 外设的挂载点
/media 与/mnt类似
/opt 主机额外安装的软件
/proc 虚拟目录,是内存的映射
/proc/version 内核版本
/proc/sys/kernel 系统内核功能
/root 系统管理员的家目录
/sbin 系统管理员才能执行的指令
/srv 一些服务启动之后,这些服务所需要取用的资料目录
/tmp 一般使用者或者是正在执行的程序暂时放置档案的地方
/usr 最大的目录,存许应用程序和文件
/usr/X11R6: X-Window目录
/usr/src: Linux源代码
/usr/include:系统头文件
/usr/openwin 存放SUN的OpenWin
/usr/man 在线使用手册
/usr/bin 使用者可执行的 binary file 的目录
/usr/local/bin 使用者可执行的 binary file 的目录
/usr/lib 系统会使用到的函数库
/usr/local/lib 系统会使用到的函数库
/usr/sbin 系统管理员才能执行的指令
/usr/local/sbin 系统管理员才能执行的指令
/var 日志文件
/var/log/secure 记录登入系统存取资料的档案,例如 pop3, ssh, telnet, ftp 等都会记录在此档案中
/var/log/wtmp 记录登入者的讯息资料, last
/var/log/messages 几乎系统发生的错误讯息
/var/log/boot.log 记录开机或者是一些服务启动的时候,所显示的启动或关闭讯息
/var/log/maillog 纪录邮件存取或往来( sendmail 与 pop3 )的使用者记录
/var/log/cron 记录 crontab 这个例行性服务的内容
/var/log/httpd, /var/log/news, /var/log/mysqld.log, /var/log/samba, /var/log/procmail.log:
分别是几个不同的网路服务的记录档
一些常用的基本命令:
uname -a 查看内核版本
ls -al 显示所有文件的属性
pwd 显示当前路径
cd - 返回上一次目录 cd ~ 返回主目录
date s 设置时间、日期
cal 显示日历 cal 2006
bc 计算器具
man & info 帮助手册
locale 显示当前字体 locale -a 所有可用字体 /etc/sysconfig/i18n设置文件
LANG=en 使用英文字体
sync 将数据同步写入硬盘
shutdonw -h now & half & poweroff 关机
reboot 重启
startx & init 5 进入图形接口
/work & ?work 向上、下查找文档内容
chgrp 改变档案群组 chgrp testing install.log
chown 改变所属人 chown root:root install.log
chmod 改变属性 chmod 777 install.log read=4 write=2 execute=1
cp 复制 cp filename
rm 删除文件 rm -rf filename 强制删除文件
rmdir 删除文件夹
mv 移动 mv 123.txt 222.txt 重命名
mkdir 创建文件夹
touch 创建文件 更新当前时间
cat 由第一行开始显示 cat |more 分页
nl 在内容前加行号
more & less 一面一面翻动
head -n filename 显示第N行内容
tail -n filename 显示后N行内容
od 显示非纯文档
df -h 显示分区空间
显示目录或文件的大小
fdisk 分区设置 fdisk -l /dev/hda 显示硬盘分区状态
mkfs 建立各种文件系统 mkfs -t ext3 /dev/ram15
fsck 检查和修复LINUX档案
ln 硬链接 ln -s 软件链接
whereis 查找命令
locate 查找
find 查找 find / -name "***.***"
which 查看工具
whoami 显示当前用户
gcc -v 查看GCC版本
chattr +i filename 禁止删除 chattr -i filename 取消禁止
lsattr 显示隐藏档属性
updatedb 更新资料库
mke2fs 格式化 mkfs -t ext3
dd if=/etc/passwd of=/tmp/passwd.bak 备份
mount 列出系统所有的分区
mount -t iso9660 /dev/cdrom /mnt/cdrom 挂载光盘
mount -t vfat /dev/fd0 /mnt/floppy 挂载软盘
mount -t vfat -o iocharset=utf8,umask=000 /dev/hda2 /mnt/hda2 挂载fat32分区
mount -t ntfs -o nls=utf8,umask=000 /dev/hda3 /mnt/hda3 挂载ntfs分区
Linux-NTFS Project: http://linux-ntfs.sourceforge.net/
umount /mnt/hda3 缷载
ifconfig 显示或设置网络设备
service network restart 重启网卡
ifdown eth0 关闭网卡
ifup eth0 开启网卡
clear 清屏
history 历史记录 !55 执行第55个指令
stty 设置终端 stty -a
fdisk /mbr 删除GRUB
at 仅进行一次的工作排程
crontab 循环执行的例行性命令 [e]编辑,[l]显示,[r]删除任务
& 后台运行程序 tar -zxvf 123.tar.gz & --------->后台运行
jobs 观看后台暂停的程序 jobs -l
fg 将后台程序调到前台 fg n ------>n是数字,可以指定进行那个程序
bg 让工作在后台运行
kill 结束进程 kill -9 PID [9]强制结束,[15]正常结束,[l]列出可用的kill信号
ps aux 查看后台程序
top 查看后台程序 top -d 2 每两秒更新一次 top -d 2 -p10604 观看某个PID
top -b -n 2 > /tmp/top.txt ----->将 top 的资讯进行 2 次,然后将结果输出到 /tmp/top.txt
pstree 以树状图显示程序 [A]以 ASCII 来连接, 列出PID, [p]列出帐号
killall 要删除某个服务 killall -9 httpd
free 显示内存状态 free -m -------->以M为单位显示
uptime 显示目前系统开机时间
netstat 显示网络状态 netstat -tulnp------>找出目前系统上已在监听的网路连线及其 PID
dmesg 显示开机信息 demsg | more
nice 设置优先权 nice -n -5 vi & ----->用 root 给一个 nice 植为 -5 ,用于执行 vi
renice 调整已存在优先权
runlevel 显示目前的runlevel
depmod 分析可载入模块的相依性
lsmod 显示已载入系统的模块
modinfo 显示kernel模块的信息
insmod 载入模块
modprobe 自动处理可载入模块
rmmod 删除模块
chkconfig 检查,设置系统的各种服务 chkconfig --list ----->列出各项服务状态
ntsysv 设置系统的各种服务
cpio 备份文件
压缩命令:
*.Z compress 程式压缩的档案;
*.bz2 bzip2 程式压缩的档案;
*.gz gzip 程式压缩的档案;
*.tar tar 程式打包的资料,并没有压缩过;
*.tar.gz tar 程式打包的档案,其中并且经过 gzip 的压缩
compress filename 压缩文件 加[-d]解压 uncompress
gzip filename 压缩 加[-d]解压 zcat 123.gz 查看压缩文件内容
bzip2 -z filename 压缩 加[-d]解压 bzcat filename.bz2 查看压缩文件内容
tar -cvf /home/123.tar /etc 打包,不压缩
tar -xvf 123.tar 解开包
tar -zxvf /home/123.tar.gz 以gzip解压
tar -jxvf /home/123.tar.bz2 以bzip2解压
tar -ztvf /tmp/etc.tar.gz 查看tar内容
cpio -covB > [file|device] 份份
cpio -icv < [file|device] 还原</U>