⑴ linux C语言的锁机制
你打印parents并没尝试lockf加锁啊
文件锁必须大家都用才有效果的
⑵ linux生成的rsa秘钥在哪
方法一, 有的时候经常需要登录ssh,每次都需要输入密码,会比较繁琐。所以设置了一下使用RSA公钥认证的方式登录Linux。 首先需要在服务器端设置/etc/ssh/sshd_config # vim /etc/ssh/sshd_config 修改如下两行为yes。其实大多数情况下不用修改,默认就是yes。 RSAAuthentication yes PubkeyAuthentication yes (1) 如果客户机和服务器都是Linux机器,那么我们使用下面的方法:(后面第2节会提到怎么在Windows下使用Putty生成密钥对) 我们需要在客户端生成RSA密钥对。使用ssh-keygen命令: # ssh-keygen -t rsa 参数t的意思是type,后面跟着加密类型,这里我们是rsa。 然后会提示你输入密钥保存完成文件名,这里我们需要使用默认的id_rsa,之后才能正常才能登录。如果你生成的密钥作为其他用处,那么可以命名为其他名称: Generating public/private rsa key pair. Enter file in which to save the key (/home/cake/.ssh/id_rsa): 之后会提示你输入一个passphrase,我们这里可以留空,这样我们登录的时候就不许输入密码。 Enter passphrase (empty for no passphrase): Enter same passphrase again: 然后会提示你密钥生成成功。这是你的私钥保存为~/.ssh/id_rsa,你的公钥是~/.ssh/id_rsa.pub 我们现在需要做的是,把id_rsa.pub的内容,添加的服务器端的~/.ssh/autherized_keys文件最后。 你可以把这个文件上传到服务器端,然后使用命令: # cat id_rsa.pub >> ~/.ssh/autherized_keys 到这里就完成了。 (2) 在Windows下使用Putty生成密钥对: Putty的安装目录下有个puttygen.exe程序,我们运行这个程序。 之后点击Generate,开始生成密钥对。我们需要根据提示,在指定方框内随机滑动鼠标。这是为了根据鼠标轨迹,产生一些随机数据。 之后生成结束,我们点击Save Private Key将私钥存放在某个目录中。然后赋值最上面文本框中的全部内容,粘贴到Linux服务器端的autherized_key的最后。 我们现在可以关闭这个小程序。 现在打开Putty,在左边的选项中,选择Conneciton–SSH–Auth,在Private key file for authentication中,选择刚才保存的私钥路径就可以了。 到此位置,Putty也可以不用密码登录了。 方法二 使用Linux主机生成的密匙 1、生成密匙 [root@ .ssh]#ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: e4:9a:47:a7:b4:8a:0b:98:07:b8:70:de:6b:16:2c:0croot@ 2、将 /root/.ssh/id_rsa.pub改名为/root/.ssh/authorized_keys [root@ .ssh]#mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys 3、将私钥id_rsa拷贝到远程客户端 1)、如果远程客户端是linux,拷贝到远程客户端/root/.ssh/即可 2)、putty作为远程客户端在 putty不能识别直接从服务器拷贝来的私钥,需要使用puttygen.exe进行格式转换 (1)、打开puttygen.exe --> Conversions --> Import Key (2)、选择拷贝过来的私钥文件id_rsa (3)、Save private key->id_rsa.ppk(保存私钥) 4、打开putty.exe 1)、Session --> Host Name (填写服务器地址或者域名) 2)、Connection --> SSH --> Auth (点Browse选择刚生成的id_rsa.ppk) 3)、open 成功打开后出现如下提示: login as: root Authenticating with public key "imported-openssh-key" ---------------------------------------------------------------------------------- 当然你有可能会遇到这个错误 [因为我遇到了,呵呵]: Permissions 0755 for '你配置的公钥文件路径' are too open. 这个是因为这几个文件权限设置的有点问题 执行命令: chmod 600 你的文件
⑶ Linux C语言用system()调用,带参数
linux c system函数介绍:
system(执行shell 命令)
相关函数
fork,execve,waitpid,popen
表头文件
#i nclude
定义函数
int system(const char * string);
函数说明
system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命>令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。
返回值
=-1:出现错误
=0:调用成功但是没有出现子进程
>0:成功退出的子进程的id
如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值>。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为 system()调用/bin/sh失败所返回的127,因此最好能再检查errno 来确认执行成功。
附加说明
在编写具有SUID/SGID权限的程序时请勿使用system(),system()会继承环境变量,通过环境变量可能会造成系统安全的问题。
范例
#i nclude
main()
{
system("ls -al /etc/passwd /etc/shadow");
}
执行结果:
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
-r--------- 1 root root 572 Sep 2 15 :34 /etc/shado
例2:
char tmp[];
sprintf(tmp,"/bin/mount -t vfat %s /mnt/usb",dev);
system(tmp);
其中dev是/dev/sda1。
system函数的源码
#include <syspes.h>
#include <sys/wait.h>
#include <errno.h>
#include <unistd.h>
int system(const char * cmdstring)
{
pid_t pid;
int status;
if(cmdstring == NULL){
return (1);
}
if((pid = fork())<0){
status = -1;
}
else if(pid = 0){
execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);
-exit(127); //子进程正常执行则不会执行此语句
}
else
{
while(waitpid(pid, &status, 0) < 0){
if(errno != EINTER)
{
status = -1;
break;
}
}
}
return status;
}
那么如何获得system的返回值呢??
char buf[10];
char * ps="ps -ef|grep -c root";
FILE *ptr;
int i;
if((ptr = popen(ps, "r")) != NULL)
{
fgets(buf, 10 , ptr);
i = atoi(buf);
pclose(ptr);
}
可以man下waitpid查看下如何检查status的值
int ret = system("ls -al /etc/passwd /etc/shadow");
if(WIFSIGNALED(ret))
具体的这些宏查看man waitpid
⑷ linux用户权限-实例问题
这个问题其实不难,要能删除文件,要对文件所在的目录有写权限,首先,你把root的home目录“~”的权限设置为775,再把用户C加入root组,这样的话用户C就可以删除那个文件了然后,你建立abc.txt文件,把文件所有者设置为用户a,再把文件的权限设置640,最后将文件所属组设置为用户b所在的组,这样的话,用户a因为拥有这个文件,对这个文件的权限是6(读写),所以他可以读写这个文件,但是,他对文件所在的目录“~”权限是5(读、执行)没有写权限,所以他无法删除这个文件,而用户b对文件的权限是4(只读),所以他只能读这个文件,而他对文件所在的目录的权限同样是5(读、执行),所以他同样不能删除这个文件,而用户C对文件的权限是0(没有任何权限),所以他既不能读也不能写,但他对文件所在目录的权限是7(读、写、执行),所以他可以删除这个文件。
⑸ linux 怎么编译c的源程序的gcc,编译命令是什么
编译方法:格式 gcc [option] [sourcefilename]常用的选项最简单的是:gcc hello.c默认的情况下将生成a.out的可执行性文件,
只需要在终端上输入./a.out就可以看到执行的结果,如果你想指定生成目标文件的名字那么你可以加上 -o选项,命令如下:gcc -o hello hello.c
命令:gcc -c hello hello.c
gcc命令的基本用法
gcc[options][filenames]
其中,filenames为文件名;options为编译选项。
当不使用任何编译选项编译hello.c时,gcc将会自动编译产生一个a.out的可执行文件:
[root@localhostc]#ls
hello.c
[root@localhostc]#gcchello.c
[root@localhostc]#ls
a.outhello.c
执行:
[root@localhostc]#./a.out
Hello,World!
使用-o编译选择,可以为编译后的文件指定一个名字:
[root@localhostc]#ls
a.outhello.c
[root@localhostc]#gcchello.c-ohello
[root@localhostc]#ls
a.outhellohello.c
执行:
[root@localhostc]#./hello
Hello,World!
注意:使用-o选项时,-o后面必须跟一个文件名,即:-o outfile。
为了便于描述后面的选项,删除hello和a.out可执行文件。
⑹ C语言编程中</root>与<root>是什么意思
root指的是你有权限可以再系统上对所有档案有 "读" "写" "执行"的权力
.png
root这名词常出现再Linux & unix上,Android是架构再Liinux上面所有才会有root这名词
而root相当于windows 上的administration,一个管理者的身份。
再Android系统上为了保护系统不被恶搞,所以不建议你root,尤其是你完全不懂Linux的情况下。
一个想像,当你在Windows上是属于administration的权限下,你几乎可以再任何地方对任何档案删除他。
但你删除时 Windows上是会问你是否删除。
但再Linux(Android也一样)当你是 root后,你删除档案是值接删除的且不会跟你确定是否删除,
这删除不是放到类似垃圾桶的地方而是真的删了....
所以当你安装了可能是恶意的程式,再你系统上任意的做事,后果是不堪的。
另外更新韧体是不需要root的.,只需要装官方的软体即可,版上有教学自己找吧。
强烈建议不是很懂Linux的人真的不要root。
root什么意思
电脑中ROOT的意思:
在Unix系统(如AIX、BSD等)和类UNIX系统(如Debian、Redhat、Ubuntu等各个发行版的Linux)中,系统的超级用户一般命名为root。root是系统中唯一的超级用户,具有系统中所有的权限,如启动或停止一个进程,删除或增加用户,增加或者禁用硬件等等。
计算机领域术语现代操作系统一般属于多用户的操作系统,也就是说,同一台机器可以为多个用户建立各自的账户,也允许拥有这些账户的用户同时登录这台计算机。这就涉及到计算机用户和资源的管理。这么多用户都能够同时访问和使用这同一台计算机,那么,其中的哪个用户具有管理所有这些用户账户和整个计算机的资源的权限呢?在Windows上,这个具有管理其他用户和计算机资源的用户一般叫administrator。
root用户所在的组称为root组。“组”是具有相似权限的多个用户的集合。
需要注意的是,root用户是系统中唯一的超级管-理-员,它具有等同于操作系统的权限,所以,如果用root进行了误操作后果可能是危险的,如,在根目录下不小心执行#rm -rf * (这个命令极度危险,千
⑺ scientific linux上root画图软件运行c语言文件报错
以WIN7为例,可按以下步骤操作:
1、按下键盘上的“Print Screen Sys Rq"键
⑻ Linux下的c编程:系统调用
linux c system函数介绍:
system(执行shell 命令)
相关函数
fork,execve,waitpid,popen
表头文件
#i nclude
定义函数
int system(const char * string);
函数说明
system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命>令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。
返回值
=-1:出现错误
=0:调用成功但是没有出现子进程
>0:成功退出的子进程的id
如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值>。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为 system()调用/bin/sh失败所返回的127,因此最好能再检查errno 来确认执行成功。
附加说明
在编写具有SUID/SGID权限的程序时请勿使用system(),system()会继承环境变量,通过环境变量可能会造成系统安全的问题。
范例
#i nclude
main()
{
system("ls -al /etc/passwd /etc/shadow");
}
执行结果:
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
-r--------- 1 root root 572 Sep 2 15 :34 /etc/shado
例2:
char tmp[];
sprintf(tmp,"/bin/mount -t vfat %s /mnt/usb",dev);
system(tmp);
其中dev是/dev/sda1。
system函数的源码
#include <syspes.h>
#include <sys/wait.h>
#include <errno.h>
#include <unistd.h>
int system(const char * cmdstring)
{
pid_t pid;
int status;
if(cmdstring == NULL){
return (1);
}
if((pid = fork())<0){
status = -1;
}
else if(pid = 0){
execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);
-exit(127); //子进程正常执行则不会执行此语句
}
else
{
while(waitpid(pid, &status, 0) < 0){
if(errno != EINTER)
{
status = -1;
break;
}
}
}
return status;
}
那么如何获得system的返回值呢??
char buf[10];
char * ps="ps -ef|grep -c root";
FILE *ptr;
int i;
if((ptr = popen(ps, "r")) != NULL)
{
fgets(buf, 10 , ptr);
i = atoi(buf);
pclose(ptr);
}
可以man下waitpid查看下如何检查status的值
int ret = system("ls -al /etc/passwd /etc/shadow");
if(WIFSIGNALED(ret))
具体的这些宏查看man waitpid
⑼ 我在linux里普通用户之间如何切换(创建用户时没有设置密码)
1.登陆时,输入超级用户名:root,然后输入root用户的密码。
2.如果你忘记root密码。
a.在grub选项菜单按e进入编辑模式
b.(按e)编辑kernel那行
添加
/init
1
(或/single)
c.按b重启
或者用光盘修改root密码
a.将系统光盘放入光驱,设置光驱引导
b.选择f2进入系统修复
输入命令:linux
rescue
c.出现这个提示的时候应该记住,他提示的命令:chroot
/mnt/sysimage,选择ok,回车
d.在shell输入chroot
/mnt/sysimage
回车
e.输入password
回车,新密码
回车,确认新密码
回车
f.重新启动
如果有帮助,给分哦,谢谢!
⑽ linux下 利用C或C++ 语言调用需要root权限的命令时候,怎么处理。
我想到2种方法
1.运行你的C/C++程序时 加上sudo
“sudo ./程序名” 然后输入密码
2.方法1不行的话 程序里用到system时 加上sudo
systme("sudo 命令")
希望可以帮到你