程序中调用终端命令-systerm-没有终端存在错误
关于system函数
你好! 关于system()函数最开始就是本科老师讲课时让终端停留是运用的system("pause")
程序就会停留在终端,让我们看清楚结果。学习soocket编程后需要了解system函数,也还死linux库函数的运行原理可以在bantu终端输入man system
进行参看系统说明文件
问题
本次主要是在socket编程中利用`system`函数设置pacn模块的can通讯参数。当然这些参数也可以在终端输入,设置参数需要利用`sudo`提供命令权限。
同样在代码中命令以字符窜的形式通过systerm函数发送。如果命令中没有`sudo`,依然会提示权限不过或者命令不被允许。加上`sudo`后显示:
没有终端存在,且未指定askpass 程序
解决
简单分析或者百度可以知道,是权限和密码的问题。终端中sudo 后一般是需要输入密码的。然而程序中或者是项目里,没有输入密码的设计。
百度或者 CSDN 中有很多帖子都多该问题做了说明。但并不一定嫩够解决问题。
下面我来给出我的解决方案
- 打开一个新终端
- 输入
sudo visudo
- 在文件最后添加句:
username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand:
- 例句:
zgq ALL = NOPASSWD: /sbin/ip, /sbin/ifconfig
然后问题即解决
另外附录
对于返回的错误代码可以利用下面解析
int ret;
ret = system(down);
fprintf(stderr, "candown error: %s\n", strerror(ret));
perror("can0 down");