影之刃mysql错误,mysql创建用户并授权人物,编写名字的时候就会出现

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
大家好,这里是周行天下博客,欢迎来到周行天下博客,人生最大的快乐就是不劳而获。。。可耻的是???
LOFTER精选
阅读(1160)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_083',
blogTitle:'linux下mysql中表名大小写问题',
blogAbstract:'为了消除linux环境下大小写敏感问题,设置如下:vi /etc/f
[mysqld]中添加:
lower_case_table_names = 1;
如果设置为1,表名用小写保存到硬盘上,并且表名比较时不对大小写敏感。如果设置为2,按照指定的保存表名,但按照小写来比较。该选项还适合数据库名和表的别名。& & & & & & & & & & & & 如果你正使用InnoDB表,你应在所有平台上将该变量设置为1,强制将名字转换为小写。& & & & & & & & & & & & ',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:9,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'大家好,这里是周行天下博客,欢迎来到周行天下博客,人生最大的快乐就是不劳而获。。。可耻的是???',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}关于mysql数据库大小写敏感的问题
在MySQL中,数据库对应数据目录中的目录。数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎)。因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。这说明在大多数Unix中数据库名和表名对大小写敏感,而在Windows中对大小写不敏感。 一个显著的例外情况是Mac OS X,它基于Unix但使用默认文件系统类型(HFS+),对大小写不敏感。
在windows下表名不区分大小写,所以在导入数据后,有可能所有表名均为小写,而再从win导入linux后,在调用时就容易出现大小写的问题。例如:
第一点:程序调用表名为:fov_Web;
第二点:导入win后变为fov_web;
第三点:再导入linux后也是fov_web,此时linux会区分表名的大小写,则导致该表无法读取。
在linux下mysql表名大小写问题解决方法:
修改my.cnf,一般位于:/f,在该文件中找到[mysqld]节下加入如下语句(注意如果已经存在该语句,请将值改为1即可):
lower_case_table_names=1
1、Linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写;
2、用root帐号登录后,在/f 中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写;
lower_case_table_names 参数详解:
lower_case_table_names = 0或1
其中 0:区分大小写,1:不区分大小写
MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:
1、数据库名与表名是严格区分大小写的;
2、表的别名是严格区分大小写的;
3、列名与列的别名在所有的情况下均是忽略大小写的;
4、变量名也是严格区分大小写的;
MySQL在Windows下都不区分大小写的,如果需要在查询时区分字段值的大小写,则需要将查询字段值需要设置BINARY属性,设置的方法有如下几种方法:
(1)创建时设置:
CREATE TABLE T(A VARCHAR(10) BINARY);
(2)使用alter修改:
ALTER TABLE `tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY;
(3)mysql table editor中直接勾选BINARY项。您可能感兴趣的文章转载请注明出处:本文永久地址:文章来源:-わ千与千寻上一篇:下一篇:热门文章随机文章MySql字符集有关问题_spring security deault login & jquery layout 的有关问题-/_UNIX系统编程(二)__脚本百事通
稍等,加载中……
^_^请注意,有可能下面的2篇文章才是您想要的内容:
MySql字符集有关问题
spring security deault login & jquery layout 的有关问题-/
UNIX系统编程(二)
MySql字符集有关问题
MySql字符集问题
MySQL的字符集支持(Character Set Support)有两个方面:
字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次:
服务器(server),数据库(database),数据表(table)和连接(connection)。1.MySQL默认字符集
MySQL对于字符集的指定可以细化到一个数据库,一张表,一列,应该用什么字符集。但是,传统的 程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置,那么,默认的配置从何而来呢?
(1)编译MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;
(2)安装MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;
(3)启动mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的配置,此时 character_set_server 被设定为这个默认的字符集;
(4)当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为character_set_server;
(5)当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;
(6)在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;
(7)当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;简单的总结一下,如果什么地方都不修改,那么所有的数据库的所有表的所有栏位的都用 latin1 存储,不过我们如果安装 MySQL,一般都会选择多语言支持,也就是说,安装程序会自动在配置文件中把 default_character_set 设置为 UTF-8,这保证了缺省情况下,所有的数据库的所有表的所有栏位的都用 UTF-8 存储。2.查看默认字符集(默认情况下,mysql的字符集是latin1(ISO_8859_1)通常,查看系统的字符集和排序方式的设定可以通过下面的两条命令:
mysql& SHOW VARIABLES LIKE 'character%';+--------------------------+---------------------------------+| Variable_name
|+--------------------------+---------------------------------+| character_set_client
|| character_set_connection | latin1
|| character_set_database
|| character_set_filesystem | binary
|| character_set_results
|| character_set_server
|| character_set_system
|| character_sets_dir
| D:"mysql-5.0.37"share"charsets" |+--------------------------+---------------------------------+
mysql& SHOW VARIABLES LIKE 'collation_%';+----------------------+-----------------+| Variable_name
|+----------------------+-----------------+| collation_connection | utf8_general_ci || collation_database
| utf8_general_ci || collation_server
| utf8_general_ci |+----------------------+-----------------+3.修改默认字符集
(1) 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值,如
default-character-set = utf8
character_set_server =
修改完后,重启mysql的服务,service mysql restart
使用 mysql& SHOW VARIABLES LIKE 'character%';查看,发现数据库编码均已改成utf8+--------------------------+---------------------------------+| Variable_name
|+--------------------------+---------------------------------+| character_set_client
|| character_set_connection | utf8
|| character_set_database
|| character_set_filesystem | binary
|| character_set_results
|| character_set_server
|| character_set_system
|| character_sets_dir
| D:"mysql-5.0.37"share"charsets" |+--------------------------+---------------------------------+
(2) 还有一种修改字符集的方法,就是使用mysql的命令
mysql& SET character_set_client = utf8 ;
mysql& SET character_set_connection = utf8 ;
mysql& SET character_set_database = utf8 ;
mysql& SET character_set_results = utf8 ;
mysql& SET character_set_server = utf8 ;
mysql& SET collation_connection = utf8 ;
mysql& SET collation_database = utf8 ;
mysql& SET collation_server = utf8 ;一般就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:SET NAMES 'utf8';它相当于下面的三句指令:SET character_set_client = utf8;SET character_set_results = utf8;SET character_set_connection = utf8;总结: 因此,使用什么数据库版本,不管是3.x,还是4.0.x还是4.1.x,其实对我们来说不重要,重要的有二:
1) 正确的设定数据库编码.MySQL4.0以下版本的字符集总是默认ISO8859-1,MySQL4.1在安装的时候会让你选择。如果你准备使用UTF- 8,那么在创建数据库的时候就要指定好UTF-8(创建好以后也可以改,4.1以上版本还可以单独指定表的字符集)
2) 正确的设定数据库connection编码.设置好数据库的编码后,在连接数据库时候,应该指定connection的编码,比如使用jdbc连接时,指定连接为utf8方式.
spring security deault login & jquery layout 的有关问题-/
spring security deault login & jquery layout 的问题--/
使用spring security时需要配置默认的登陆页面,就是在session失效或者其它原因需要登陆时的页面。Xml代码
1. &http auto-config='true'&
&intercept-url pattern="/login.jsp*" filters="none"/&
&intercept-url pattern="/**" access="ROLE_USER" /&
&form-login login-page='/login.jsp'/&
&http auto-config='true'&
&intercept-url pattern="/login.jsp*" filters="none"/&
&intercept-url pattern="/**" access="ROLE_USER" /&
&form-login login-page='/login.jsp'/&
当使用类似于jquery layout页面框架时就会用登陆页面只显示在页面中某一个部分。例如:整个页面用/startIndex.do加载mylayout.jsp,
mylayout.jsp中分为上,左(menu),下,右(content),当session失效时,点击左的菜单,右面就会显示login.jsp. 这样是不合理的,
我一开始的解决方式,是自己写了filter ,但无论是自己写新的filter或才重写spring security的filter,始终首先显示是spring默认的页面。
其实只需要在login.jsp里加上js跳转就可以,其中两个地方需要注意:
1. 在login.jsp里直接写js它在session失效时不执行,可以使用jquery中执行:如Js代码
1. $(document).ready(function () {
var url = window.parent.document.URL;
if (url.indexOf("core") != -1) {//只有当在maylayout页面才reload
window.location.reload("${pageContext.request.contextPath}/login.jsp");
$(document).ready(function () {
var url = window.parent.document.URL;
if (url.indexOf("core") != -1) {//只有当在maylayout页面才reload
window.location.reload("${pageContext.request.contextPath}/login.jsp");
2. 因为你点击右面菜单时session失败,跳转到登陆页面,当你再次登陆后页面还会回到你点击的地址,这样会有问题,有个技巧就是可以把reload写成整个页面用/startIndex.do,如:
1. $(document).ready(function () {
var url = window.parent.document.URL;
if (url.indexOf("core") != -1) {//只有当在maylayout页面才reload
window.location.reload("${pageContext.request.contextPath}/startIndex.do");
以上是一个网友的,摘过来的,可是我这里没有统一的加载页面,只有设置springsecurity配置文件:
&form-login login-page="/login.jsp" authentication-failure-url="/login.jsp?error=true" default-target-url="/commons/jsp/index.jsp" always-use-default-target='true'/&
在一般系统登录后,都会设置一个当前session失效的时间,以确保在用户长时间不与服务器交互,自动退出登录,销毁session。具体设置很简单,方法有三种:(1)在主页面或者公共页面中加入:session.setMaxInactiveInterval(900);参数900单位是秒,即在没有活动15分钟后,session将失效。这里要注意这个session设置的时间是根据服务器来计算的,而不是客户端。所以如果是在调试程序,应该是修改服务器端时间来测试,而不是客户端。(2)也是比较通用的设置session失效时间的方法,就是在项目的web.xml中设置Xml代码
1. &session-config&
&session-timeout&15&/session-timeout&
3. &/session-config&
&session-config&
&session-timeout&15&/session-timeout&
&/session-config&
这里的15也就是15分钟失效.(3)直接在应用服务器中设置,如果是tomcat,可以在tomcat目录下conf/web.xml中找到&session-config&元素,tomcat默认设置是30分钟,只要修改这个值就可以了。需要注意的是如果上述三个地方如果都设置了,有个优先级的问题,从高到低:(1)--?(2)---?(3) 在一般系统中,也可能需要在session失效后做一些操作,(1)控制用户数,当session失效后,系统的用户数减少一个等,控制用户数在一定范围内,确保系统的性能。(2)控制一个用户多次登录,当session有效时,如果相同用户登录,就提示已经登录了,当session失效后,就可以不用提示,直接登录了。 那么如何在session失效后,进行一系列的操作呢?这里就需要用到监听器了,即当session因为各种原因失效后,监听器就可以监听到,然后执行监听器中定义好的程序就可以了。监听器类为:HttpSessionListener类,有sessionCreated和sessionDestroyed两个方法 自己可以继承这个类,然后分别实现。sessionCreated指在session创建时执行的方法sessionDestroyed指在session失效时执行的方法给一个简单的例子:Java代码
1. public class SessionListener implements HttpSessionListener{
public void sessionCreated(HttpSessionEvent event) {
HttpSession ses = event.getSession();
String id=ses.getId()+ses.getCreationTime();
SummerConstant.UserMap.put(id, Boolean.TRUE);
//添加用户
public void sessionDestroyed(HttpSessionEvent event) {
HttpSession ses = event.getSession();
String id=ses.getId()+ses.getCreationTime();
synchronized (this) {
SummerConstant.USERNUM--;
//用户数减一
SummerConstant.UserMap.remove(id); //从用户组中移除掉,用户组为一个map
public class SessionListener implements HttpSessionListener{
public void sessionCreated(HttpSessionEvent event) {
HttpSession ses = event.getSession();
String id=ses.getId()+ses.getCreationTime();
SummerConstant.UserMap.put(id, Boolean.TRUE);
//添加用户
public void sessionDestroyed(HttpSessionEvent event) {
HttpSession ses = event.getSession();
String id=ses.getId()+ses.getCreationTime();
synchronized (this) {
SummerConstant.USERNUM--;
//用户数减一
SummerConstant.UserMap.remove(id); //从用户组中移除掉,用户组为一个map
然后只需要把这个监听器在web.xml中声明就可以了例如:Xml代码
1. &listener&
&listener-class&
com.demo.SessionListener
&/listener-class&
5. &/listener&
UNIX系统编程(二)
UNIX系统编程(2)
注:本文来自“网易”博主
第三章:文件系统
这回我们来说一下UNIX的文件系统。由于一般情况下UNIX机的硬盘会很大,所以一般你可以给它分成几个区,而每个分区又都可以有独立的文件系统。如果你是UNIX系统,你有可能看见
/dev/sd/c0t0d0s0
/dev/sd/c0t0d0s1
这样的文件。
如果你是linux你有可能看见
等等。这些文件,每一个就可以看成是一个分区。当计算机启动时,系统先找到/(根目录),然后系统就像挖土豆子一样找到一个带出来一串似的,顺着根目录一带就带出来挂载在根目录下的所有目录(详细的请查一下/etc/fstab这个文件)。在UNIX下叫目录(directory)的感念,就像是windows下的文件夹(folder),但与windows最大的区别在于UNIX没有A盘,C盘这样的概念。它所有的文件都要挂载到根目录下的某个子目录底下,另外UNIX把所有设备都看成是文件。比如A盘就有可能是/dev/fd0这个文件。那比如我们想使用软盘怎么办呢,以为软盘是个临时文件,所以在开机时一般不会设为自动挂载。所以我们要手动挂载它在这个某一个目录下。有可能我说得大家有点糊涂,不要紧我们举个例子。文件系统就像一棵大树,树干只有一个那就是根目,树干往上是树杈就是一个一个的子目录,树杈往上有可能还是树杈,那就是这个子目录的子目录,也有可能是树叶,树叶就是文件。现在你手里有一根树枝上面有几个叶子,可你拿手攥着它,它是不会得到来自这颗大树的养分的,除非你把它嫁接在大树的某一个树杈上。就是这个道理。
回到刚才的话,具体怎么能使用软盘呢。
$mount /dev/fd0 /mnt/floppy
这样你就把这个小树杈,嫁接到了/mnt/floppy上。等你用完了软盘输入
$umount /mnt/floppy
就等于把这个树枝又掰折了。
说了这么多,换换口味看一个程序,让我们来调查一下分区的剩余空间有多少
#include &stdio.h&
#include &sys/types.h&
#include &sys/statvfs.h&
int main(int argc , char *argv[])
struct statvfs buf[1];
if( statvfs(argv[1],buf)!=0 )
fprintf(stderr , "Cannot read super block !\n");
fprintf(stderr , "%4.1f %% free\n",
(float)buf[0].f_bfree / buf[0].f_blocks*100 );
编译执行:
36.7 % free
这里用到了statvfs()这个系统调用。它是用来得到文件系统总体信息的系统调用。得到的信息它会放在一个叫做statvfs的结构体里。这时候结构体里的f_bfree表示的就是空闲的block数,f_block表示的就是所有block数。他们相除就得到了使用比,是不是很简单呢。这里注意,statvfs系统调用返回的是一个叫做statvfs的结构体,名字相同别弄混了。下面把statvfs()的格式写一下。
#include&sys/types.h&
#include&sys/statvfs.h&
int statvfs( char *path , struct statvfs *buf );
成功时:0失败时:-1
结构体statvfs里还有好多关于这个分区的信息,感觉就像windows下查看C盘属性的功能差不多,但还要强大,大家可以自己上机man一下。我就不一一说了。
上面另一个系统调用sync(),是用来将内存上的硬盘信息回写到硬盘上而用的。这时因为UNIX系统为了能快速查找硬盘信息,而将super block(下面要讲)信息放在内存里。它是一个没有参数也没有返回值的系统调用。
另外还有一个命令也叫sync,作用和sync()是一样的。
上面说到了一个概念叫super block,下面我们就说说它。
一般,一个分区包含有这么几个部分:boot block,super block,i node block,data block。我们一个一个来说说。
boot block :
它总是在每个分区的最前面,用来存放开机引导程序。大小是512或1024字节。LINUX下我们常用的LILO等就放在这里。
super block :
super block用来存放这个分区全体的管理信息。我说说关于i-node的信息,别的大家可以查查任何一本关于UNIX文件系统的书,都会有的。super block里有一个存放空i-node号的数组。如果我们建立新文件时,系统就可以知道现在哪些i-node号是可用的。上面我们说了,super block的信息是常驻内存的,这样系统建立新文件时就不用去读盘,而直接从内存里调出来就可以了,提高了系统运行速度。
i node block :
i node block就是存放i-node的部分。i-node即index node是简称。里面装的关于每一个文件的属性,就好像windows里选文件点右键,查看属性里显示的东西。比如,文件的所有者,权限,大小,修改日期,硬盘上的位置等等。
data block :
这里存放就是货真价实的数据了。没什么好说的了
我们再看一个程序。它是用来将i-node号及文件名输出来。
#include &stdio.h&
#include &dirent.h&
int main( int argc , char *argv[] )
struct dirent *p;
fp=opendir(argv[1]);
while( (p=readdir(fp))!=NULL )
printf("%i %s\n", p-&d_ino , p-&d_name );
closedir(fp);
$./a.out /
96673 sbin
966721 dev
998945 root
11 lost+found
1031169 lib
好下面我们来说说上面的几个系统调用
作用:打开一个目录
#include &dirent.h&
#include &sys/types.h&
DIR *opendir( char *dirname );
成功时返回DIR结构体的地址,失败返回NULL
作用:读取目录信息到DIR结构体。DIR结构体是什么大家也可以查一下man 3 readdir
#include &linux/types.h&
#include &linux/dirent.h&
struct dirent *readdir(DIR *dir);
返回值:成功是返回DIR的地址,失败返回NULL
closedir()
作用:关闭目录
#include &sys/types.h&
#include &dirent.h&
int closedir(DIR *dir);
返回值:成功时为0,失败为1
书接上回,上次我们说到了UNIX文件系统的结构,知道了有哪几个block,各是干什么用的,这回我们说说怎样对文件进行操作。
我们一般对文件进行操作时不是直接指定i-node号的,而是指定文件的路径的。然而,在内核对文件的操作却是通过i-node来进行的。那么问题就来了,系统又是如何将路径和i-node联系起来从而又找到硬盘上数据存放的具体位置的呢。
我来做一下解释,比如你要访问/home/user1/test.c这个文件。系统从根目录开始查找,根目录的i-node号是2这个是确定的。系统就去i-node block里找2号i-node,看过上次贴的朋友应该知道,它会告诉系统根目录信息数据存放在硬盘上的具体位置,里面会有根目录下的文件与i-node的对应表,就像我们上次那个程序里看到的那样。系统从而得到了home目录的i-node号然,然后再去硬盘看home目录下的文件与i-node的对应关系,这样也就找到了test.c在硬盘上的具体位置。
其实如果test.c这个文件很大那它在硬盘上也不是放在一起的。data block里其实是一个一个的小数据块,数据就放在这里。但这个块的大小是一定的有1024字节的也有的这根据你的分区方法不同也不太一样。如果你的文件比较大那么一个数据块里就放不下它,这就需要更多的块。打个比方,你有130万RMB(好比一个文件),这么多钱可别被贼偷了去,要把它们放到保险柜(好比数据块)里,但保险柜太小一个只能放50万。那你需要几个保险柜呢。(好像是小学时候做的应用题)答案是3个,最后一个装了只装了30万。浪费了20万的空间。那我接着要问这时我正好有20万(好比另一个文件)也要放进保险柜,那我们一共要多少个保险柜呢。如果你说还是3个那你就错了。虽然你有一个保险箱浪费了20万的空间,但其他人的钱(其他文件)也是不能放进去的,否则谁也分不清里面哪些钱是你的哪些钱是我的了。所以我的20万也好即使是一块钱也需要一个新的保险柜。
下面我们举个例子来看看如何用i-node里面的信息。这个程序是将我们指定的两个文件名中输出更新时间晚的一个
#include &sys/types.h&
#include &sys/stat.h&
#include &stdio.h&
int main( int argc , char *argv )
struct stat buf[2] , *
if( argc!=3 )
fprintf( stderr , "Usage : %s file1 file2\n" , argv[0] );
if( stat(argv[1],p)!=0 )
fprintf( stderr , "%s not found !\n" , argv[1] );
if( stat(argv[2],p)!=0 )
fprintf( stderr , "%s not found !\n" , argv[2] );
if( buf[0].st_mtime & buf[1].st_mtime )
//比较更新时间
printf( "%s\n" , argv[1] );
printf( "%s\n" , argv[2] );
大家可以自己执行一下看看结果。
我们来说说stat(),使用它可以得到一个叫stat的结构体,它包含了i-node里面的一部分信息。诸如,文件的权限,i-node号,链接数,所有者id,组id,文件大小等等。具体的大家可man stat查看一下。
作用:得到一个stat结构体。
#include &sys/types.h&
#include &sys/stat.h&
int stat( char *path , struct stat *buf );
成功时:0 失败时:-1
为了简洁,我们的程序里没有考虑到更新时间相同的文件。大家可以自己补上。
下面我们做一个改变文件权限的程序。
#include &sys/types.h&
#include &sys/stat.h&
#include &stdio.h&
#define MASK 0555 //设置掩码
int main( int argc , char *argv[] )
struct stat buf[1];
if( argc!=2 )
fprintf( stderr , "Usage : %s file\n" , argv[0] );
if( stat(argv[1],buf)!=0 )
fprintf( stderr , "Cannot read i-node\n" );
mode = ( buf[0].st_mode & MASK );
if ( chmod(argv[1],mode)!=0 )
//改变文件的权限
fprintf( stderr , "Cannot change mode\n" );
怎么样这个程序不能我直接说里面的系统调用
作用:改变文件的权限(关于权限下面要说)
#include &sys/types.h&
#include &sys/stat.h&
int chmod( char *path , mode_t mode );
成功时:0 失败时:-1
那什么是文件的权限呢?你可以用
命令来查看根目录下所有子目录的权限。你会看见类似下面这样的
drwxr-xr-x
2 root root
drwxr-xr-x
4 root root
02:15 boot
drwxr-xr-x 10 root root
drwxr-xr-x 88 root root
drwxr-xr-x
3 root root
02:40 home
drwxr-xr-x 11 root root
drwx------
2 root root
10:51 lost+found
drwxr-xr-x
2 root root
20:27 media
drwxr-xr-x
2 root root
drwxr-xr-x
2 root root
drwxr-xr-x
2 root root
0 11-11 15:08 net
drwxr-xr-x
2 root root
我们看见的每行最前面的那一串字符就是表示权限的。其中第一位表示文件的类型(d:目录,-:一般文件,l:链接,c:字符设备,b:块设备,最后在/dev目录中很常见,是表示设备的)。其后有九位,三位一组,第一组(2-4位)是说明文件所有者的权限的,第二组(5-7)位是说明与文件所有者同group其他用户对这个文件的权限,第三组(8-10)是所有人对这个文件的权限。每组的第一位是r表示读,第二位是w表示写,第三位是x表示可执行,如果某一位上是-说明就没有该位的相应权限。比如说/bin与root同group的人就没有写的权限因为它的是r-x,中间本应是w的那一位是-。
我们说的在详细点比如一个文件有这样的一个权限
我们把它先分组
这样我们就可以清楚地看见谁有什么样的权限了。接着我们把有权限的为写成1,-位写成0的话会变成
这种形式,我们把它们化成十进数就变成了
所以我们也可以说这个文件的权限是754了。这回你应该明白为什么有时候说某个文件的权限是777,444,654等等了吧。下回看见了别再说它是777老虎机了。
如果您想提高自己的技术水平,欢迎加入本站官方1号QQ群:&&,&&2号QQ群:,在群里结识技术精英和交流技术^_^
本站联系邮箱:

我要回帖

更多关于 mysql如何创建数据库 的文章

 

随机推荐