刚刚我开始阅读这本书:UNIX® 环境中的高级编程。我想尝试运行它的第一个代码示例。我正在运行 Scientific Linux 6.4。
我下载了源代码,正如它在自述make
文件中所说的那样,我在未压缩的文件中运行。
我写了第一个程序(一个模拟ls
命令)
#include "./include/apue.h"
#include <dirent.h>
int
main(int argc, char *argv[])
{
DIR *dp;
struct dirent *dirp;
if(argc!=2)
err_quit("usage: test directory_name");
if((dp=opendir(argv[1]))==NULL)
err_sys("Can't open %s", argv[1]);
while((dirp=readdir(dp))!=NULL)
printf("%s\n", dirp->d_name);
closedir(dp);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
并将其放入未压缩的文件中。正如书中所建议的那样,我接着跑:gcc myls.c
. 但我收到此错误:
# gcc myls.c
/tmp/ccWTWS2I.o: In function `main':
test.c:(.text+0x20): undefined reference to `err_quit'
test.c:(.text+0x5b): undefined reference to `err_sys'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我想知道如何解决这个问题。我还希望能够运行我在任何目录中编写的代码。
我想从 USB 安装 Scientific Linux。我不知道为什么 unetbootin 不起作用,但我并不好奇:毕竟我是从 Windows 转到 Linux 来查看和学习底层程序的。我将我的 USB 驱动器格式化为 FAT32 并以 root 身份运行此命令:
# pv -tpreb /path/to/the/downloaded/iso | sudo dd of=/path/to/the/USB/device
Run Code Online (Sandbox Code Playgroud)
虽然它适用于 Live-CD 或网络安装(小于 1GB),但不适用于大约 4GB 的实际安装 DVD。如果有人能帮我解决这个问题,我将不胜感激。
考虑到它适用于较小的 .iso 文件这一事实,我想这与文件系统有关,对吗?我还有什么其他选择?
我安装了 Scientific Linux 6.5。从一开始(在这台计算机上),在系统启动期间(当我按下esc
以查看已写入的启动日志时),我经常看到这条线在所有启动命令之间跳转:
usbhid: 9-2:1.1: couldn't find an input interrupt endpoint
Run Code Online (Sandbox Code Playgroud)
我对此没有什么大问题,所以直到现在我才忽略它。最近我试图emacs
在纯终端环境中编辑我的程序(通过按Ctrl+Alt+F2
),在我的工作中间,这条线再次跳入!我想看看是什么导致了它以及如何解决这个问题。
这是一个例子。我在 emacs 中写了这段文字:
This is a test to show the problem.
This line was a clean sentance, I kept the cursor
in it to show how the line jumps in.
It is not too common but it jumps in every once and a while.
Run Code Online (Sandbox Code Playgroud)
等了一会儿,那行跳到了光标所在的那一刻(在第三行的“how”之后):
这条线仍然存在,但只是在外观上!当我按退格键时,它会删除底层句子,我只能越过它与未下线重叠的区域。
最终,当我保存它时,我也看不到它,进一步证明它只是出现在那里,而不是在实际的缓冲区中。
当我lshw -c input
以 root 身份运行时,我得到以下输出:
[root@mycomputer myid]# lshw -c input
*-usb
description: …
Run Code Online (Sandbox Code Playgroud) 在我的办公室计算机(运行 Scientific Linux 6.3)上,我有几个窗口在单独的终端模拟器 ( /dev/pts/
) 中运行一些进程。我经常从我的 iPad 用 iSSH 连接到我的办公室电脑,但我只能看到已写入文件的程序的结果,而无法看到每个终端正在显示或控制终端。
我希望能够暂时将终端的控制权切换到我的 iPad iSSH 终端,查看结果,运行新命令(在我的办公室终端上从我的 iPad 上)然后让程序在我的办公室计算机上运行并返回到我的 iSSH终端,所以我可以检查其他终端或干脆退出。由于我大部分时间使用 3G 来连接我的 iPad,我不想使用任何图形相关的方法,这会非常慢。
据我所知,reptyr
似乎将进程的控制权从一个终端永久转移到另一个终端,我还没有看到任何人谈论(或询问)将控制权交还给原始终端。我想在完成后将其返回到原来的终端。
我真的很感激任何建议或帮助。提前致谢