重工电子论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz

开贴,不定期对Linux下的编程进行更新

查看数: 6710 | 评论数: 8 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2016-8-27 21:11

正文摘要:

毕业后毅然跳进了linux环境下编程的坑里面,好多东西从头开始学,在论坛里面开个帖子,留下学习笔记。资料传送门:链接:http://pan.baidu.com/s/1kV2hm2V 密码:0bub;

回复

顾福源 发表于 2016-9-4 19:45:15
两种文件系统的区别
当在程序中需要时使用文件系统打开文件时,程序员会在open()和fopen()这两个函数中选择一个来打开文件,虽然这两个函数都能打开文件,但是后者(fopen)为缓冲文件系统,缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满后再从内存“缓冲区”依此读入接收的变量。执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写入文件。缓冲件系统的函数还包括fopen, fclose, fread, fwrite, fgetc, fgets, fputc, fputs, freopen, fseek, ftell, rewind等;
而open系列的函数则没有缓冲区,借助文件结构体指针来对文件进行管理,通过文件指针来对文件进行访问,既可以读写字符、字符串、格式化数据,也可以读写二进制数 据。非缓冲文件系统依赖于操作系统,通过操作系统的功能对文件进行读写,是系统级的输入输出,它不设文件结构体指针,只能读写二进制文件,但效率高、速度快,由于ANSI标准不再包括非缓冲文件系统,因此建议大家最好不要选择它。
顾福源 发表于 2016-9-4 13:25:56
李维强-15级 发表于 2016-9-4 03:05
C语言就是一个坑 ,用起来确实麻烦。。。
只不过也 把你那个搞通透了,看我们这些什么前端后端就是helloWo ...

其实重点还是在操作系统、数据结构及算法原理这些方面
李维强-15级 发表于 2016-9-4 03:08:22
顾福源 发表于 2016-9-3 18:01
关于线程互斥的时候使用条件变量的研究
    百度百科的解释:条件变量是利用线程间共享的全局变量进行同步 ...

线程互斥这个,在C++里面有几种方式  一般用互斥信号,或者关键代码段来标明要访问的公用变量是不是正在被其他线程占用。。反正意思就是标明其他代码不能访问这个公用变量
李维强-15级 发表于 2016-9-4 03:05:17
C语言就是一个坑 ,用起来确实麻烦。。。
只不过也 把你那个搞通透了,看我们这些什么前端后端就是helloWord啊
顾福源 发表于 2016-9-2 21:50:43
makefile基础的用法理解起来不难,但是makefile的功能远不止这么一点点,今天拿到公司的一个工程,打开makefile一看彻底就懵了,还是基础不够,makefile中提供的很多指令,在一个makefile中包含引用其他的makefile进行编译,功能之强大。。贡献一份找了半天的资料,简单易懂http://www.cnblogs.com/wang_yb/p/3990952.html
顾福源 发表于 2016-9-2 21:46:19
在集成的IDE环境下面,编辑好工程代码以后只需要点击build等编译的按键,IDE就能为我们完成代码的编译、链接等工作。如果没有集成开发环境呢,就得使makefile了,自己在makefile中写好编译的规则,然后执行make开始编译。
makefile的规则:
        target ... : prerequisites ...
        command
        ...
        ...
target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label);
prerequisites就是,要生成那个target所需要的文件或是目标;
command也就是make需要执行的命令。(任意的Shell命令);
这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则。也就是Makefile中最核心的内容。
举个例子:想编译得到aaa的文件,代码有main.c和test.c,main.c中引用了a.h和b.h,test.c中引用了c.h,那么就有如下的makefile文件:
aaa : main.o test.o
gcc -o aaa main.o test.o

main.o : main.c a.h b.h
gcc -c main.c

test.o : test.c c.h d.h
gcc -c test.c

clean:
        rm main.o test.o
上述例子能完成一个简单的编译动作,但是一旦aaa所需要的依赖文件太多,这时就可以使用变量来代替依赖文件,达到简化的目的,修改如下:
#使用obj变量来表示依赖文件
obj = main.o test.o
gcc -o aaa $(obj)

main.o : main.c a.h b.h
gcc -c main.c

test.o : test.c c.h d.h
gcc -c test.c

clean:
        rm main.o test.o
于是如果有新的 .o 文件加入,我们只需简单地修改一下 obj 变量就可以了;
此makefile还可以继续简化,使用make的自动推导的功能,只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中,如果make找到一个whatever.o,那么whatever.c,就会是whatever.o的依赖文件。并且 cc -c whatever.c 也会被推导出来,于是进一步简化得:
obj = main.o test.o
gcc -o aaa $(obj)

main.o : main.c a.h b.h
test.o : test.c c.h d.h

.PHONY : clean
        rm main.o test.o
注意观察,这个makefile里面没有了类似于gcc -c xxx.c这样的语句了,这种方法,也就是make的“隐晦规则”。上面文件内容中,“.PHONY”表示,clean是个伪目标文件;
程浥 发表于 2016-8-28 14:30:14
大神 带我 装逼 带我飞

Archiver|手机版|小黑屋|cqutlab ( 渝ICP备15004556号

GMT+8, 2024-12-22 17:29 , Processed in 0.178896 second(s), 32 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表