Linux C编程
文章平均质量分 73
奔跑的路
这个作者很懒,什么都没留下…
展开
-
stat函数与结构体(文件信息)
stat(取得文件状态)相关函数fstat,lstat,chmod,chown,readlink,utime表头文件#include#include定义函数int stat(const char * file_name,structstat *buf);函数说明stat()用来将参数fi转载 2014-08-20 10:09:55 · 656 阅读 · 0 评论 -
FILE 及 文件句柄的理解
当你读或写一个文件时,必须先通知系统,告诉他你的举动,这便是一个打开文件的过程。在这里说写一个文件(w方式),如果文件不存在,便创建一个文件,失败那就不用说拉,如果成功拉呢?系统将怎样管理你的文件(你的文件有可能不只有一个)。这时,文件将返回一个整数值,该值唯一标识这个文件,每个被创建的文件都会有一个唯一标识值,称为文件标识符。(注:r方式不必考虑,他必须通过创建过程) 在c语转载 2014-09-28 09:02:03 · 9188 阅读 · 2 评论 -
浅谈linux中setuid权限 及文件相关知识
1什么是SetUID 我们知道,在linux的命令行下执行“ps -aux”命令时,就会列出当前系统中的所有进程,在其中可以看到每个进程都和用户的真实id关联,实际上,Linux中的每个进程还跟一个称为有效用户id(set User id)紧密关联。前者用于表示该进程由那个用户控制,后者用于为新建立的文件分配所有权,检查文件访问许可等操作,同时有效用户为该文件的所有者。linux系转载 2014-09-30 11:32:07 · 6297 阅读 · 0 评论 -
使用diff命令打补丁详解!
使用diff命令打补丁详解!分类: linux操作系统 2011-08-09 10:359人阅读 评论(0)收藏举报对于开源源码修改过程中的必经阶段:对源码打补丁,总是不够精通,搜索了补丁的原理的详细过程,如下:在移植或版本升级过程中,手动比对(用比对工具)转换是很费力的事情,特别是发生变化的文件非常多的情况下,“制作补丁、打补丁”可以简化这转载 2014-10-30 08:50:54 · 1722 阅读 · 0 评论 -
UNIX实际用户ID和有效用户ID
由于用户在UNIX下经常会遇到SUID、SGID的概念,而且SUID和SGID涉及到系统安全,所以用户也比较关心这个问题。关于SUID、 SGID的问题也经常有人提问,但回答的人一般答得不够详细,加上曾经回答过两个网友的问题,还查了一些资料,决定整理成本文,以供大家参考。限于本人的水平问题,文章中如果有不当之处,请广大网友指正。 一、UNIX下关于文件权限的表示方法和解析SUI转载 2014-10-15 15:00:30 · 936 阅读 · 0 评论 -
回调函数
在看LWIP时,见到用回调函数,再看某老外公司OPC源代码时,见到用回调函数。看我国内某些代码(我公司软件等)时没用到。于是,我对回调函数产生了很大的好奇。以前,我写VC程序时用到过回调函数,但是没有用C语言来使用。最近,看到国外大量的经典代码中广泛使用了回调函数(LWIP、某两个公司的OPC程序等),都是C语言来实现的,而不是VC windows程序中别人实现自己使用的那种。为了弄明白这种函转载 2015-01-07 16:19:09 · 669 阅读 · 0 评论 -
getopt和getopt_long
GNU/Linux的命令行选项有两种类型:短选项和长选项,前者以 '-' 作为前导符,后者以 '--' 作为前导符 。比如有一个命令: $ myprog -a vv --add -b --file a.txt b.txt - -- -e c.txt 在GNU/Linux系统,对这种情况的一种合理解释是: a是短选项,带一个参数vv; add是长选项,无参数; b转载 2014-12-19 10:52:23 · 1142 阅读 · 0 评论 -
源代码阅读方法
分析一个源代码,一个有效的方法是:1、阅读源代码的说明文档,比如本例中的README, 作者写的非常的详细,仔细读过之后,在阅读程序的时候往往能够从README文件中找到相应的说明,从而简化了源程序的阅读工作。2、如果源代码有文档目录,一般为doc或者docs,最好也在阅读源程序之前仔细阅读,因为这些文档同样起了很好的说明注释作用。3、从makefile文件入手,分析源代码原创 2014-12-11 09:50:04 · 998 阅读 · 0 评论 -
Linux下的时间--struct tm, mktime, localtime, strftime
Linux下时间的概念及处理(UTC):称为世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT)。比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。美国是UTC-5。Calendar Time:日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。这个标准时间点对不同的编译器来说会有所不同,但对一个编译原创 2015-03-03 16:04:05 · 9181 阅读 · 0 评论 -
基于管道的popen和pclose函数
标准I/O函数库提供了popen函数,它启动另外一个进程去执行一个shell命令行。这里我们称调用popen的进程为父进程,由popen启动的进程称为子进程。popen函数还创建一个管道用于父子进程间通信。子进程要么从管道读信息,要么向管道写信息,至于是读还是写取决于父进程调用popen时传递的参数。下在给出popen、pclose的定义: 01#inc转载 2015-05-04 16:18:01 · 650 阅读 · 0 评论 -
C语言实现文件字符替换
C语言标准路为我们提供了文件操作函数:包含:fopen()/fclose() //文件打开与关闭函数;(参数与返回类型省略) fgetc()/fputc() //从流中获取字符,向文件流中写入字符; getc()/putc() //与fgetc()/fputc()等价,不同转载 2015-05-06 20:02:29 · 5892 阅读 · 0 评论 -
getopt解析命令行选项参数
getopt被用来解析命令行选项参数。#include extern char *optarg; //选项的参数指针 extern int optind, //下一次调用getopt的时,从optind存储的位置处重新开始检查选项。 extern int opterr, //当opterr=0时,getopt不向stderr输出转载 2014-12-18 11:04:10 · 2105 阅读 · 0 评论 -
深入理解C语言的函数调用过程
深入理解C语言的函数调用过程 本文主要从进程栈空间的层面复习一下C语言中函数调用的具体过程,以加深对一些基础知识的理解。 先看一个最简单的程序:点击(此处)折叠或打开 /*test.c*/#include stdio.h>int foo1(int m,int n,int p){ in转载 2015-10-29 22:03:50 · 9049 阅读 · 0 评论 -
一个可执行文件是怎么来的
一个可执行文件的生成一般都要经过下面几个步骤:编辑 、预处理 、 编译、优化、汇编 、 连接 ——>可执行文件下面将从这几个步骤一个一个来分析他们的具体内容。1. 编辑编辑这个过程其实挺简单的,但也是最讲究的,它直接体现了一个编程者的编程习惯,以及影响到别人对程序的阅读感受,所以有必要总结一下。(1) 注释要规范,多用 /*.....*/ ,少用// ,逻辑复杂的函原创 2015-11-02 09:35:55 · 5391 阅读 · 0 评论 -
普通lds文件分析
对于.lds文件,它定义了整个程序编译之后的连接过程,决定了一个可执行程序的各个段的存储位置。虽然现在我还没怎么用它,但感觉还是挺重要的,有必要了解一下。先看一下 GNU官方网站上:http://www.gnu.org/对.lds文件形式的完整描述:SECTIONS {...secname start BLOCK(align)(NOLOAD) : AT ( ld转载 2015-11-02 11:07:30 · 3825 阅读 · 0 评论 -
头文件与同名源文件的关系
1,系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找。 #include 2,用户自定义的文件用双引号括起来,编译器首先会在用户目录下查找,然后在到C++安装目录(比如VC中可以指定和修改库文件查找路径,Unix和Linux中可以通过环境变量来设定)中查找,最后在系统文件中查找。#include “xxx.h” 二、头文件如何来关联源文件 这个问题原创 2014-09-17 13:51:18 · 9299 阅读 · 4 评论 -
文件包含 与 头文件的写法
很多人对C语言中的 “文件包含”都不陌生了,文件包含处理在程序开发中会给我们的模块化程序设计带来很大的好处,通过文件包含的方法把程序中的各个功能模块联系起来是模块化程序设计中的一种非常有利的手段。 文件包含处理是指在一个源文件中,通过文件包含命令将另一个源文件的内容全部包含在此文件中。在源文件编译时,连同被包含进来的文件一同编译,生成目标目标文件。 很多人再初学时都会对这转载 2014-09-17 09:32:41 · 3251 阅读 · 0 评论 -
linux下cscope的安装使用
:linuxcscope3456#!/bin/bash currentPath=$(pwd | sed's$\/$\\\/$g')echo $currentPathfind . -name"*.h"-o-name "*.c"-o-name "*.cc"-o-name "*.cpp转载 2014-09-01 15:44:22 · 4727 阅读 · 0 评论 -
linux 下 curses库 安装 和使用
curses库是用来开发简单图形界面程序一个库(也许它的功能不止这些,但是目前我只知道这一个!:)。Ubuntu下安装方法:sudo apt-get install libncurses5-devcurses的基本用法如下:1. 包含头文件:curses.h2. 编译时应加上链接语句-lcurses,如:gcc temp.c -o temp -lcurses3. 重要的函数原创 2014-08-20 15:11:44 · 4975 阅读 · 0 评论 -
Linux下目录文件的操作(opendir,readdir,closedir) 以及DIR,dirent,stat等结构体详解
From:http://blog.chinaunix.net/uid-27213819-id-3810699.html注:为什么要说目录文件?其实在linux中目录也是一种文件,只是它的内容是上级的目录和当前目录下的文件信息等,详情可以看看相关深入的书籍opendir(打开目录) 相关函数open,readdir,closedir,rewi转载 2014-08-20 10:11:35 · 11002 阅读 · 1 评论 -
linux signal信号处理过程与机制--完全实例讲解
信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。 信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。从它的命名可以看出,它的实质和使用很象中断。所以,信号可以说是进程控制的一部分。 一、信号的基本概念 本节先介绍信号的一些基本概念,然后给出一转载 2014-08-20 17:08:34 · 9766 阅读 · 0 评论 -
errno的值的解释
ifndef _I386_ERRNO_H#define _I386_ERRNO_H#define EPERM 1 /* Operation not permitted */#define ENOENT 2 /* No such file or directory */#define ESRCH 3 /* No such process */#define EINTR 4 /*转载 2014-09-18 14:18:40 · 1376 阅读 · 0 评论 -
ioctl 详细说明
一般来讲ioctl在用户程序中的调用是:ioctl(int fd,int command, (char*)argstruct)。ioctl调用与网络编程有关(本文只讨论这一点),文件描述符fd实际上是由socket()系统调用返回的。参数command的取值由/usr/include/linux/sockios.h所规定。这些command的由于功能的不同,可分为以下几个小类:• 改变路由表转载 2014-09-18 17:30:22 · 898 阅读 · 0 评论 -
在termios.h中一种对ioctl替代函数
呵,在我的blog上写着玩的,因为在做之前搜了一下chinaunix(习惯性动作),没搜到,所以就贴上来了,别见笑啊,有不对的请指正,谢谢!最近由于一个程序安全的需要,在运行程序时需要用户输入用户名密码。哎,一直没做过在程序运行时的权限认证,以前都是通过对机器系统级的用户权限控制达到权限管理的需求(事实这也是我觉得最实用,简单的一种)。OK,不做是不可能的,有时候被迫接受别人的思想,自己的转载 2014-09-18 17:38:00 · 1596 阅读 · 0 评论 -
怎么样产生和捕获SUGUSR信号??
//signal函数 // void(*signal(int signo,void (*func)(int)))(int) //func的值可以是接到信号后调用的函数的地址 #include "apue.h"static void sig_usr(int);int main(void){if(signal(SIGUSR1,sig_u原创 2014-08-20 20:41:46 · 743 阅读 · 0 评论 -
Linux信号(signal、sigaction) 机制分析
【摘要】本文分析了Linux内核对于信号的实现机制和应用层的相关处理。首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理。接着分析了内核对于信号的处理流程包括信号的触发/注册/执行及注销等。最后介绍了应用层的相关处理,主要包括信号处理函数的安装、信号的发送、屏蔽阻塞等,最后给了几个简单的应用实例。 【关键字】软中断信号,signal,sigaction,kill,si转载 2014-08-20 18:44:18 · 3211 阅读 · 1 评论 -
exec函数族(1)
fork()函数通过系统调用创建一个与原来进程(父进程)几乎完全相同的进程(子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。linux将复制父进程的地址空间内容给子进程,因此,子进程有了独立的地址空间。),也就是这两个进程做完全相同的事。在fork后的子进程中使用exec函数族,可以装入和运行其转载 2014-08-22 10:51:09 · 626 阅读 · 0 评论 -
exec函数族实例讲解
本节目标:exec替换进程映像exec关联函数组(execl、execlp、execle、execv、execvp)一,exec替换进程映像在进程的创建上Unix采用了一个独特的方法,它将进程创建与加载一个新进程映象分离。这样的好处是有更多的余地对两种操作进行管理。当我们创建了一个进程之后,通常将子进程替换成新的进程映象,这可以用exec系列的函数来进行。当然,exec系列的函转载 2014-08-22 10:57:00 · 788 阅读 · 0 评论 -
exec函数族(2)
1.exec家族一共有六个函数,分别是:(1)int execl(const char *path, const char *arg, ......);(2)int execle(const char *path, const char *arg, ...... , char * const envp[]);(3)int execv(const char *path, char *co转载 2014-08-22 10:52:57 · 525 阅读 · 0 评论 -
dup和dup2函数---复制文件描述符
相信大部分在Unix/Linux下编程的程序员手头上都有《Unix环境高级编程》(APUE)这本超级经典巨着。作者在该书中讲解dup/dup2之前曾经讲过“文件共享”,这对理解dup/dup2还是很有帮助的。这里做简单摘录以备在后面的分析中使用: Stevens said: (1) 每个进程在进程表中都有一个记录项,每个记录项中有一张打开文件描述符表,可将视为一个矢量,每个描述转载 2014-09-19 11:02:36 · 689 阅读 · 0 评论 -
linux下C编程规范
这是一篇用来描述 linux 内核的首选编码样式的短文档。每个人都有自己的编码风格,我不会 将我的观点强加到任何人的身上,但这正是我所要保持的东西,就像其他许多事情一样。至少请考虑在这里所列出的观点。首先,我建议打印出GNU编码标准的副本,不要去阅读,直接将它烧毁。这是一个伟大的象征性的姿态。好,现在正式开始:第1章:缩进 T一个Tab键有8个字符位因此一个缩转载 2014-08-13 16:53:29 · 3963 阅读 · 0 评论 -
Linux下查看支持的信号列表
Linux下查看支持的信号列表我们运行如下命令,可看到Linux支持的信号列表:~$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKI转载 2017-03-18 21:23:28 · 2210 阅读 · 0 评论