Linux学习笔记.docx

上传人:b****4 文档编号:24350109 上传时间:2023-05-26 格式:DOCX 页数:37 大小:33.48KB
下载 相关 举报
Linux学习笔记.docx_第1页
第1页 / 共37页
Linux学习笔记.docx_第2页
第2页 / 共37页
Linux学习笔记.docx_第3页
第3页 / 共37页
Linux学习笔记.docx_第4页
第4页 / 共37页
Linux学习笔记.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

Linux学习笔记.docx

《Linux学习笔记.docx》由会员分享,可在线阅读,更多相关《Linux学习笔记.docx(37页珍藏版)》请在冰豆网上搜索。

Linux学习笔记.docx

Linux学习笔记

目录权限在Linux下,将某个目录下的子目录和文件权限一次性更改的方法

在Linux下,将某个目录下的子目录和文件权限一次性更改的方法

使用命令:

chmod-Ra+rwx目录名

其中a表示针对所有人,有读(r)、写(w)、执行(x)的权限。

+表示增加权限,-表示减少权限。

a亦可以换成ugo,u表示该文件的拥有者,g表示与该文件的拥有者属于同一个组(group)者,o表示其他以外的人。

参数R即是对子目录进行相同的操作。

如:

chmod-Ra+rwx/web

文件的权限口诀:

1执2写4读

常见的文件打开方式:

1、O_RDONLY以只读的方式打开

2、O_WRONLY以只写的方式打开

3、O_RDWR以读写的方式打开

4、O_APPEND以追加的方式打开

5、O_CREAT创建一个文件

6、O_NOBLOCK非阻塞方式打开

本文是转字网上的两段,如果是菜鸟,想懂有点难度,我这里给点注释

在linux上共享文件夹windows下看

*******************************************

首先给linux设一个ip,要和windows是一个网段的

mkdir/share---------------在根下创建文件夹(除了root的目录下不能创建其他都可以)

chmod777/share/------------给share文件夹赋权

vi/etc/samba/smb.conf------------(编辑samba下的smb.conf文件)

编辑  security=share  ----------一般在第58行

编辑最后面的286[weihaiyang]

            287   comment=share

            288   path=/share

            289   validusers=nobody

            290   public=yes

            291   writable=yes

            292   printable=no

            293   createmask=0765(前面的数字是行数)

servicesmbrestart重启smb服务

然后在windows下的“运行”里输入li

fputs(””,fp)是表示向fp文件中输入字符串、fputc向文件中输入一个字符,fgets与fgetc也是同样道理

2、系统调用的方式访问文件

例如intmain(Intagrc,char*argv[])

在参数中agrc表示需要传入的参数个数,argv[i]是用来保存你所输入的参数。

注意:

[i]中的i是从1开始取值。

文件指针向前移是用-i表示向前移动i位

3、进程的特点:

1、并发性

2、动态性

3、独立性

4、异步性(进程的执行程序可以随意的)

进程的创建

在创建一个子进程后该进程与父进程共享该子进程创建下面的代码段,但子进程中的数据空间和堆栈空间是从父进程中复制过来的

Fork:

子进程拷贝父进程的数据段vfork:

子进程与父进程的共享数据段

进程间通信的方式:

1、管道(pipe)和有名管道(FIFO)

2、信号

3、消息队列

4、共享内存

5、信号量

6、套接字

管道是从头部读数据从尾部写入数据

系统命令:

使用psaux列出所有的进程pid

Memset函数是对某块内存区进行清除进行初始化。

信号发送的主要函数有kill和raise

区别:

kill既可以向自身发送信号,也可以向其他进程发送信号;而raise函数是向自身进程发送信号;

#include

#include

intkill(pid_pid,intsigno)

Intraise(intsigno);

“EOF”表示串流中无资料可读取,一般实际值为-1

共享内存:

intshmget(key_tkey,intsize,intshmflag)

key表示共享内存的键值:

0/IPC_PRIVATE

返回的是共享内存的标示符shmid

Intshmat(intshmid,char*shmaddr,intflag)

Intshmat(intshmid,00,intflag),0表示系统自己指定地址(即把该共享内存映射到调用进程的地址空间,flag为零表示共享内存为可读写)。

返回的是共享内存映射到进程的地址。

shmat

  作用:

共享内存区对象映射到调用进程的地址空间

  核心处理函数:

void*shmat(intshmid,char*shmaddr,intshmflag);shmat()是用来允许本进程访问一块共享内存的函数。

  intshmid是那块共享内存的ID。

