Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17100
  • 博文数量: 7
  • 博客积分: 187
  • 博客等级: 入伍新兵
  • 技术积分: 100
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-01 13:00
文章分类

全部博文(7)

文章存档

2012年(7)

我的朋友

分类: LINUX

2012-09-30 09:54:18

int creat(const char *filename,mode_t mode);创建一个文件
S_IRUSR S_IWUSR  S_XWUSR
int open(const char *pathname,int flags,mode_t mode)
pathname:要打开的文件名(包含路径),不带就是当前位置
flag:
O_RDONLY  O_WRONLY  O_RDWR  O_APPEND  O_CREAT  O_NOBLOCK
只读       只写      读写       追加    创建    非阻塞
int close(fd)  fd:文件描述符,
int read(int fd,const void *buf,size_t length)返回值为实际读取的字节数
int write(int fd,const void *buf,size_t length)
int lseek(int fd,offset_t offset ,int whence)将文件读写指针相对whence移动offset个字节。成功返回
文件指针相对于文件头的位置
whence:SEEK_SET相对文件开头 SEEK_CUR相对文件读写指针的当前位置SEEK_EN相对文件末尾
#inlcude
int access(const char* pathname,int mode)
mode:R_OK
#include
进程是一个具有一定独立功能的程序的一次运行活动(动态的程序)具有:动态性,并发性,独立性,异步>性(执行顺序没有影响)
进程ID(PID):标识进程的唯一数字 父进程的ID(PPID)启动进程的用户(UID)
进程互斥:
进程调度:按一定算法,从一组待运行的进程中选出一个来占有CPU运行
调度算法:1先来先服务  2短进程优先 3高优先级优先 4时间片轮法
死锁:多个进程因竞争资源而形成的僵局,谁也不放谁
#include
#include pid_t getpid(void)获取本当前运行的ID pid_t getppid(void) 获取父进程的ID
#include pid_t fork(void) 创建子进程fork能返回两次,三种返回值,代码是共享
1 在父进程中,fork返回拳创建的子进程的PID
2在子进程中,fork返回0
3如果出现错误,fork返回一个负值
pid_t wait(int *status)阻塞进程,直到有一个进程退出
一。进程间通信
因为1一个进程需要将它的数据发送给另一个进程  2资源的共享  3事件的通知  4进程控制


管道通信
int pipe(int filedis[2])创建管道  当一个管道建立时,filedis[0]用于读 头
管道关闭
要在fork之前创建一个管道
有名管道任意进程间都可以用  无名管道只能在父子进程之间
#include  #include
int mkfifo(const char *pathname,mode_t mode)
pathname:FIFO文件名  mode:属性
信号通信
1当用用户按某些按键时,产生信号
2硬件异常
3里程用kill函数将信号发送给另一个进程
4信号类型  SIGKILL该信号结束接收信号的进程 SIGSTOP(ctrl-z) SIGHUP从终端上发出的结束信号 SIGINT(Ctrl-c) SIGTERM(kill命令发出的信号) SIGCHLD

信号处理
1忽略此信号(SIGKILL SIGSTOP 不能忽略)
2执行用户希望的动作
3执行系统默认的动作
信号发送 kill(进程本身也可以发送可以发给别人)和 raise(只能发给自己)
#include  #include
int kill(pid_t pid,int signo)
int raise(int signo)
alarm函数可以设置一个时间值,产生SIGALRM信号。如果不捕捉此信号,则默认动作是终止该进程
#include
unsigned int alarm(unsigned int seconds)经过了指定seconds秒后发送SIGALRM

pause函数使用进程挂起直到捕捉到一个信号。
#include
int pause(void)
只有执行了一个信号,进程挂起才结束

signal响应函数
#include
void *(signal(int signo,void (*func)(int)))(int)
typedef void (*sighandler_t)(int)
sighandler_t signal(int signum,sighandler_t handler)
func可能的值是:SIG_IGN:忽略此信号 SIG_DFL:按系统默认方式处理 3信号处理函数


共享内存是被多个进程共享的一个物理内存
共享内存实现分为两个步骤:
1创建共享内存,使用shmget函数
2将这段创建的共享内存映射到具体的进程空间去,使用shmat函数

int shmget(key_t key,int size,int shmflg)如果成功反回内存标识符
int shmat(int shmid,char *shmadddr,int flag)
shmid :shmget函数返回的共享内存标识符
可以用shmaddr操作内存
解除映射
int shmdt(char *shmaddr)


消息队列
消息队列是一个消息链表,每一个消息队列都有一个键值
#include
#include
key_t ftok(char *pathname,char proj)proj:项目名 不为0才行

打开/创建
#include
#include
#include
int msgget(key_t key,int msgflg)
key:键值,由ftok获得
msgflg:标志位 IPC_CREAT IPC_EXCL存在时返回错误 IPC_NOWAIT无法满足时
返回与键值key相对应的消息队列描述符
key IPC_PRIVATE
发送消息
int msgsnd(int msqid,struct msgbut* msgp,int msgsz,int msgflg)
struct msgbut
{
        long mtype;消息类型
        char mtext[1];消息数据的首地址
}
接收消息
int msgrcv(int msqid,struct msgbuf *msgp,int msgsz,long msgtyp,int msgflg)
在成功地读取了一条消息以后,队列中的这条消息将被删除



线程
线程是调度的最小单位
1资源共享  2纯种间方便的通信机制
多线程接口:需要使用头文件pthread.h  连接时需要使用libpthread.a库 不是linux里面的库编译时要加-lpthread
创建一个线程
#include
int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,void *(*start_rt
n)(void),void *arg)
tidp:线程id  attr:线程属性  start_rtn:线程要执行的函数  arg: start_rtn的参数
 终止线程:
#include
void pthrad_exit(void *rval_ptr)
功能:终止调用线程
rval_ptr:线程退出返回值的指针
线程等待
#include
int pthread_join(pthread_t tid,void **rval_ptr)
rval_ptr:线程退出返回值的指针

线程标识
#include
pthread_t pthread_self(void)
获取线程标识



网络编程基础
通过socket
socket是一种文件描述符i
socket有三种类型
1流式  (SOCK_STREAM)tcp
2数据报 (SOCK_DGRAM)udp
3原始  (SOCK_RAW)

网络地址
struct sockaddr记录网络地址
struct sockaddr
{
        u_short sa_family;协议族 “AF_XXX”
        char sa_data[14];14字节的特定协议地址
}
实际用struct sockaddr_in
{
        short int sin_family;
        unsigned short int sin_port;端口号
        struct in_addr sin_addr;协议特定的地址
        unsigned char sin_zero[8];填0
}
struct in_addr{
        union{
                struct {
                        unsigned char s_b1
        }
}
ip类型转换
int inet_aton(const char *cp,struct in_addr *inp)
char *inet_ntoa(struct in_addr in)

ip与主机名
struct hostent *gethostbyname(const char *hostname)


socket 编程函数
socket 创建一个socket

bind 用于绑定ip地址和端口号到socket

connect
用于与服务器建立连接

listen
设置服务器能处理的最大连接要求

accept
用来等待来自客户端的socket 连接请求

send 发送数据
recv 接收数据


TCP服务器 客户端                                                                      


阅读(711) | 评论(0) | 转发(0) |
0

上一篇:qt移植到mini2440

下一篇:mini2440 mplayer移植

给主人留下些什么吧!~~