����Linux�Ż�
Linux����

UNIX����̱��

����ʱ��:2006-07-26 08:00:19��Դ:��������:bear10214
UNIX����̱��
д��ǰ��Ļ�
������Ҫ���ݱ�����UNIXϵͳ�ϵı��ʵ�������ܽ����, ����Ϊ�Լ���һ��ʱ���ڱ��ʵ���IJ����ܽ�, �ֿɳ�Ϊ���·���. ��UNIX����Ա��ѧ����˵��һ��СС�ľ���, �����ο�; ��UNIX������˵��ֵһ��, ���λ���ָ��.
һ.����̳�����ص�
����UNIXϵͳ�Ƿ�ʱ���û�ϵͳ, CPU��ʱ��Ƭ����������û�ʹ��, ����ʵ����Ӧ��˵CPU��ʱ��Ƭ�������������ʹ��, ÿ�����̶����Լ������л�����ʹ����CPU�������л�ʱ����"����"�ý����Ѽ�����һ���"���Ʒ". ��DOS�ĸ�����˵, ���̵��л�����һ��"DOS�ж�"��������, �����������:
(1)�û����ݵı���: �������Ķ�(TEXT), ���ݶ�(DATA,BSS), ջ��(STACK), �����ڴ��(SHARED MEMORY)�ı���.
(2)�Ĵ������ݵı���: ����PC(program counter,ָ����һ��Ҫִ�е�ָ ��ĵ�ַ), PSW(processor status word,������״̬��), SP(stack pointer,ջָ��), PCBP(pointer of process control block,���̿��ƿ�ָ��), FP(frame pointer,ָ��ջ��һ��������local�������׵�ַ), AP(augument pointer,ָ��ջ�к������õ�ʵ��λ��), ISP(interrupt stack pointer,�ж�ջָ��), �Լ�������ͨ�üĴ�����.
(3)ϵͳ��εı���: ����proc,u,����洢�ռ��������,�жϴ���ջ.�Ա��ڸý�����һ�εõ�CPUʱ��Ƭʱ������������ȥ.��Ȼϵͳ�Ѿ�������������Щ�жϴ����Ĺ���, ������������ʲôҪ���ĵ���? ���Ǿ�����ʹ��ϵͳ�ṩ�Ķ���̵��ص�, �ü������򾫳Ϻ���, �򵥶��ָ�Ч�ذѽ�����������.
����,UNIXϵͳ����Ҳ����C����д�Ķ���̳���,����̱����UNIX���ص�,��������Ϥ�˶���̱�̺�,�����UNIXϵͳ������һ���������ʶ.�����ҽ���һ�¶���̳����һЩͻ�����ص�:
1.���л�
һ�����ӵ��¼��ǿ��Էֽ�����ɸ����¼��������, ���ڳ���Ա�Ĵ���������γ������ָ���, ���Ƚ�����ֽ��һ����С����, ��С������ϸ��, �����һ�����ʵĹ�ģ������һ������. ������������Ҳ����ô˵��. ���������ͼ�ķ�ʽ��˼��, һЩС����ļ����ǿ��Ի������ŵ�, ����ͬʱ����, ���ڹؼ�������Ҫͳһ��һ���ط�������, ������������о��Dz��е�, ���ٴ��˵�ʱ���������˵��������. ��ÿ��С����ļ������ǽϼ򵥵�.
2.������
�����ij���Գ���Ա��˵�����ڹ���һ����, ����ԱΪÿ��������ƺ���Ӧ�Ĺ���, ��ͨ��һ����ͨѶ���ƽ������л��ؽ����һ��, ��ÿ�����̵�����Ǽ򵥵�, ֻ���ܿز���С��Ӧ��(��ʵҲ�����򵥵�), �Ϳ�������������ʩ��.
3.��������
����ص��Dz���ϵͳ���ص�, ���������Ƕ�����, ���ᴮλ.
4.����
������һ�����ݵ绰��ѯϵͳ��, ��������Ƴ�һ������ֻ����һ�β�ѯ����, �����һ������. ���绰��ѯ��ʼʱ, ��������һ�����̶Ը���β�ѯ; ��һ���绰����ʱ, ���س����ֲ���һ�������Ľ��̶Ը�, ÿ��������ɲ�ѯ�������ʧ. �����ı�̶��, ֻҪ��һ�β�ѯ�ij���Ϳ�����.
��.���õĶ���̱�̵�ϵͳ����
1.fork()
����:����һ���µĽ���.
�﷨:#include
#include
pid_t fork();
˵��:��ϵͳ���ò���һ���µĽ���, ���ӽ���, �ǵ��ý��̵�һ������Ʒ. ���ý��̽и�����, �ӽ��̼̳��˸����̵ļ������е�����:
. ʵ��UID,GID����ЧUID,GID.
. ��������.
. ����GID.
. ����exec()ʱ�Ĺرձ�־.
. UID����ģʽ����λ.
. GID����ģʽ����λ.
. �������.
. �ỰID.
. �����ն�.
. ��ǰ����Ŀ¼.
. ��Ŀ¼.
. �ļ���������UMASK.
. �ļ���������ULIMIT.
. Ԥ��ֵ, �����ȼ����κ������Ľ���Ԥ������, �������಻ͬ�����Ƿ���Լ̳�.
. ����һЩ��������.
���ӽ���Ҳ���븸���̲�ͬ������:
. ���̺�, �ӽ��̺Ų�ͬ���κ�һ����Ľ������.
. �����̺�.
. �ӽ��̼̳и����̵��ļ�����������ʱ, �����Լ���һ�����������븸���̺������ӽ��̹�������Դ.
. �ӽ��̵��û�ʱ���ϵͳʱ�䱻��ʼ��Ϊ0.
. �ӽ��̵ij�ʱʱ������Ϊ0.
. �ӽ��̵��źŴ�������ָ������Ϊ��.
. �ӽ��̲��̳и����̵ļ�¼��.
����ֵ: ���óɹ�����ӽ��̷���0, �Ը����̷����ӽ��̺�, ��Ҳ���������ָ��ӽ��̵ķ���. ������ʧ���򷵻�-1��������,�ӽ��̲�����.
����:pid_t pid;
if ((pid=fork())>0) {
}
else if (pid==0) {
exit(0); /*ע���ӽ��̱�����exit()�˳�����*/
}
else {
printf("fork error\n");
exit(0);
}
2.system()
����:����һ���µĽ���, �ӽ���ִ��ָ��������.
�﷨:#include
#include
int system(string)
char *string;
˵��:�����ý�����string���ݸ�һ�����������(һ��Ϊsh)ִ��, ��string������Ϊһ������, ��shִ�и�����.������stringΪһ����ָ����Ϊ�������������Ƿ����.
���������ͬ������������ͬ��ʽ, ������������Ϊһ����������ϵͳ������, Ӧע�����ʱ�����������ַ��Ĵ���. ����IJ����ǰ�PATH���������Ķ����. ���������ɵĺ��һ�㲻��Ը��������Ӱ��.
����ֵ:������Ϊ��ָ��ʱ, ֻ�е������������Чʱ����ֵΪ����.
��������Ϊ��ָ��, ����ֵΪ������ķ���״̬(ͬwaitpid())�ķ���ֵ. ������Ч���﷨�����򷵻ط���ֵ,��ִ�е������ֹ. ��������򷵻�-1.
����:char command[81];
int i;
for (i=1;i<8;i++) {
sprintf(command,"ps -t tty%02i",i);
system(command);
}
3.exec()
����:ִ��һ���ļ�
�﷨:#include
int execl(path,arg0,...,argn,(char*)0)
char *path,*arg0,...,*argn;
int execv(path,argv)
char *path,*argv[];
int execle(path,arg0,...,argn,(char*)0,envp)
char *path,*arg0,...,*argn,*envp[];
int execve(path,argv,envp)
char *path,*argv[],*envp[];
int execvp(file,argv)
char *file,*argv[];
˵��:����һ��ϵͳ������, ���ڽ�һ���µij�����뱾������ռ���ڴ�, ������֮, �����µ��ڴ����ӳ��. �µij�������ǿ�ִ���ļ���SHELL������.
��C����ִ��ʱ,�����µ��õ�:
main(int argc,char *argv[],char *envp[]);
argc�Dz�������,�Ǹ��������ַ���ָ������,envp���½��̵Ļ��������ַ�����ָ������.argc����Ϊ1,argv[0]Ϊ�����ļ���,����,�������execϵͳ��������,pathΪ�½����ļ���·����,fileΪ�½����ļ���,��file����ȫ·����,ϵͳ���ûᰴPATH���������Զ��Ҷ�Ӧ�Ŀ�ִ���ļ�����.���½����ļ�����һ����ִ�е�Ŀ���ļ�(���������ļ�),��execlp()��execvp()�Ὣ���ļ�������Ϊһ������������ı�׼�����γ�system().arg0,...��ָ��ָ��'\0'�������ַ���,����½��̵���Ч����,�Ҹò����б���һ����ָ�����.������,arg0���ٱ�����ڲ�ָ���½����ļ�����·����.ͬ��,argv���ַ���ָ������,argv[0]ָ���½����ļ�����·����,����һ��ָ�����.
envp��һ���ַ���ָ������,�Կ�ָ�����,��Щ�ַ�������½��̵Ļ���.
�ڵ�����Щϵͳ����ǰ�򿪵��ļ�ָ����½�����˵Ҳ�Ǵ򿪵�,�������Ѷ�����close-on-exec��־.�򿪵��ļ�ָ�����½����б��ֲ���,������ص��ļ���Ҳ������.
���ý������ò������������ź����½����б��ָ�Ϊȱʡ����,�������򱣳ֲ���.
�½�������ʱ���ļ���SUID��SGID���ö����ļ���UID��GIDΪ��ЧUID��GID.
�½��̻��̳�����������:
. ����GID.
. ���̺�.
. �����̺�.
. �������.
. �Ự��.
. �����ն�.
. alarmʱ���ź�ʣ�µ�ʱ��.
. ��ǰ����Ŀ¼.
. ��Ŀ¼.
. �ļ���������.
. ��Դ����.
. �û�ʱ��,ϵͳʱ��,�ӽ����û�ʱ��,�ӽ���ϵͳʱ��.
. ��¼��.
. �����ź�����.
. �ź�����.
. ���ȼ�.
. Ԥ��ֵ.
���óɹ���,ϵͳ�����޸��½����ļ������·���ʱ��.
����ֵ:��ϵͳ����һ�㲻���гɹ�����ֵ, ��Ϊԭ���Ľ����ѵ�Ȼ�޴�.
����:printf("now this process will be ps command\n");
execl("/bin/ps","ps","-ef",NULL);
4.popen()
����:��ʼ����/��һ�����̵Ĺܵ�.
�﷨:#include
FILE *popen(command,type)
char *command,type;
˵��:��ϵͳ�����ڵ��ý��̺ͱ�ִ������䴴��һ���ܵ�.����command��Ϊ��ִ�е�������.type��ΪI/Oģʽ,"r"Ϊ�ӱ�ִ�������,"w"Ϊ��ִ������д.����һ����׼��ָ��,��Ϊ�ܵ�������,��ִ���������д����(��Ϊ��ִ�������STDIN��STDOUT)��ϵͳ���ÿ��������ڳ����е���ϵͳ����,��ȡ������������Ϣ����������������Ϣ.
����ֵ:���ɹ��򷵻�NULL,�ɹ��򷵻عܵ����ļ�ָ��.
5.pclose()
����:�رյ�һ�����̵Ĺܵ�.
�﷨:#include
int pclose(strm)
FILE *strm;
˵��:��ϵͳ�������ڹر���popen()�򿪵Ĺܵ�,����ȴ���popen()���������ִ�н�����,�رչܵ����ȡ�������.
����ֵ:���رյ��ļ�������������popen()�򿪵�,�򷵻�-1.
����:printf("now this process will call popen system call\n");
FILE * fd;
if ((fd=popen("ps -ef","r"))==NULL) {
printf("call popen failed\n");
return;
}
else {
char str[80];
while (fgets(str,80,fd)!=NULL)
printf("%s\n",str);
}
pclose(fd);
6.wait()
����:�ȴ�һ���ӽ��̷��ز��޸�״̬
�﷨:#include
#include
pid_t wait(stat_loc)
int *stat_loc;
˵��:�������ý���ȡ���ӽ��̵�״̬��Ϣ.���ý��̽������ֱ����һ���ӽ�����ֹ.
����ֵ:�ȴ���һ���ӽ��̷���ʱ,����ֵΪ���ӽ��̺�,���򷵻�ֵΪ-1.ͬʱstat_loc�����ӽ��̵ķ���ֵ.
����:/*������*/
if (fork()>0) {
wait((int *)0);
}
else {
exit(0);
}
7.waitpid()
����:�ȴ�ָ�����̺ŵ��ӽ��̵ķ��ز��޸�״̬
�﷨:#include
#include
pid_t waitpid(pid,stat_loc,options)
pid_t pid;
int *stat_loc,options;
˵��:��pid����-1,options����0ʱ,��ϵͳ���õ�ͬ��wait().�����ϵͳ���õ���Ϊ�ɲ���pid��options����.
pidָ����һ�鸸����Ҫ��֪����״̬���ӽ���:
-1:Ҫ��֪���κ�һ���ӽ��̵ķ���״̬.
>0:Ҫ��֪�����̺�Ϊpidֵ���ӽ��̵�״̬.
<-1:Ҫ��֪���������Ϊpid�ľ���ֵ���ӽ��̵�״̬.
options����Ϊ�Ա��ط�ʽ��ʾ�ı�־�Ի�������ɵ�λͼ,ÿ����־���ֽ���ij��������1��ʾ:
WUNTRACED:�����κ�δ֪������ֹͣ���е�ָ�����̺ŵ��ӽ��̵�״̬.���ӽ��̵�״̬��ֹͣ����ʱ���û�б������.
WCONTINUED:�����κμ������е�ָ�����̺ŵ��ӽ��̵�״̬,���ӽ��̵�״̬�Լ����������û�б������.
WHOHANG:�����ñ�ϵͳ����ʱ,ָ�����̺ŵ��ӽ��̵�״̬Ŀǰ������������Ч��(���ɱ�������ȡ��),���ý��̲�����ִͣ��.
WNOWAIT:���ֽ���״̬������stat_loc�Ľ����ڿɵȴ�״̬.
�ý��̽��ȴ�ֱ���´α�Ҫ���䷵��״ֵ̬.
����ֵ:�ȴ���һ���ӽ��̷���ʱ,����ֵΪ���ӽ��̺�,���򷵻�ֵΪ-1.ͬʱstat_loc�����ӽ��̵ķ���ֵ.
����:pid_t pid;
int stat_loc;
if ((pid=fork())>0) {
waitpid(pid,&stat_loc,0);
}
else {
exit(1);
}
printf("stat_loc is [%d]\n",stat_loc);
����:���ý�����źͻỰ��.
�﷨:#include
pid_t setpgrp()
˵��:�����ý��̲��ǻỰ�׽���.��������źͻỰ�Ŷ�����Ϊ�����Ľ��̺����.���ͷŵ��ý��̵Ŀ����ն�.
����ֵ:���óɹ���,�����µĽ������.
����:/*�����̴���*/
if (fork()>0) {
}
else {
setpgrp();
exit(0);
}
9.exit()
����:��ֹ����.
�﷨:#include
void exit(status)
int status;
˵��:���ý��̱���ϵͳ������ֹ.���𸽼ӵĴ����ڽ��̱���ֹǰȫ������.
����ֵ:��
10.signal()
����:�źŹ�������
�﷨:#include
void (*signal(sig,disp))(int)
int sig;
void (*disp)(int);
void (*sigset(sig,disp))(int)
int sig;
void (*disp)(int);
int sighold(sig)
int sig;
int sigrelse(sig)
int sig;
int sigignore(sig)
int sig;
int sigpause(sig)
int sig;
˵��:��Щϵͳ�����ṩ��Ӧ�ó����ָ���źŵļ򵥵��źŴ���.
signal()��sigset()�����޸��źŶ�λ.����sigָ���ź�(����SIGKILL��SIGSTOP,�������ź���ϵͳ����,�û������ܲ�׽��).
dispָ���µ��źŶ�λ,���µ��źŴ�������ָ��.����ΪSIG_IGN,SIG_DFL���źž����ַ.
��ʹ��signal(),disp���źž����ַ,sig����ΪSIGILL,SIGTRAP��SIGPWR,�յ����ź�ʱ,ϵͳ���Ƚ�����sig���źž��ΪSIG_DFL,Ȼ��ִ���źž��.
��ʹ��sigset(),disp���źž����ַ,���ź�ʱ,ϵͳ���Ƚ����źż�����ý��̵��ź�������,Ȼ��ִ���źž��.���źž�����н�����,ϵͳ���ָ����ý��̵��ź�����Ϊ�ź��յ�ǰ��״̬.����,ʹ��sigset()ʱ,dispΪSIG_HOLD,����źŽ��������ý��̵��ź������ж��źŵĶ�λ����.
sighold()���źż�����ý��̵��ź�������.
sigrelse()���źŴӵ��ý��̵��ź�������ɾ��.
sigignore()���źŵĶ�λ����ΪSIG_IGN.
sigpause()���źŴӵ��ý��̵��ź�������ɾ��,ͬʱ������ý���ֱ���յ��ź�.
���ź�SIGCHLD���źŶ�λΪSIG_IGN,����ý��̵��ӽ�������ֹʱ�����ɽ�������.���ý���Ҳ���õȴ��ӽ��̷��ز�����Ӧ����.
����ֵ:���óɹ���signal()�����������signal()���õ�disp��ֵ.���򷵻�SIG_ERR.
����һ:�����û��Լ����ź��жϴ�������,��SIGINT�ź�Ϊ��:
int flag=0;
void myself()
{
flag=1;
printf("get signal SIGINT\n");
*�²���*/
void (*a)();
a=myself;
signal(SIGINT,a);
flag=2;
}
main()
{
while (1) {
sleep(2000); /*�ȴ��ж��ź�*/
if (flag==1) {
printf("skip system call sleep\n");
exit(0);
}
if (flag==2) {
printf("skip system call sleep\n");
printf("waiting for next signal\n");
}
}
}
11.kill()
����:��һ����һ����̷���һ���ź�.
�﷨:#include
#include
int kill(pid,sig);
pid_t pid;
int sig;
˵��:��ϵͳ������һ����һ����̷���һ���ź�,���ź��ɲ���sigָ��,Ϊϵͳ�������źű��е�һ��.��Ϊ0(���ź�)�������ʵ���ϲ�û�з����ź�,���ڼ��pid����Ч��.
pidָ����Ҫ�������źŵĽ��̻������.pid������0,���źŽ������͵����̺ŵ���pid�Ľ���;��pid����0���źŽ������͵����е��뷢���źŽ���ͬ��һ��������Ľ���(ϵͳ��������̳���);��pidС��-1,���źŽ������͵����н��������pid����ֵ��ͬ�Ľ���;��pid����-1,���źŽ������͵����еĽ���(����ϵͳ���̳���).
�ź�Ҫ���͵�ָ���Ľ���,���ȵ��ý��̱����жԸý��̷����źŵ�Ȩ��.�����ý����к��ʵ����ȼ���߱���Ȩ��.�����ý��̵�ʵ�ʻ���Ч��UID���ڽ����źŵĽ��̵�ʵ��UID����setuid()ϵͳ�������õ�UID,��sig����SIGCONTͬʱ�շ�˫�����̵ĻỰ����ͬ,����ý���Ҳ�з����źŵ�Ȩ��.
�������з����źŵ�pidָ�����κ�һ�����̵�Ȩ������óɹ�,�������ʧ��,û���źŷ���.
����ֵ:���óɹ��򷵻�0,���򷵻�-1.
����:����ǰһ�����ӽ��̺�Ϊ324,��������һ��SIGINT�ź�,�������źŴ���:
kill((pid_t)324,SIGINT);
12.alarm()
����:����һ�����̵ij�ʱʱ��.
�﷨:#include
unsigned int alarm(sec)
unsigned int sec;
˵��:ָʾ���ý��̵ij�ʱʱ����ָ����ʱ�������ý��̷���һ��SIGALRM�ź�.���ó�ʱʱ��ʱʱ��ֵ���ᱻ�����ջ��,��һ�����û��ǰһ��(��δ����ʱʱ��)���.
��secΪ0,��ȡ���κ���ǰ���õij�ʱʱ��.
fork()�Ὣ�½��̵ij�ʱʱ�ӳ�ʼ��Ϊ0.����һ��������exec()��ϵͳ�����µ�ִ���ļ�ʱ,����ǰ���õij�ʱʱ���ڵ��ú�����Ч.
����ֵ:�����ϴ����ó�ʱʱ�Ӻ󵽵���ʱ��ʣ���ʱ������.
����:int flag=0;
void myself()
{
flag=1;
printf("get signal SIGALRM\n");
*���²���*/
void (*a)();
a=myself;
signal(SIGALRM,a);
flag=2;
}
main()
{
alarm(100); /*100��󷢳�ʱ�ж��ź�*/
while (1) {
sleep(2000); /*�ȴ��ж��ź�*/
if (flag==1) {
printf("skip system call sleep\n");
exit(0);
}
if (flag==2) {
printf("skip system call sleep\n");
printf("waiting for next signal\n");
}
}
}
13.msgsnd()
����:������Ϣ��ָ������Ϣ������.
�﷨:#include
#include
#include
int msgsnd(msqid,msgp,msgsz,msgflg)
int msqid;
void *msgp;
size_t msgsz;
int msgflg;
˵��:����һ����Ϣ����msqidָ����Ϣ���б�ʶ�ŵ���Ϣ����.
����msgpָ��һ���û�����Ļ�����,���һ������ĵ�һ����ӦΪ������,ָ����Ϣ����,�������ݷ��ڻ���������Ϣ��������������.��������ϢԪ�ض���:
long mtype;
char mtext[];
mtype��һ������,���ڽ��ս���ѡ����Ϣ����.
mtext��һ������Ϊmsgsz�ֽڵ��κ�����,����msgsz�ɴ�0��ϵͳ���������ֵ��仯.
msgflgָ��������Ϊ:
. ��(msgflg&IPC_NOWAIT)�����,��Ϣ�����DZ��������Ͷ����ý��̻���������.
. ��(msgflg&IPC_NOWAIT)�������,����ý��̻ᱻ����ֱ���������֮һ����:
* ��Ϣ�����ͳ�ȥ.
* ��Ϣ���б�־��ϵͳɾ��.ϵͳ���÷���-1.
* ���ý��̽��յ�һ��δ�����Ե��ж��ź�,���ý��̼���ִ�л���ֹ.
���óɹ���,��Ӧָ������Ϣ���е���ؽṹ�����¶���:
. ��Ϣ��(msg_qnum)��1.
. ��Ϣ����������ͽ��̺�(msg_lspid)��Ϊ���ý��̺�.
. ��Ϣ���з���ʱ��(msg_stime)��Ϊ��ǰϵͳʱ��.
������Ϣ��������ipcs -a����.
����ֵ:�ɹ��򷵻�0,���򷵻�-1.
14.msgrcv()
����:����Ϣ������ȡ��ָ�����͵���Ϣ.
�﷨:#include
#include
#include
int msgrcv(msqid,msgp,msgsz,msgtyp,msgflg)
int msqid;
void *msgp;
int msgsz;
long msgtyp;
int msgflg;
˵��:��ϵͳ���ô���msqidָ������Ϣ�����ж�ȡһ����msgtypָ�����͵���Ϣ����msgpָ��Ļ�������,ͬ����,�û������Ľṹ��ǰ����,������Ϣ���ͺ���Ϣ����.msgszΪ�ɽ��յ���Ϣ���ĵ��ֽ���.�����յ�����Ϣ���ĵij��ȴ���msgsz,��ᱻ�ض̵�msgsz�ֽ�Ϊֹ(����Ϣ��־msgflg&MSG_NOERRORΪ��ʱ),�ص��IJ��ݽ�����ʧ,���Ҳ�֪ͨ��Ϣ���ͽ���.
msgtypָ����Ϣ����:
. Ϊ0�������Ϣ�����е�һ����Ϣ.
. ����0�������Ϣ�����е�һ������Ϊmsgtyp����Ϣ.
. С��0�������Ϣ�����е�һ������ֵ��С��msgtyp����ֵ������ֵ����С����Ϣ.
msgflgָ��������Ϊ:
. ��(msgflg&IPC_NOWAIT)�����,���ý��̻���������,��û�н��յ���Ϣ�򷵻�ֵΪ-1,errno����ΪENOMSG.
. ��(msgflg&IPC_NOWAIT)�������,����ý��̻ᱻ����ֱ���������֮һ����:
* �����е���Ϣ����������Ч��.
* ��Ϣ���б�־��ϵͳɾ��.ϵͳ���÷���-1.
* ���ý��̽��յ�һ��δ�����Ե��ж��ź�,���ý��̼���ִ�л���ֹ.
���óɹ���,��Ӧָ������Ϣ���е���ؽṹ�����¶���:
. ��Ϣ��(msg_qnum)��1.
. ��Ϣ����������ս��̺�(msg_lrpid)��Ϊ���ý��̺�.
. ��Ϣ���н���ʱ��(msg_rtime)��Ϊ��ǰϵͳʱ��.
������Ϣ��������ipcs -a����.
����ֵ:���óɹ��򷵻�ֵ���ڽ��յ�ʵ����Ϣ���ĵ��ֽ���.
���ɹ��򷵻�-1.
15.msgctl()
����:��Ϣ���Ʋ���
�﷨:#include
#include
#include
int msgctl(msqid,cmd,buf)
int msqid,cmd;
struct msqid_ds *buf;
˵��:��ϵͳ�����ṩһϵ����Ϣ���Ʋ���,����������cmd����,����cmd����ֵ�����˸����������Ķ���.
. IPC_STAT:��msqid��ص����ݽṹ�и���Ԫ�صĵ�ǰֵ������bufָ��Ľṹ��.
. IPC_SET:��msqid��ص����ݽṹ�е�����Ԫ������Ϊ��bufָ��Ľṹ�еĶ�Ӧֵ.
msg_perm.uid
msg_perm.gid
msg_perm.mode
msg_qbytes
������ֻ������ЧUID����msg_perm.cuid��msg_perm.uid�Ľ��̻���ЧUID�к���Ȩ�޵Ľ��̲���.ֻ�о��к���Ȩ�޵��û���������msg_qbytes��ֵ.
. IPC_RMID:ɾ����msqidָʾ����Ϣ����.������ϵͳ��ɾ�����ƻ���ص����ݽṹ.
������ֻ������ЧUID����msg_perm.cuid��msg_perm.uid�Ľ��̻���ЧUID�к���Ȩ�޵Ľ��̲���.
����ֵ:���óɹ��򷵻�ֵΪ0,����Ϊ-1.
16.msgget()
����:ȡ��һ����Ϣ����.
�﷨:#include
#include
#include
int msgget(key,msgflg)
key_t key;
int msgflg;
˵��:��ϵͳ���÷��������key��ص���Ϣ���еı�ʶ��.
��������ʵ����,������Ϣ������صı�ʶ�������ݽṹ������������:
. ������key����IPC_PRIVATE.
. ������keyû��һ���Ѵ��ڵ���Ϣ���б�ʶ����֮���,ͬʱֵ(msgflg&IPC_CREAT)Ϊ��.
������Ϣ����ʱ,���µ���Ϣ���б�ʶ����ص����ݽṹ������ʼ��Ϊ����:
. msg_perm.cuid��msg_perm.uid����Ϊ���ý��̵���ЧUID.
. msg_perm.cgid��msg_perm.gid����Ϊ���ý��̵���ЧGID.
. msg_perm.mode����Ȩ�ޱ���λ����Ϊmsgflg����Ȩ�ޱ���λ.
. msg_qnum,msg_lspid,msg_lrpid,msg_stime,msg_rtime����Ϊ0.
. msg_ctime����Ϊ��ǰϵͳʱ��.
. msg_qbytes����Ϊϵͳ���������ֵ.
����ֵ:���óɹ��򷵻�һ��0ֵ,��Ϊ��Ϣ���б�ʶ��;���򷵻�ֵΪ-1.
����:��������������������Ϣ���в�����ϵͳ����:
#define RKEY 0x9001L /*����Ϣ���е�KEYֵ*/
#define WKEY 0x9002L /*д��Ϣ���е�KEYֵ*/
#define MSGFLG 0666 /*��Ϣ���з���Ȩ��*/
#define IPC_WAIT 0 /*�ȴ���ʽ��include�ļ���δ����*/
int rmsqid; /*����Ϣ���б�ʶ��*/
int wmsqid; /*д��Ϣ���б�ʶ��*/
struct msgbuf {
long mtype;
char mtext[200];
} buf;
if ((rmsqid=msgget(RKEY,MSGFLG|IPC_CREAT))<0) {
printf("get read message queue failed\n");
exit(1);
}
if ((wmsqid=msgget(WKEY,
MSGFLG|IPC_CREAT|IPC_TRUNC))<0) {
printf("get write message queue failed\n");
exit(2);
}
if (msgrcv(rmsqid,&buf,sizeof(struct msgbuf)-sizeof(long),
0L,IPC_WAIT)>0)
printf("get %ld type message from queue:%s\n",
buf.mtype,buf.mtext);
else {
printf("get message failed\n");
exit(3);
}
buf.mtype=3L
if (msgsnd(wmsqid,&buf,sizeof(struct msgbuf)-sizeof(long),
IPC_NOWAIT)>0)
printf("send message OK\n");
else {
printf("send message failed\n");
exit(4);
}
msgctl(wmsqid,IPC_RMID,(struct msqid *)NULL);
17.shmat()
����:���ӹ����ڴ�IJ���.
�﷨:#include
#include
#include
void *shmat(shmid,shmaddr,shmflg)
int shmid;
void *shmaddr;
int shmid;
˵��:����shmidָʾ�Ĺ����ڴ����ӵ����ý��̵����ݶ���.�����ӵĶη��ڵ�ַ,�õ�ַ������׼��ָ��:
. ��shmaddr����(void *)0,������ӵ���ϵͳѡ��ĵ�һ�����õĵ�ַ��.
. ��shmaddr������(void *)0ͬʱ(shmflg&SHM_RND)ֵΪ��,������ӵ���(shmaddr-(shmaddr%SHMLBA))�����ĵ�ַ��.
. ��shmaddr������(void *)0ͬʱ(shmflg&SHM_RND)ֵΪ��,������ӵ���shmaddrָ���ĵ�ַ��.
��(shmflg&sSHM_RDONLY)Ϊ�沢�ҵ��ý����ж�����,�����ӵĶ�Ϊֻ��;����,��ֵ��Ϊ���ҵ��ý����ж�дȨ��,�����ӵĶ�Ϊ�ɶ�д��.
����ֵ:�����óɹ��򷵻ر����ӵĹ����ڴ�������ݶ��ϵ���ʼ��ַ.
���򷵻�ֵΪ-1.
18.shmdt()
����:�Ͽ������ڴ����ӵIJ���.
�﷨:#include
#include
#include
void *shmdt(shmaddr)
void *shmaddr;
˵��:��ϵͳ���ý���shmaddrָ���Ĺ����ڴ�δӵ��ý��̵����ݶ������ȥ.
����ֵ:�����óɹ��򷵻�ֵΪ0,���򷵻�ֵΪ-1.
19.shmget()
����:ȡ�ù����ڴ��
�﷨:#include
#include
#include
int shmget(key,size,shmflg)
key_t key;
int size,shmflg;
˵��:��ϵͳ���÷���key��صĹ����ڴ��ʶ��.
�����ڴ��ʶ����������ݽṹ������size�ֽڵĹ����ڴ������������,Ҫ��������ʵ����:
. ����key����IPC_PRIVATE.
. ����keyû����صĹ����ڴ��ʶ��,ͬʱ(shmflg&IPC_CREAT)ֵΪ��.
�����ڴ洴��ʱ,�����ɵĹ����ڴ��ʶ��ص����ݽṹ����ʼ������:
. shm_perm.cuid��shm_perm.uid����Ϊ���ý��̵���ЧUID.
. shm_perm.cgid��shm_perm.gid����Ϊ���ý��̵���ЧGID.
. shm_perm.mode����Ȩ�ޱ���λ����Ϊshmflg����Ȩ�ޱ���λ.
. shm_lpid,shm_nattch,shm_atime,shm_dtime����Ϊ0.
. shm_ctime����Ϊ��ǰϵͳʱ��.
. shm_segsz����Ϊ0.
����ֵ:�����óɹ��򷵻�һ����0ֵ,��Ϊ�����ڴ��ʶ��,���򷵻�ֵΪ-1.
20.shmctl()
����:�����ڴ���Ʋ���.
�﷨:#include
#include
#include
int shmctl(shmid,cmd,buf)
int shmid,cmd;
struct shmid_ds *buf;
˵��:��ϵͳ�����ṩһϵ�й����ڴ���Ʋ���.������Ϊ��cmdָ��.
����Ϊcmd����Чֵ:
. IPC_STAT:��shmid��ص����ݽṹ�и���Ԫ�صĵ�ǰֵ������bufָ��Ľṹ��.
. IPC_SET:��shmid��ص����ݽṹ�е�����Ԫ������Ϊ��bufָ��Ľṹ�еĶ�Ӧֵ.
shm_perm.uid
shm_perm.gid
shm_perm.mode
������ֻ������ЧUID����shm_perm.cuid��shm_perm.uid�Ľ��̻���ЧUID�к���Ȩ�޵Ľ��̲���.
. IPC_RMID:ɾ����shmidָʾ�Ĺ����ڴ�.������ϵͳ��ɾ�����ƻ���ص����ݽṹ.
������ֻ������ЧUID����shm_perm.cuid��shm_perm.uid�Ľ��̻���ЧUID�к���Ȩ�޵Ľ��̲���.
����ֵ:�����óɹ��򷵻�0,���򷵻�-1.
����:���������������й����ڴ����ϵͳ����:
#include
#include
#include
#define SHMKEY 74
#define K 1024
int shmid;
cleanup()
{
shmctl(shmid,IPC_RMID,0);
exit(0);
}
main()
{
int *pint;
char *addr1,*addr2;
extern char *shmat();
extern cleanup();
for (i=0;i<20;i++)
signal(i,cleanup);
shmid=shmget(SHMKEY,128*K,0777|IPC_CREAT);
addr1=shmat(shmid,0,0);
addr2=shmat(shmid,0,0);
printf("addr1 0x%x addr2 0x%x\n",addr1,addr2);
pint=(int*)addr1;
for (i=0;i<256;i++)
*pint++=i;
pint=(int*)addr1;
*pint=256;
pint=(int*)addr2;
for (i=0;i<256;i++)
printf("index %d\tvalue%d\n",i,*pint++);
shmdt(addr1);
shmdt(addr2);
pause();
}
����:�ź������Ʋ���.
�﷨:#include
#include
#include
int semctl(semid,memnum,cmd,arg)
int semid,semnum,cmd;
union semun {
int val;
struct semid_ds *buf;
ushort *array;
}arg;
˵��:��ϵͳ�����ṩ��һ���ź������Ʋ���,������Ϊ��cmd����,��Щ�����Ƕ���semid��semnumָ�����ź�����������.ÿ�����Ҫ������Ӧ��Ȩ�޼���:
. GETVAL:����semval��ֵ,Ҫ���ж�Ȩ��.
. SETVAL:����semval��ֵ��arg.val��.������ɹ�ִ�к�,semadj��ֵ��Ӧ�����н��̵��ź���ȫ�������,Ҫ�����޸�Ȩ��.
. GETPID:����sempid��ֵ,Ҫ���ж�Ȩ��.
. GETNCNT:����semncnt��ֵ,Ҫ���ж�Ȩ��.
. GETZCNT:����semzcnt��ֵ,Ҫ���ж�Ȩ��.
����������һ���ź����еĸ���semval�ϲ���:
. GETALL:����ÿ��semval��ֵ,ͬʱ������ֵ������arg.arrayָ���������.��������ɹ�ִ�к�,semadj��ֵ��Ӧ�����н��̵��ź���ȫ�������,Ҫ�����޸�Ȩ��.
. SETALL:������arg.arrayָ����������ø���semvalֵ.��������ɹ�ִ�к�,semadj��ֵ��Ӧ�����н��̵��ź���ȫ�������,Ҫ�����޸�Ȩ��.
�����������κ�����¶�����Ч��:
. IPC_STAT:����semid��ص����ݽṹ�ĸ�����Ա��ֵ������arg.bufָ��Ľṹ��.Ҫ���ж�Ȩ��.
. IPC_SET:����semid������ݽṹ�����³�Ա,�������ݴ�arg.bufָ��Ľṹ�ж�ȡ:
sem_perm.uid
sem_perm.gid
sem_perm.mode
������ֻ������ЧUID����sem_perm.cuid��sem_perm.uid�Ľ��̻���ЧUID�к���Ȩ�޵Ľ��̲���.
. IPC_RMID:ɾ����semidָ�����ź�����ʶ������ص�һ���ź��������ݽṹ.������ֻ������ЧUID����sem_perm.cuid��sem_perm.uid�Ľ��̻���ЧUID�к���Ȩ�޵Ľ��̲���.
����ֵ:�����óɹ�,�����cmd��������ֵ:
GETVAL:semval��ֵ.
GETPID:sempid��ֵ.
GETNCNT:semncnt��ֵ.
GETZCNT:semzcnt��ֵ.
����:0.
������ʧ���򷵻�-1.
����:ȡ��һ���ź���.
�﷨:#include
#include
#include
int semget(key,nsems,semflg)
key_t key;
int nsems,semflg;
˵��:���غ�key��ص��ź�����ʶ��.
��������ʵ����,�����ź�����ʶ��,��֮��ص�semid_ds���ݽṹ��һ��nsems�ź�����������:
. key����IPC_PRIVATE.
. ϵͳ�ڻ�û����key��ص��ź���,ͬʱ(semflg&IPC_CREAT)Ϊ��.
����ʱ�µ��ź�����ص�semid_ds���ݽṹ����ʼ������:
. �ڲ���Ȩ�޽ṹ,sem_perm.cuid��sem_perm.uid���õ��ڵ��ý��̵���ЧUID.
. �ڲ���Ȩ�޽ṹ,sem_perm.cgid��sem_perm.gid���õ��ڵ��ý��̵���ЧGID.
. ����Ȩ�ޱ���λsem_perm.mode���õ���semflg�ķ���Ȩ�ޱ���λ.
. sem_otime���õ���0,sem_ctime���õ��ڵ�ǰϵͳʱ��.
����ֵ:�����óɹ�,�򷵻�һ��0ֵ,��Ϊ�ź�����ʶ��;���򷵻�-1.
����:�ź�������.
�﷨:#include
#include
#include
int semop(semid,sops,nsops)
int semid;
struct sembuf *sops;
unsigned nsops;
˵��:��ϵͳ��������ִ���û��������һ���ź����ϲ�������Ϊ����.
�����ź�����semid���.
����sopsΪһ���û�������ź��������ṹ����ָ��.
����nsopsΪ�������Ԫ�ظ���.
�����ÿ��Ԫ�ؽṹ�������³�Ա:
sem_num; /* �ź����� */
sem_op; /* �ź������� */
sem_flg; /* ������־ */
�ɱ�ϵͳ���ö����ÿ���ź��������������semid��sem_numָ�����ź�����.����sem_opָ�������ź���������һ��:
. ��sem_opΪһ�������ҵ��ý��̾����޸�Ȩ��,���������֮һ���ᷢ��:
* ��semval��С��sem_op�ľ���ֵ,��sem_op�ľ���ֵ����ȥsemval��ֵ.��(semflg&SEM_UNDO)Ϊ����sem_op�ľ���ֵ���ϵ��ý���ָ�����ź�����semadjֵ.
* ��semvalС��sem_op�ľ���ֵͬʱ(semflg&IPC_NOWAIT)Ϊ��,�򱾵�����������.
* ��semvalС��sem_op�ľ���ֵͬʱ(semflg&IPC_NOWAIT)Ϊ��,��ϵͳ���ý�����ָ���ź�����ص�semncntֵ(��һ),�����ý��̹���ֱ����������֮һ������:
(2).���ý��̵ȴ���semid�ѱ�ϵͳɾ��.
(3).���ý��̲������ź�,��ʱ,ָ���ź�����semncntֵ��һ,���ý���ִ���жϷ������.
. ��sem_opΪһ��ֵ,ͬʱ���ý��̾����޸�Ȩ��,sem_op��ֵ����semval��ֵ,��(semflg&SEM_UNDO)Ϊ��,��sem_op��ȥ���ý���ָ���ź�����semadjֵ.
. ��sem_opΪ0,ͬʱ���ý��̾��ж�Ȩ��,�������֮һ���ᷢ��:
* ��semvalΪ0,��ϵͳ������������.
* ��semval������0��(semflg&IPC_NOWAIT)Ϊ��,��ϵͳ������������.
* ��semval������0��(semflg&IPC_NOWAIT)Ϊ��,��ϵͳ���ý���ָ���ź�����semzcntֵ��һ,�����ý��̹���ֱ���������֮һ����:
(2).���ý��̵ȴ���semid�ѱ�ϵͳɾ��.
(3).���ý��̲������ź�,��ʱ,ָ���ź�����semncntֵ��һ,���ý���ִ���жϷ������.
����ֵ:���óɹ��򷵻�0,���򷵻�-1.
����:���������������ź�������������ϵͳ����:
#include
#include
#include
#define SEMKEY 75
int semid;
unsigned int count;
* struct sembuf {
* unsigned short sem_num;
* short sem_op;
* short sem_flg;
* }*/
struct sembuf psembuf,vsembuf; /*P��V����*/
cleanup()
{
semctl(semid,2,IPC_RMID,0);
exit(0);
}
main(argc,argv)
int argc;
char *argv[];
{
int i,first,second;
short initarray[2],outarray[2];
extern cleanup();
if (argc==1) {
for (i=0;i<20;i++)
signal(i,clearup);
semid=semget(SEMKEY,2,0777|IPC_CREAT);
initarray[0]=initarray[1]=1;
semctl(semid,2,SETALL,initarray);
semctl(semid,2,GETALL,outarray);
printf("sem init vals %d%d \n",
outarray[0],outarray[1]);
pause(); /*˯�ߵ���һ�����ж��źŻ���*/
}
else if (argv[1][0]=='a') {
first=0;
second=1;
}
else {
first=1;
second=0;
}
semid=semget(SEMKEY,2,0777);
for (count=0;;xcount++) {
semop(semid,&psembuf,1);
semop(semid,&psembuf,1);
printf("proc %d count %d\n",getpid(),count);
semop(semid,&vsembuf,1);
semop(semid,&vsembuf,1);
}
}
24.sdenter()
����:�������ݶ�ͬ������,����.
�﷨:#include
int sdenter(addr,flags)
char *addr;
int flags;
˵��:����ָʾ���ý��̼������Է��ʹ������ݶ��е�����.
����addrΪ��һ��sdget()���õ���Ч������.
��ִ�еĶ���ȡ����flags��ֵ:
. SD_NOWAIT:����һ�������Ѷ�ָ���Ķε��ñ�ϵͳ�����һ�û�е���sdleave(),���Ҹöβ�����SD_UNLOCK��־����,����ý��̲��ǵȴ��öο��ж����������ش�����.
. SD_WRITE:ָʾ���ý���ϣ���������ݶ�д����.��ʱ,��һ��������SD_RDONLY��־���Ӹù������ݶ��򲻱�����.
����ֵ:���óɹ��򷵻�0,���򷵻�-1.
25.sdleave()
����:�������ݶ�ͬ������,����.
�﷨:#include
int sdleave(addr,flags)
char *addr;
˵��:����ָʾ���ý���������޸Ĺ������ݶ��е�����.
����ֵ:���óɹ��򷵻�0,���򷵻�-1.
26.sdget()
����:���ӹ������ݶε����ý��̵����ݿռ���.
�﷨:#include
char *sdget(path,flags,size.mode)
char *path;
int flags;
long size;
int mode;
˵��:��ϵͳ���ý��������ݶ����ӵ����ý��̵����ݶ���,���嶯����flags��ֵ����:
. SD_RDONLY:���ӵĶ�Ϊֻ����.
. SD_WRITE:���ӵĶ�Ϊ�ɶ�д��.
. SD_CREAT:����path�����Ķδ����Ҳ���ʹ����,����־������ͬ���ȴ���һ������ͬ,����,�öθ���size��mode��ֵ���̴���.�ԶεĶ�д����Ȩ�޵��������mode����Ȩ��,������һ���ļ�����ͬ.�α���ʼ��Ϊȫ0.
. SD_UNLOCK:���ô˱�־�����ö�,�������ж������ͬʱ����(�ڶ�д��)�ö�.
����ֵ:�����óɹ��򷵻����ӵĶε�ַ.���򷵻�-1.
27.sdfree()
����:���������ݶδӵ��ý��̵����ݿռ��жϿ�����.
�﷨:#include
int sdfree(addr)
char *addr;
˵��:��ϵͳ���ý��������ݶδӵ��ý��̵����ݶε�ָ����ַ�з���.
�����ý��������sdenter()�ĵ���,��δ����sdleave()�͵��ñ�ϵͳ����,��sdleave()���Զ�����,Ȼ����������õĹ���.
����ֵ:�����óɹ��򷵻����ӵĶε�ַ.���򷵻�-1.
28.sdgetv()
����:ͬ���������ݷ���.
�﷨:#include
int sdgetv(addr)
char *addr;
˵��:����ͬ��Э������ʹ�ù������ݶεĽ���.����ֵΪ�������ݶεİ汾��.���н��̶Ըö���sdleave()����ʱ,�汾�Żᱻ�޸�.
����ֵ:�����óɹ�,�򷵻�ָ���������ݶεİ汾��,���򷵻�-1.
29.sdwaitv()
����:ͬ���������ݷ���.
�﷨:#include
int sdwaitv(addr,vnum)
char *addr;
int vnum;
˵��:����ͬ��Э������ʹ�ù������ݶεĽ���.����ֵΪ�������ݶεİ汾��.���ý��̻�˯��ֱ��ָ���εİ汾�Ų��ٵ���vnum;
����ֵ:�����óɹ�,�򷵻�ָ���������ݶεİ汾��,���򷵻�-1.
30.sbrk()
����:�޸����ݶοռ����.
�﷨:char *sbrk(incr)
int incr;
˵��:���ڶ�̬�޸ĵ��ý������ݶεĿռ����.���̽����ý��̵ķֶ�ֵ������һ�����ʴ�С�Ŀռ�.�ֶ�ֵΪ���ݶ����һ�η���ĵ�ַ.Ҫ����Ŀռ�����������ڷֶ�ֵ��������.�·���Ŀռ�����Ϊ0.����ͬ���ڴ�ռ����·����ͬһ������,��ռ�����ݲ�ȷ��.
����ֵ:���ɹ������򷵻�ֵΪ0,���򷵻�-1.
����:���������������������ݿռ����������ϵͳ����:
char * area1;
char buf[21];
int v;
area1=sdget("/tmp/area1",SD_WRITE|SD_CREAT,640,0777);
if ((int)area1==-1) {
printf("get share data segment area1 failed\n");
exit(1);
}
v=sdgetv(area1);
*��,���������ʲ��������ݶμ�д��*/
sdenter(area1,SD_WRITE);
strcpy(area1,"aaaaaaaaaa");
sdleave(area1);
sdwaitv(area1,v);
sdenter(area1,SD_WRITE);
memcpy(buf,area1,20);
sdleave(area1);
printf("the data now in area1 is [%s]\n",buf);
31.getenv()
����:ȡ��ָ����������ֵ.
�﷨:#include
#include char *getenv(name)
char *name;
˵��:��ϵͳ���ü�黷���ַ���(��ʽ��name=value),�����ҵ���ָ�����ֵĻ���ֵ��,����ָ��value�ַ�����ָ��.���򷵻ؿ�ָ��.
����ֵ:��ǰ��.
����:char * value;
value=getenv("HOME");
printf("HOME = [%s]\n",value);
32.putenv()
����:�޸Ļ����ӻ���ֵ.
�﷨:#include
int putenv(string)
char *string;
˵��:����stringָ��һ���ַ���,��ʽ����:
name=value
��ϵͳ���ý���������name����ֵvalue,�޸Ļ�����һ����������,�ַ���string��Ϊ������һ����.
����ֵ:��putenv()����ȡ�ú��ʵ��ڴ�ռ��򷵻ط�0ֵ,���򷵻�0.
����:/*�����̴���*/
putenv("HOME=/home/abcdef");
putenv("PATH=/bin");
if (fork()>0)
exit(0); /*�������˳�����*/
setpgrp();
char * value1;
value1=getenv("HOME");
value2=getenv("PATH");
printf("HOME=[%s],PATH=[%s]\n",value1,value2);
��.����̱�̼���
1.��Ҫ����ṹ
(1)�¼����ط�ʽ
����Ӧ�ó���������������ʽ,���������������Ϊ����¼�����,���¼�����ʱ,��������һ���µĽ���������������,��������ɺ�Ϳ������ӽ����˳�ϵͳ.���ִ�����ʽһ�㲻Ҫ��Ϣ����.
(2)��ϢЭ����ʽ
����Ӧ�ó�����Ҫ�ɶ������Э���������,�����������Щ����,ͨ����Ϣ�ڽ��̼�Ĵ���,ʹ�����������໥Э��,��ͬ�������.���ִ�����ʽһ������fork()���ɼ������̺�,��exec()�������������ļ�,ʹ�ò�ͬ�ij���ͬʱ��ϵͳ������.Ȼ��ͨ��IPC���ƴ�����Ϣ,ʹ����������Э������.
2.ѡ������ֲ��
(1)�¼���ʼ����
��Ӧ���¼����ط�ʽ�ij���ṹ.�ؼ��������Ժ��ַ�ʽѡ���¼��ij�ʼ������,�������������Ľ�����Ϣ.���س������յ�����Ϣ�����Ϊ��һ���¼���ʼ,����Բ���һ���ӽ��̴������������:���ս�����Ϣ,������,���ͷ��ؽ�����Ϣ,�ر����ӵ�,��ɺ��ӽ����˳�ϵͳ.
(2)��������������
��Ӧ����ϢЭ����ʽ�ij���ṹ.���س���ֻ�������ɼ����ӽ���,�����ӽ��̷ֱ����exec()����ͬ��ִ���ļ������ڴ�����,���س������������е��ӽ��̺󼴿��˳�ϵͳ,���ӽ��������ڴ�������.
3.���̼��ϵ����
(1)���ӽ��̹�ϵ
. �����鴦��
������ĸ�����������,��ϵͳ����ʱ,��һ��������init,�������ŵ��ڽ��̺�,���������������ӽ��̵Ľ������Ҳ��ͬ,�ӽ��̵��ӽ���Ҳ�̳иý������,����,��init�����ɵ������ӽ��̶�����ͬһ��������.����,ͬһ��������ĸ��ӽ��̿������ź������໥ͨѶ,�������������ӽ����˳�ϵͳ,���ӽ��̻��Ϊһ���¶�����,���ܱ�ɽ�������.�Ӷ�ʹ���ӽ������䲻"Ը��"��������˳�����.Ϊ����������,�ӽ��̿����Լ����һ���µĽ�����,������setpgrp()��ԭ�����������ϵ,����һ���µĽ�����,������������Ľ��̺���ͬ.����,�������˳����к�Ͳ���Ӱ���ӽ��̵ĵ�ǰ����.
. �ӽ����źŴ���
����,�����������������ܽ����һ������,���ӽ������˳�����ʱ,�Ҳ����丸����(���������˳�,�ӽ��̵ĸ����̺Ÿ�Ϊ1).�����ӽ����˳��źź�û�и�����������Ӧ����,���ӽ��̾Ͳ�������ȫ�˳�����,���ܽ��뽩��״̬.���Ը������ڲ����ӽ���ǰ��������ӽ��̷����źŵĴ���,�����ӽ���,�ڸ������˳����к�,�ӽ��̷���������̷����źŵĴ�������ϵͳ����ȱʡ����,�ӽ��̾Ϳ��������˳�.
(2)�ֵܽ��̹�ϵ
. �������̺�
������ϢЭ����ʽ�ij�����˵,���ֵܽ��̼�ʮ����Ҫ�໥�˽���̺�,�Ա����źŴ�������.�ȽϺ����ķ����Ǹ���������һ�������ڴ�Ŀռ�,ÿ���ӽ��̶�������ʱ�ڹ����ڴ��������Լ��Ľ��̺�.����,��һ���ӽ���Ҫ����һ���ӽ��̷����źŻ�����Ϊ����ԭ����Ҫ֪����һ���ӽ��̺�ʱ,�Ϳ����ڹ����ڴ��з��ʵõ�����Ҫ�Ľ��̺�.
4.���̼�ͨѶ����
(1)�����ڴ���Ҫ������
���ڹ����ڴ������ʱû�д���������,�ʵ��ж�������ڷ��ʹ����ڴ�ʱ�ͻ��������.��:һ�������޸�һ�������ڴ浥Ԫ,��һ�������ڶ��ù����ڴ浥Ԫʱ�����е��������������޸ĸõ�Ԫ,�Ӷ���Ӱ��������ȷ��.ͬʱ���з�ʱϵͳ�Ը������Ƿ�ʱ��Ƭ������,���ܻ�����ͬ����ȷ������.������ϵͳ��������ʽ,���ж�����д������֤���ݵ�һ����.����û�������ƵĹ����ڴ�,������ź���һ��ʹ��,���ܱ�֤�����ڴ����ȷ����.
(2)��Ϣ������Ҫ�ؼ�ֵ
��Ϣ���еIJ���
�ڽ���ȡ����Ϣ���еķ���Ȩ�޺�ͱ���ͨ���ؼ�ֵ������Ϣ�����е���ͬ�ؼ�ֵ����Ϣ,д��Ϣʱ������Ϣ�ؼ�ֵ.��������ͨ����ͬ�Ĺؼ�ֵ���ֲ�ͬ�Ľ���,ʹ����ͬһ����Ϣ���п��Թ�������Ϣͬʱʹ�ö�����ͻ.������Ϣ����ʹ�ùؼ�ֵ0���ȡ��Ϣ�����е�һ����Ϣ,������ؼ�ֵ���.
(3)�ź���Ҫ�źŴ����������ú�������
���û�������Ҫ��ij���ж����Լ�����Ĵ���ʱ,�����Լ������жϴ�������,�������жϴ�����������ж������.����,�û��������յ����жϺ�,�������û�����ĺ���,������ɺ��û����̴ӱ��жϴ���������(���û�������жϺ���û�г����������˳����еȻ�ı�����ָ���ַ��ϵͳ����).���ж��źű�������,���жϵĴ���������ָ����ϴ�ȱʡ�������������DZ����û����庯��,�����û�������жϴ���������һ�㶼�ٶ�����жϺͺ����Լ��Ĺ���.
(4)IPC��Ȩ������
����Ϣ����,�����ڴ���ź����ķ���ʱ���û�����Ȩ������,��ͬ���ļ��ķ���Ȩ�޵�������(777��ʾrwxrwxrwx),������ipcs���ɿ�����ϵͳ�����ɵ���Ϣ����,�����ڴ���ź����ķ���Ȩ��.������Ҳ�������ļ�����Ȩ��.ֻ��ִ��λ��Ч.
�������ܵ����ļ���ʽ�����ڴ�����ϵͳ�ļ��ķ�ʽ�������û��ķ���Ȩ��.������ls -l���Կ���������ϵͳ�ļ���ʽ���ڲ����з���Ȩ��ֵ,�����Կ��������ܵ����ļ�����Ϊp,�ļ���ʽ�����ڴ���ļ�����Ϊs.
(5)�ź��ж϶�ϵͳ����һ����Ч
ϵͳ�����ϵͳ����ʱ�Ϳ������жϴ�������.���������е�һ��ϵͳ����ʱ�������ж�,����̽�����жϴ���,������ɺ�,���̻�������ϵͳ���ö�������һ������ָ��.
Ӧ��ע������жϷ�����ϵͳ����һ���������ӳ������һ��.����һ��������һ���ӳ��򱻵���ǰ�����˳�ʱ�ж�,�����ӳ������յ���ʱ�ж�,ϵͳ�ڴ����곬ʱ�жϺ���Ŵ������ӳ����жϵ�ϵͳ����֮���ָ��,�����Ǵӵ��ø��ӳ�����ָ��ĺ�һ��ָ���������.
(6)����IPC��ʽ���ص�
. ��Ϣ����:
ͨ����Ϣ����keyֵ�����������Ϣ����.
�κν���ֻҪ�з���Ȩ�޲�֪��key���ɷ�����Ϣ����.
��Ϣ����Ϊ�ڴ�鷽ʽ���ݶ�.
��Ϣ�����е���ϢԪ�س��ȿ�Ϊϵͳ���������ڵ��κγ���.
��ϢԪ������Ϣ���ͷ���,����ʷ�ʽΪ�����ͷ���.
��һ�ζ�д����ǰ������ȡ����Ϣ���б�ʶ��,������Ȩ.���ʺ�������ʹ�ϵ.
��Ϣ�����е�ij����Ϣ�����󼴴Ӷ�����ɾ��.
��Ϣ���еķ��ʾ߱������ƴ���,��һ�������ڷ���ʱ��һ�����̲��ܷ���.
����ʱҪע��ϵͳ��Դ��Ч��.
��Ȩ������ʱ,��Ϣ���е���Ϣ������˫���.
. �����ڴ�
ͨ�������ڴ�keyֵ��������ɹ����ڴ�.
�κν���ֻҪ�з���Ȩ�޲�֪��key���ɷ��ʹ����ڴ�.
�����ڴ�Ϊ�ڴ�鷽ʽ�����ݶ�.
�����ڴ��е����ݳ��ȿ�Ϊϵͳ���������ڵ��κγ���.
�����ڴ�ķ���ͬ����ķ��ʷ�ʽ��ͬ.
��ȡ�ù����ڴ��ʶ���������ڴ���������ݶ����Ӻ󼴿ɿ�ʼ��֮���ж�д����,�����в������֮�����������ڴ�ͽ������ݶ��������,�����ȫ�������ڴ���ʹ���.
�����ڴ��е����ݲ��������ݱ����̶�ȡ����ʧ.
�����ڴ�ķ��ʲ��߱������ƴ���,��������̿���ͬʱ����ͬһ�������ڴ��ͬһ�����ݵ�Ԫ.
�����ڴ��ʹ����ú��ź���һ�����,�Ծ߱�������,��֤���ݵ�һ��.
��Ȩ������ʱ,�����ڴ����Ϣ������˫���.
. �ź���
��������������,���ⷢ�����ݲ�һ��.
û��������������Ϣ.
����Ҫ�и��ӹ�ϵ���ֵܹ�ϵ.
. �ź�
�ź���ϵͳ���ж���.
�źŵķ���ֻҪ��Ȩ�޼��ɽ���.
�ź���һ���¼���������Ϣ��־,������������Ϣ.
�źŲ��߱����ݿ�.
�źŵĴ��������û��Լ�����.
�źſ������û�����,����ϵͳ(������Ӳ��ԭ��)�ȷ���.
��һЩ�ź��Dz��ɱ����ε�.
�ź��жϵ���ϵͳ���ü��ĺ���.
�źŵ���Ϣ�����ǵ����.
. �ܵ�
��Ϊϵͳ�������豸�ļ�,�������ڴ淽ʽ��,Ҳ��������淽ʽ��.
�ܵ��Ĵ���һ���ǵ����,��һ���ܵ�һ��,����������Ҫ��˫��������Ҫ2���ܵ�.�ܵ�����ʱ��������,һ��Ϊ��,һ��Ϊд,��������ҪЭ����,һ�����̴Ӷ�����,��һ��������д��д.
�ܵ��Ķ�дʹ�����豸�Ķ�д����,��:read(),write.
�ܵ��Ĵ��䷽ʽΪFIFO,����ʽ��.������Ϣ���п��԰����Ͷ�ȡ.
* �����ܵ�
һ��Ϊϵͳ�����ļ���ʽ,ʹ�õĽ���֮�䲻һ��Ҫ�и��ӹ�ϵ���ֵܹ�ϵ.
* �����ܵ�
һ��Ϊ�ڴ淽ʽ,ʹ�õĽ���֮��һ��Ҫ�и��ӹ�ϵ���ֵܹ�ϵ.
. �ļ�
�ļ�����򵥵Ľ��̼�ͨѶ��ʽ,ʹ���ⲿ������Ϊ�н�.
�����鷳,��λ����.
���̶ܳȵ�.
���׳������ݲ�һ������.
ռ��Ӳ�̿ռ�.
ֻҪ��Ȩ�޲�֪���ļ���,�κν��̶��ɶ�֮����.
* ���⴦��
Ϊ������ֱ�������,�ڴ��ļ�,ȡ���ļ���������,����unlink()��Ӳ���ϵ��ļ�·����ɾ��,��Ӳ���Ͼ�û���ļ�������.���ڽ����и��ļ��������Ǵ򿪵�,�ɸý������ɵ��ӽ����и��ļ�������Ҳ�Ǵ򿪵�,�Ϳ�������ϵͳ�ṩ���ļ������������̼�ͨѶ,�����ǽ��̼�����и��ӹ�ϵ���ֵܹ�ϵ.
. ��������
��Ϣ�Ĵ���һ���ǵ����,���ɸ��������ӽ��̴���.
�����ԽϺ�.
˫������Լ������������.
ֻռ�ñ����̺��ӽ��̵Ļ���������.
. �������ݶ�
�����Ƚϸ���.
ռ��Ӳ�̿ռ�,����ϵͳ�����ļ�.
���������빲���ڴ�������.
. ��
�ļ��������IJ�����ʽ.
���̼䲻һ��Ҫ�и��ӹ�ϵ���ֵܹ�ϵ.
˫������Ϣ.
���̸�������socket,��bind()����.
����������ܵ�������.
�����ΪTCP/IP�����̷�Χ,�ڱ������ݲ�����.
. ���ݲ���
��Ϣ�Ĵ���һ���ǵ����, ���ɸ��������ӽ��̴���.
�����Խϲ�,�ý����б�������ʾ����.
˫������Լ������λ��.
ֻռ���ӽ��̵IJ�����.
��������

���� 4 ������

  1. cxtt228 �� 2006-07-28 19:25:15����:

    ǿ��֧��

  2. shale �� 2006-07-26 23:48:58����:

    ��LINUX��ͬС�죬���ڶ�ת��LINUX�����Ķ���

  3. aya2443 �� 2006-07-26 17:20:04����:

    dddddd

  4. wuvco �� 2006-07-26 15:19:01����:

    ��ſ�����