char*shmaddr是共享内存的起始地址

  intshmflag是本进程对该内存的操作模式。

如果是SHM_RDONLY的话,就是只读模式。

其它的是读写模式

  成功时,这个函数返回共享内存的起始地址。

失败时返回-1

  最近用到内存共享,收集整理了些资料,做了个简单的对比

 

mmap系统调用

系统V共享内存

获取共享

  内存ID

#include 

  fd=open(name ,flag,mode);

  if(fd<0)

  ….

#include 

  #include 

  int shmget(key_t key, size_t size, int shmflg);

映射内存

ptr=mmap(NULL,len, PROT_READ|PROT_WRITE, 

  MAP_SHARED , fd , 0); 

void *shmat( int shmid , char *shmaddr , int shmflag );

解除映射

int munmap( void * addr, size_t len ) ;

int shmdt( char *shmaddr );

  使进程中的映射内存无效化,不可以使用。

但是保留空间

其它

同步:

  int msync ( void * addr , size_t len, int flags);

控制:

  shmctl( shmid , IPC_STAT , &buf ); 

  // 取得共享内存的状态

  shmctl( shmid , IPC_RMID , &buf ); 

  // 删除共享内存–删除共享内存,彻底不可用,释放空间

void*memset(void*s,intc,size_tn)

总的作用:

将已开辟内存空间s的首n个字节的值设为值c。

消息队列

#include

#include

Key_tftok(char*pathname,intproj)

功能:

返回文件名的对应键值

Pathname:

文件名

Proj:

项目名

2、打开和创建

#include

#include

#include

Intmsgget(key_tkey,intmsgflg)

Key:

键值,由ftok提供

Msgflg:

标志位。

IPC_CREAT创建新的消息队列IPC_EXCL与IPC_CREAT一同使用,若要创建的消息队列已存在,则返回错误;IPC_NOWAIT读写消息队列要求无法满足时,不阻塞。

返回值:

与键值key相对应的消息队列描述字

消息队列

1. 创建消息队列

|8zGR9E7XnW`@.S;n0

      #include

b8oT:

]Q)`+Q0       #include

ft"r~LI}0       #include51Testing软件测试网u"ac-I

G(c

       intmsgget(key_tkey,intmsgflg);51Testing软件测试网(f+SGLYx!

u5J!

c

成功返回队列ID,失败返回-1。

51Testing软件测试网ZS0[&@*v

参数51Testing软件测试网u^5OHh6\

说明51Testing软件测试网~;N]D{p)M|

key

#t%[E+Vn\0

创建/打开队列key值,由ftok产生,可以直接给常量51Testing软件测试网2XcD&ImZ`6suOx

msgflg51Testing软件测试网0?

neK0t4um

创建/打开方式IPC_CREAT、IPC_EXCL、IPC_NOWAIT

Ye,]D\y'_0

通常是msgflg=IPC_CREAT|IPC_EXCL|0666,意思是若不存在key值的队列则创建,否则如果存在则打开队列,0666意思与一般文件权限一样,XXX-本用户,同组用户,其他用户的读写执行的权限。

I9S&I*D:

BA0      #include51Testing软件测试网d9eS

u2RFt

       #include51Testing软件测试网(e#pa_lj

       key_tftok(constchar*pathname,intproj_id);

1?

3z.Ai,ca#w0

//获取pathname相对应的一个键值,pathname必须是存在并且可读取的文件,proj_id表示序号,用来区别同时的存在文件。

成功返回key值,失败返回-1。

2. 队列读写

8yF1|G)mF0

       #include

'hHkLV'L^}c5K0       #include

.c_%c%Hc"slW0       #include51Testing软件测试网US,^oPmx0b/D

a)        读取数据――阻塞读取消息队列,直到解除阻塞。

51Testing软件测试网fJ3C:

c_)Z

ssize_tmsgrcv(intmsqid,structmsgbuf*msgp,size_tmsgsz,longmsgtyp,intmsgflg);

@%mv4[TJj0

参数

'{/QW+B5W*yT0

说明

a%Wa1~3m6ox2[o0

msqid51Testing软件测试网+RH@/O,U]y

已打开的消息队列id51Testing软件测试网!

vA/jN"@Cwx[

msgp51Testing软件测试网xZ[W*]q'A9b

接收存放的消息队列缓存结构51Testing软件测试网"\P}

gw6GZ.F

msgsz51Testing软件测试网%s[+H9^Y*lin|

消息数据长度

sqlc(Z0

msgtyp51Testing软件测试网#H5[.|wr

消息类型。

=0读取队列中第一个数据。

zS-T!

U6n0

msgflg

y9K[eSK(K.AYdu.d0

读取标志通常使用IPC_NOWAIT:

即没有满足条件的消息,立即返回,此时,错误代码errno=ENOMSG

|SbAu/@9`0kkK0

IPC_EXCEPT:

与msgtyp>0配合使用,返回队列中第一个类型不为msgtyp的消息

H!

X/wafdO!

b)j0

MSG_NOERROR:

截断超长数据51Testing软件测试网p"PJ^sP&M

缓冲内容结构如下:

structmsgbuf{51Testing软件测试网7Hd:

fo4l)B7}-huunY+Um

