linux下编程

1:linux下创建一个文件 int creat(const char *filename ,mode_t mode );

     打开一个文件 int open(const *pathname,int flag,mode_t mode );

    常见的打开方式:o_creat, 创建一个文件,  

2:struct tm
{
  int tm_sec;                   /* Seconds.     [0-60] (1 leap second) */
  int tm_min;                   /* Minutes.     [0-59] */
  int tm_hour;                  /* Hours.       [0-23] */
  int tm_mday;                  /* Day.         [1-31] */
  int tm_mon;                   /* Month.       [0-11] */
  int tm_year;                  /* Year - 1900.  */
  int tm_wday;                  /* Day of week. [0-6] */
  int tm_yday;                  /* Days in year.[0-365] */
  int tm_isdst;                 /* DST.         [-1/0/1]*/

}

3: 计算时间消耗,常用于算法分析-----int gettimeofday(struct time *tv,struct timezone *tz其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果(若不使用则传入NULL即可)。


    

  struct timeval

{

 int tv_sec ; // 秒数

 int  tv_usec;//微妙数

}

4: 睡眠函数sleep(unsigned int senonds) 睡眠多少秒。 usleep(unsigned long usec)  睡眠多少微妙。

5: 进程理论基础:

        狭义定义:进程就是程序的执行过程。

       (1: 进程的特点: !动态性!, 并发性,独立性,异步性(两个进程运行无影响)。

       (2: 进程ID:PID也就是一串数字为进程的唯一标识。

       (3: PPID:父进程的ID,

       (4:启动进程的用户ID:  UID

       (5:操作系统中只允许一个进程访问的资源被称为临界资源。访问临界资源的进程中的代码叫临界区。

       (6:进程的调度:按照一定的算法,从一组运行的进程中选出一个来占有CPU运行  

       (7:调度方式:抢占式,非抢占式。

       (8:算法:先来先服务,短进程优先。

       (9:结构特征:进程由程序、数据和进程控制块三部分组成。

       (10:死锁:多个进程因竞争资源而形成一种僵局,若无外力作用,这些进程都将永远不能再向前推进。

6: 进程程序设计:两个头文件: sys/types.h 和unistd.h   pid_t getpid(void) 获取现在进行 进程的ID。 

7: pid_t fork(void); 从现在的进程中创建一个新的进程。且这两个进程为父子关系。

8: 子进程被创建后会继承父进程的代码。并不会和父进程共享堆栈空间,也就是不会据称更改父进程中的变量的值(fork()中),子进程不会继承父进程的文件锁定和未处理的信号。

    fork()子进程拷贝父进程的数据段

   vfork()子进程共享父进程的数据段。

  fork ()  父子进程的执行次序不确定。

  vfork() 子进程先执行,父进程后执行。

9: exec函数组 启动一个新程序,替换原有的进程,因此现在的PID不会改变。

      execl( const char *path /*给出完整的程序执行路径*/ ,const  char arg,................ //给出执行参数,并以NULL 结尾*/)

10:execlp(const char *file ,const arg..........) 初第一个同上。其路径为环境变量 PATH的值。   

11:pid _t  wait(int *status) 等待子进程退出。

12: POSIX 表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX 是为了读音更像 UNIX)。电气和电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)最初开发 POSIX 标准,是为了提高 UNIX 环境下应用程序的可移植性。

13:重要!{ 

        linux进程间通信方式: 

       1 : 管道(pipe) 有名管道(FIFO); 

       2:信号  (signal)

       3 : 消息队列

       4: 共享内存

       5:信号量 

       6: 套接字(socket)

      } 

14:管道: 单向,先进先出,数据被一个进程读出后,将从被管道中删除。其它进程不会在被读到。

      int pipe(int filedis [2]) 创建一个无名管道,filedis[0] 用于读管道,filedisp[1]用于写管道。

     int  pclose(FIFE *stream);stream 为popen(const char *)所返回的文件指针。 

    在fork()前调用pipe(),否则子进程不会继承文件描述符。 POSIX 表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX 是为了读音更像 UNIX)。电气和电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)最初开发 POSIX 标准,是为了提高 UNIX 环境下应用程序的可移植性

 15:    有名管道 不相关的进程都可以访问,而无名管道只能父子进程可以访问。

   mkfifo(const *pathname,mode_t mode)创建一个有名管道,

16: unsigned int alarm(unsigned int seconds) 设置的时间到了之后给进程本身发送一个时钟信号。

      int pause(void) 使进程等待,只有执行了一个信号处理函数后,挂起才结束。

17:void (*signal(int signo,void (*func)(int)))(int)

       typedef void (*sighandler_t) (int)

       sighandler_t signal(int signum,sighandler_t handler))  

     func   可能的值: 

         SIG_IGN:忽略此信号

     SIGDFL:

  这个符号表示恢复系统对信号的默认处理。

18:下面的情况可以产生Signal:

  1. 按下CTRL+C产生SIGINT
  2.  硬件中断 ,如除0,非法内存访问(SIGSEV)等等
  3. Kill函数可以对进程发送Signal
  4. Kill命令。实际上是对Kill函数的一个包装

  5. 软件中断。如当Alarm Clock超时(SIGURG),当Reader中止之后又向管             道写数据(SIGPIPE),等等

19共享内存的实现:

     1创建共享内存:  int shmget(key_t key, size_t size, int shmflg);

key标识共享内存的键值: 0/IPC_PRIVATE。 当key的取值为IPC_PRIVATE,则函数shmget()将创建一块新的共享内存;如果key的取值为0,而参数shmflg中设置了IPC_PRIVATE这个标志,则同样将创建一块新的共享内存。 

   

      2:char *shmat( int shmid , void *shmaddr , int shmflag );shmat()是用来允许本进程访问一块共享内存的函数。
    int shmid是那块共享内存的ID。
  char *shmaddr是共享内存的起始地址
  int shmflag是本进程对该内存的操作模式。如果是SHM_RDONLY的话,就是只读模式。其它的是读写模式

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

       当*shmaddr 为0则为有系统分配一个内存块。



20:int shmdt(char *shmaddr) 当一个进程不在需要共享内存的时候,需要其把他璁进程地址空间中脱离。


21:消息队列:实质就是好多消息构建成的链表

       1:posix消息队列:

       2:系统V消息队列:

    每个消息队列都有一个键值, key_t ftok(char *pathname, char proj)

  proj 项目名,不为0即可。

22: 线程:

         1:相对于进程线程“节俭“,线程创建不需要新的地址空间。

23:线程清除: pthread_cleanup_push(void (* Rtd)(void*),void *arg);Rtn 清除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值