linux 文件 openwrt,Linux常用的文件操作介绍

学习linux系统相信大家一定知道一句话。。。一切皆文件。

我体会最深的就是在OPENWRT里面,很多路由器的参数都是通过文件的形式存储在文件系统中

其实Linux系统也是。因此。。。文件操作对学习Linux嵌入式编程来说还是很重要的

说句题外话:Linux内核的五个组成部分-》任务调度,进程间通信,文件系统,网络模块,内存管理

网络部分其实之前已经介绍了一些网络编程了,为什么先说网络编程呢

因为面试的特别喜欢问,实际用的也特比多

文件操作其实就是文件系统里面的一部分内容。

今天介绍的这些我们称之为系统调用。还有一种叫文件IO

系统调用和文件IO其实差不多,区别就是。。。

系统调用时系统的接口,可移植性没有文件IO好,频繁调用耗费系统资源

文件IO源于C库,只要有C库就可以用,可移植性强。

以下就是一些常用的系统调用文件操作的函数

1 int file_des =open( "my_file.txt", O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR | S_IXUSR | S_IXOTH );&nBSP;   以读写方式打开一个新建文件 my_file.txt,指定其访问权限为 文件属主具有读,写,执行权限,组用户没有任何权限,其他用户只有执行权限。

open调用用于创建或打开文件,返回一个文件描述符。

#include

#include

#include

int open( const char *path, int oflags );

int open( const char *path, int oflags, mode_t mode );

第一个oen用于打开已有的文件,第二个open用于创建新文件。

(1)oflags参数说明了文件的打开方式,值为以下一个或多个常量的“或”运算(这些常量定义在):

O_RDONLY 只读打开

O_WRONLY 只写打开

O_RDWR   读,写打开

以上常量为必选,且只能选一个,下列常量为可选:

O_APPEND 在文件尾端追加

O_TRUNC  将文件长度截短为0

O_CREATE 若文件不存在,按照参数mode指定的访问权限创建

O_EXCL   测试要创建的文件是否存在,和O_CREATE一起使用,使得文件的测试和创建是一个院子操作

(2)mode参数指定了新建文件的访问权限,值为以下一个或多个标识的“或”运算(这些标识定义在):

S_IRUSR  文件属主具有读权限

S_IWUSR  文件属主具有写权限

S_IXUSR  文件属主具有执行权限

S_IRGRP  文件所属组具有读权限

S_IWGRP  文件所属组具有写权限

S_IXGRP  文件所属组具有执行权限

S_IROTH  其他用户具有读权限

S_IWOTH  其他用户具有写权限

S_IXOTH  其他用户具有执行权限

注:mode参数实际上是设置文件访问权限的请求,该请求是否被允许取决于此时umask的设置。

(3)如果两个程序同时打开同一个文件,会得到两个不同的文件描述符。如果都进行写操作,他们的数据将会相互覆盖,而不是交织在一起。两个文件对读写的起始位置(偏移值)也有各自的理解。文件锁可以防止此情况的发生,以后将会提到这个概念。2write( file_des,write_buf, strlen( write_buf )) != strlen( write_buf )将缓冲区write_buf中的所有字节写入与文件描述符file_des关联的文件中,并且判断是否成功写入。

#include

size_t write( int file_des, const void *buf, size_t bytes );

(1)write的返回值可能会小于bytes,但这并不一定是个错误,需要检查全局变量errno来确定。

3  if (lseek( file_des, 4, SEEK_END ) == -1 )

{

write( STDERR_FILENO, "SEEK ERROR!\n", 11 );

exit( 0 );

}

将文件的读写偏移量推进到超过文件结尾4个字节处,如果失败,像标准输出输出错误信息。

#include

#include

off_t lseek( int file_des, off_t off_set, int whence );

lseek用于设置文件的读写偏移量,返回新的读写偏移量。

(1)off_t是一个与具体实现有关的类型,定义在中;

(2)whence的取值如下:

SEEK_SET  将文件的读写偏移量设置为距离文件开始处off_set个字节

SEEK_CUR  将文件的读写偏移量设置为当前值加上off_set,off_set可正可负

SEEK_END  将文件的读写偏移量设置为文件长度加上off_set,off_set可正可负