longmtype;    /*消息类型mustbe>0*/51Testing软件测试网;n%]nkzSr6J

charmtext[1];/*消息数据这里只是一个数组的首地址,并非是只有一个字符*/

F0f0XJ

j}0            };51Testing软件测试网'h2U%rOz8v

msgrcv()解除阻塞的条件三个条件@9o,aM9n+fe

1. 消息队列中有了满足条件的消息(或使用了);51Testing软件测试网#b*ql(tt'@

2. msqid代表的消息队列被删除;51Testing软件测试网#P}~;{7pl`&my

3. 调用msgrcv()的进程被信号中断;

[f&WH#@tvCc'r0

a)        发送数据

bsb6HmDw0

intmsgsnd(intmsqid,structmsgbuf*msgp,size_tmsgsz,intmsgflg);

W

`&Az9@0

参数

_W'Vn6Xem0

说明51Testing软件测试网{zgP.d9R"[~:

h

msqid51Testing软件测试网+S/e;lH3O_Ac

已打开的消息队列id

qTjd|5M0

msgp51Testing软件测试网!

WM,sFP4o0H8g

发送存放的消息队列缓存结构51Testing软件测试网aKG+{hpC

msgsz51Testing软件测试网lORc,YA(W"aN

消息数据长度

Bla#K_t?

0

msgflg

6~d)H.^h0

消息类型。

=0读取队列中第一个数据。

51Testing软件测试网4NA;{6@FGA

51Testing软件测试网VR.qkCT

51Testing软件测试网'EuOV&R!

?

t

51Testing软件测试网b9}/[m!

@}-C

3. 消息队列控制

|9z}2T5@;T0

      #include

i9kcvQ"W(Z2rSz0       #include

Dg0q4Gu4]0       #include    51Testing软件测试网]Wv,r{plD$?

#U

       intmsgctl(intmsqid,intcmd,structmsqid_ds*buf);51Testing软件测试网s-r%YIfTT

成功返回0,失败返回-1。

51Testing软件测试网3[VP9z3SE

参数

!

mWv8`#S]0

说明

n+ZbaB6Gp0

msqid

W;]&^Dg^(K0

已打开的消息队列id51Testing软件测试网S#LpIN(R)KU8`

cmd

'{4A:

O1oW0

控制类型选项51Testing软件测试网7Z9{qnba!

o

IPC_STAT:

取得队列状态51Testing软件测试网-IrIROC'f]aD

IPC_SET:

设置队列属性

+?

/P.c,e+w_x\0

IPC_RMID:

删除消息队列

g)ig9}T

te^*Y0

buf51Testing软件测试网5~@~/M'ff6a

存放队列的属性结构

