linux学习笔记--临时补充

fprintf函数用于格式化输出到文件,文章讨论了其用法并给出了示例。同时,文章提到了指针安全问题,如未初始化和释放后未置NULL的风险。此外,还涉及了Linux命令如shell、文件删除以及环境变量配置。文章还涵盖了libcurl库的使用,包括配置和解决依赖问题,以及树莓派上openssl和摄像头的设置与操作。
摘要由CSDN通过智能技术生成

fprintf():用于文件操作

   #include <stdio.h>
   int fprintf( FILE *stream, const char *format, ... );

fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.因此fprintf()可以使得信息输出到指定的文件.比如

    char name[20] = "Mary";
    FILE *out;
    out = fopen( "output.txt", "w" );
    if( out != NULL )
    fprintf( out, "Hello %s\n", name );

函数运行结果是:Hello Mary

补充串口相关API:http://t.csdn.cn/d6cDb

“野指针”不是NULL 指针,是指向“垃圾”内存的指针。“野指针”的成因主要有两种:
(1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL 指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。例如
char *p = NULL;
char *str = (char *) malloc(100);
(2)指针p 被free 或者delete 之后,没有置为NULL,让人误以为p 是个合法的指针。

进入超级用户文件:sudo cd root    退出超级用户:su -pi

进入根目录:cd / (显示root bin boot dev etc home lib....)     

删除一些不能删除的文件:sudo rm -rf  +文件名 

删除文件夹(根目录):rm 文件夹名 -rf     

文件编译取消数字行:set nonu                                                          

shell(壳):shell也是一个应用程序,是提供了去操作内核的工具,我们在终端输入指令的时候,一回车就会启动一个shell,shell吧回车的字符来启动应用程序来运行,来启动内核;

为什么要自己实现驱动:在应用层调用驱动时,需要用到wiringPi库,这是树莓派平台自带的的库,有些平台不一定提供wiringPi库,不像C库是LINUX都自带的标准库;

配置驱动IO口寄存器:                                                                                                        GPFSEL0 (0x3f200000):GPIO选择寄存器
GPSET0 (0x3f20001c):GPIO引脚输出寄存器
GPCLR0 (0x3f200028):GPIO引脚输出清除寄存器

history:打开之前输入命令历史记录;

如何配置环境变量 : 第一:echo $PATH:显示当前路径下的环境变量; 一直到/games: 为止                                            第二: pwd:显示当前文件夹路径名;第三:输入export PATH= /games:+pwd(路径名)

export LD_LIBRARY_PATH:动态链接库文件搜索的目录

配置永久环境变量:vi /home/tang(用户名)/.bashrc

如何写一个shell脚本:建立一个.sh 结尾的文件名 然后在函数里面输入要执行的程序命令

export LD_LIBRARY_PATH="/home/pi/test" //更改当前动态库环境变量 



./mainProDy  //可执行文件

然后给文件名添加可执行权限:chmod +x start.sh
执行程序 ./start.sh (不是./a.out)

在下载openssl库后编译之前 要先删除原来curl文件夹里面 _install 这个,这样我们调用libcurl库去访问https协议的网址就不会出错了(否者会出现OK=1 报错);

字,字节,位,比特 的区别和内存大小: 1字=2字节; 一个字节=8位(bit);

1 KB = 1024 B(字节);

1 MB = 1024 KB; (2^10 B)

1 GB = 1024 MB; (2^20 B)

1 TB = 1024 GB; (2^30 B)

sizeof和strlen是两个不同的函数:

                                                           1、sizeof是C语言中的一个运算符,用于计算数据类型或变量在内存中所占的字节数。例如,sizeof(int)将返回4,因为int类型在大多数系统中占用4个字节。

                                                            2、strlen是C语言中的一个函数,用于计算字符串的长度,即字符串中字符的数量,不包括字符串末尾的空字符''。例如,strlen("hello")将返回5,因为字符串"hello"中有5个字符。

                                                            3、因此,sizeof和strlen的区别在于,sizeof用于计算数据类型或变量在内存中所占的字节数,而strlen用于计算字符串中字符的数量

libcurl库-跨平台访问网络协议库():

                                     1、需要安装curl-7.71.1tar.bz2然后解压(tar xvf curl-7.71.1tar.bz2);

                                     2、进入curl解压后的文件把库的包开源包配置安装在指定文件夹(./configure --prefix=$PWD/_install

                                     3、配置完后,make编译( make )

                                     4、编译完后,make install安装拷贝 (  make install  )可以看到我们刚开始配置的文件夹_install;

                                   5、根据之前学习树莓派的时候,静态库,动态库那里。如果我们要调用库的时候,要配置环境,仅该终端窗口有用,换个窗口程序就运行不起来了。想要永久有效vi /home/tang(用户名)/.bashrc 文件下添加 export LD_LIBRARY_PATH=./curl-7.71.1/_install/lib (也可以直接临时窗口使用)

 export LD_LIBRARY_PATH=./curl-7.71.1/_install/lib

                                     6、编译程序运行(gcc demo1.c(文件名) -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib/ -lcurl )  需要连接头文件和库

gcc renlian1.c -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib/ -lcurl 

安装摄像头 openssl 库(libcurl库需要支持https协议的话,要装上openssl这个库):

                                        1、在下载openssl库后编译之前 要先删除原来curl文件夹里面 _install 这个,这样我们调用libcurl库去访问https协议的网址就不会出错了(否者会出现OK=1 报错);

                                        2、解压openssl库(tar xvf openssl-1.1.1a.tar.gz)

                                        3、进入到解压后openssl文件夹里面安装库(./config )

                                        4、当前文件夹编译( make )

                                        5、安装(sudo make install)

                                        6、进入到curl文件里编译 libcurl库加上openssl 库 (./configure --prefix=$PWD/_install --   with-ssl)

                                         7、make

                                         8、make install

编译gcc的时候报错:

./curl-7.71.1/_install/lib//libcurl.so: undefined reference to `SSL_CTX_set_keylog_callback@OPENSSL_1_1_1'
./curl-7.71.1/_install/lib//libcurl.so: undefined reference to `SSL_CTX_set_post_handshake_auth@OPENSSL_1_1_1'
./curl-7.71.1/_install/lib//libcurl.so: undefined reference to `SSL_CTX_set_ciphersuites@OPENSSL_1_1_1'

解决办法:gcc 后面加上   -lssl  -lcrypto
 

gcc renlian1.c -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib/ -lcurl -lssl  -lcrypto

执行程序./a.out报错openssl: /usr/lib/x86_64-linux-gnu/libssl.so.1.1: version `OPENSSL_1_1_1' not found :解决办法

 echo "export LD_LIBRARY_PATH=/usr/local/lib" >> ~/.bashrc
 export LD_LIBRARY_PATH=/usr/local/lib

打开树莓派摄像头:

                                 1、确认摄像头是否有用(vcgencmd get_camera)

                                  2、sudo raspi-config 选择 1 5 后重启 

                                  3、启动摄像头,到所在mjpg-streamer文件夹(./start.sh)

                                  4、摄像头拍照命令:(raspistill -o image.jpg(保存的图片文件名)

                                  5、网页查看:默认访问地址是 http://<树莓派IP>:8080

 gcc input.h shexiangtou.c yushideng.c erlou.c yuying.c fengminqi.c lock.c device.h huoyan.c mainpro.c sanlou.c socket.c yilou.c -lwiringPi -lpthread -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib/ -lcurl

vi编译出现不能修改的问题:在编译页面输入以下内容

:set fileencoding=utf-8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值