(3)当在超过文件尾端之后写入时,就会在文件中形成一个空洞。文件空洞并不占用磁盘空间,处理方式与文件系统的实现有关。可以用$od -c file 查看空洞文件的内容。

(4)STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO分别对应程序的标准输入,标注输出,标准出错。这些常量定义在中。

4  #include

intclose( int file_des );

终止文件描述符file_des与对应文件的关联。

(1)文件描述符被释放并重新利用;

(2)文件关闭后,进程还会释放加在文件上的所有记录锁;

(3)进程终止后,内核会自动关闭所有打开的文件。

openwrt命令行模式命令及其工具 需要学会用ssh登录路由器用linux命令查看。 ps 命令查看当前系统运行的进程信息 free 命令查看内存使用和swap挂载情况 ls 查看目录和文件 cd 进入退出目录 vi 查看编辑配置文件 安装命令: #opkg update #opkg install nano uci set network.lan.ipaddr=[lan ip] 使用pppoe设置 Shell代码 uci set network.wan.proto=pppoe //设置wan口类型为pppoe uci set network.wan.username=[上网帐户] uci set network.wan.password=[上网密码] //这两行设置pppoe用户名和密码 如果要挂在上级路由下面,就需要进行下面的设置 Shell代码 uci set network.wan.proto=none //关掉wan uci set network.lan.gateway=[上级路由ip] //网关指向上级路由 uci set network.lan.dns=[上级路由ip] //dns指向上级路由 uci set dhcp.lan.ignore=1 //关掉lan的dhcp 最后对无线网络进行配置 Shell代码 uci set wireless.@wifi-device[0].disabled=0 //打开无线 uci set wireless.@wifi-device[0].txpower=17 //设置功率为17dbm 太高会烧无线模块 uci set wireless.@wifi-device[0].channel=6 //设置无线信道为6 uci set wireless.@wifi-iface[0].mode=ap //设置无线模式为ap uci set wireless.@wifi-iface[0].ssid=[自己设置SSID] //设置无线SSID uci set wireless.@wifi-iface[0].network=lan //无线链接到lan上 uci set wireless.@wifi-iface[0].encryption=psk2 //设置加密为WPA2-PSK uci set wireless.@wifi-iface[0].key=[密码] //设置无线密码 提交应用配置 Shell代码 uci commit //应用 /etc/init.d/network restart //重启网络服务 安装luci管理界面 Shell代码 opkg update // 更新软件列表 opkg list-installed // 查看已安装软件 opkg install luci // 安装LUCI opkg install luci-i18n-chinese // 支持中文 luci-app-firewall - 0.10.0-1 luci-i18n-english - 0.10.0-1 luci-lib-core - 0.10.0-1 luci-lib-ipkg - 0.10.0-1 luci-lib-lmo - 0.10.0-1 luci-lib-nixio - 0.10.0-1 luci-lib-sys - 0.10.0-1 luci-lib-web - 0.10.0-1 luci-mod-admin-core - 0.10.0-1 luci-mod-admin-full - 0.10.0-1 luci-proto-core - 0.10.0-1 luci-proto-ppp - 0.10.0-1 luci-sgi-cgi - 0.10.0-1 luci-theme-base - 0.10.0-1 luci-theme-openwrt - 0.10.0-1 即可完成LUCI的安装。 输入以下命令开启支持web服务的uhttpd,并设置其为自启动: Shell代码 /etc/init.d/uhttpd enable # 开机自启动 /etc/init.d/uhttpd start # 启动uhttpd - Wifidog 你可以尝试执行以下命令安装Wifidog: opkg update # Optional opkg install wifidog --sftp安装 opkg update opkg install vsftpd openssh-sftp-server /etc/init.d/vsftpd enable /etc/init.d/vsftpd start 小米端口转发命令: 通过修改 /etc/config/firewall 这个文件来实现开放自己需要的端口到外网。 config rule 'httpdwan' option src 'wan' option dest_port '8088' option proto 'tcp' option target 'ACCEPT' option name ''\''httpd wan accept tcp port 8088'\''' 保存后,执行 /etc/init.d/firewall restart 重启防火墙。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值