(["ZX5A4wQ

[0c0

e+B0S8|u

hfj0

队列属性如下:

51Testing软件测试网Q]E1L*dU,gd

structmsqid_ds51Testing软件测试网w7o"^(~]*S6i

{

/wfjV{0iy0  structipc_permmsg_perm;/*structuredescribingoperationpermission*/51Testing软件测试网l4J*~:

U'R3\Q

  __time_tmsg_stime;/*最后一次发送消息的时间*/51Testing软件测试网JK.Bw&y)PB

  unsignedlongint__unused1;/*保留*/

;F8w%sA

p:

C0  __time_tmsg_rtime;/*最后一次接收数据时间*/51Testing软件测试网(T?

sD|jY

  unsignedlongint__unused2;    /*保留*/51Testing软件测试网3~w!

h

v!

zy!

r

  __time_tmsg_ctime;/*最后修改时间*/51Testing软件测试网&cK"xf8i&T

  unsignedlongint__unused3;/*保留*/

%P-dP^Y0  unsignedlongint__msg_cbytes;/*当前队列字节数*/51Testing软件测试网-j$P:

~5Z'Odr

  msgqnum_tmsg_qnum;/*当前队列的消息数*/

$zMlg4Lx0  msglen_tmsg_qbytes;/*队列中容量*/51Testing软件测试网7uh1?

j:

UO3_

  __pid_tmsg_lspid;/*最后发送消息的进程号*/

"P#wJ9~[+UrR0  __pid_tmsg_lrpid;/*最后接收队列的进程号*/

kU4X#Y+{a0  unsignedlongint__unused4;/*保留*/

0rAS;fc0  unsignedlongint__unused5;/*保留*/

b^7T%@|n)g.b0};

7P/x7R_aF0

4.例子:

{F7LA&b8Ued0n_i.j0

#include51Testing软件测试网PE6GV%jD}#G

#include

L*k'BX7N0ycD0#include

qi$M;Dg8]!

c9D0#definemsgkey0x1100000151Testing软件测试网2o+XnSO]1rc

structmsg_buf

:

B;{bi'd'{a0    {

:

[E!

rR#x5l,[m0        intmtype;

WNeQ7N#~8|:

B(C3V0        chardata[255];51Testing软件测试网'Pudk^(@

    };

QPN?

/d0 51Testing软件测试网h

sP"XB7\Q@

intmain()51Testing软件测试网q"EOq4]RT4P

{

j!

zsF4k5M;_Z0        key_tkey;51Testing软件测试网%L~G

p{.E

        intmsgid;

v0}e,iXU0r6x0        intret;51Testing软件测试网,O'm0K7J!

LPv|$~

        structmsg_bufmsgbuf;

~

j.?

8fP0 51Testing软件测试网pEO6O&W?

-}

        key=ftok("/tmp/1",'a');51Testing软件测试网;aU3C"x*}Btf%R.q*|5h

        printf("key=[%x]\n",key);

d}[g,e8{0        //msgid=msgget(key,IPC_CREAT|IPC_EXCL|0666);/*通过文件对应*/51Testing软件测试网_;rp%P}Ft#p

        msgid=msgget(msgkey,IPC_CREAT|IPC_EXCL|0666);/*或者取常量*/

te9w

r/T@

D0        if(msgid==-1)51Testing软件测试网z@&nQ"lR7[@

        {51Testing软件测试网VlkY[X

                printf("createerror\n");51Testing软件测试网'~o^,SJM]

                return-1;

;{S/xj-nc0        }51Testing软件测试网Es8?

ij3E

p~C1Y(V

 51Testing软件测试网e.G&`/OL'YHV

        msgbuf.mtype=getpid();51Testing软件测试网Gq/V2rRO

        strcpy(msgbuf.data,"testhaha");

+YS{!

Nv&P(G0        ret=msgsnd(msgid,&msgbuf,sizeof(msgbuf.data),IPC_NOWAIT);

3_+Mr!

o.u

K8jw]5H0        if(ret==-1)51Testing软件测试网4L-f1_3vr-\

        {51Testing软件测试网,]to?

'K&?

8v

                printf("sendmessageerr\n");51Testing软件测试网N6{a9o0kE4W

                return-1;

T8d(T#io-s0        }

XkUg8]!

WX3sc3xQ0 51Testing软件测试网p#W+wGA8@*q

        memset(&msgbuf,0,sizeof(msgbuf));51Testing软件测试网)~3j2Ws"hm!

b

        ret=msgrcv(msgid,&msgbuf,sizeof(msgbuf.data),getpid(),IPC_NOWAIT);51Testing软件测试网n:

mk.E_KB+Ef?

UW

        if(ret==-1)

j#qDe#o7Z}5s!

P3R0        {51Testing软件测试网&kA)t6U&v-hsp0~

                printf("recvmessageerr\n");

Z3E.Ms*a~0                return-1;51Testing软件测试网d

M8k0[q:

yt@#vU

        }51Testing软件测试网(an}-q*x*H.v{2w

        printf("recvmsg=[%s]\n",msgbuf.data);

t#HUWP].ay0S8eM"{0 

#N6GkmqzMn0        ret=msgctl(msgid,IPC_RMID,NULL);//删除消息队列51Testing软件测试网~YWFN:

]

51Testing软件测试网5S6n^!

j;}*EzO

        if(ret==-1)51Testing软件测试网D+mB_!

PJgH9rY

        {

\0y6z2JJ0                printf("delmsgerr\n");

;B#~5{;M0D8I)\:

}0          

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1